| Index: third_party/protobuf/src/google/protobuf/compiler/java/java_file.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/compiler/java/java_file.cc b/third_party/protobuf/src/google/protobuf/compiler/java/java_file.cc
|
| index 7ea127c0fad3afffd4fb440992a2bbd2f2a16418..8968069f4f0c00a9275a29f51e04221dff25a901 100644
|
| --- a/third_party/protobuf/src/google/protobuf/compiler/java/java_file.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/compiler/java/java_file.cc
|
| @@ -88,7 +88,8 @@ bool UsesExtensions(const Message& message) {
|
| FileGenerator::FileGenerator(const FileDescriptor* file)
|
| : file_(file),
|
| java_package_(FileJavaPackage(file)),
|
| - classname_(FileClassName(file)) {}
|
| + classname_(FileClassName(file)) {
|
| +}
|
|
|
| FileGenerator::~FileGenerator() {}
|
|
|
| @@ -179,7 +180,9 @@ void FileGenerator::Generate(io::Printer* printer) {
|
| EnumGenerator(file_->enum_type(i)).Generate(printer);
|
| }
|
| for (int i = 0; i < file_->message_type_count(); i++) {
|
| - MessageGenerator(file_->message_type(i)).Generate(printer);
|
| + MessageGenerator messageGenerator(file_->message_type(i));
|
| + messageGenerator.GenerateInterface(printer);
|
| + messageGenerator.Generate(printer);
|
| }
|
| if (HasGenericServices(file_)) {
|
| for (int i = 0; i < file_->service_count(); i++) {
|
| @@ -215,24 +218,11 @@ void FileGenerator::Generate(io::Printer* printer) {
|
| .GenerateStaticVariableInitializers(printer);
|
| }
|
|
|
| - for (int i = 0; i < file_->extension_count(); i++) {
|
| - // TODO(kenton): Reuse ExtensionGenerator objects?
|
| - ExtensionGenerator(file_->extension(i))
|
| - .GenerateInitializationCode(printer);
|
| - }
|
| -
|
| printer->Outdent();
|
| printer->Print(
|
| "}\n");
|
| }
|
|
|
| - // Dummy function we can use to force the static initialization block to
|
| - // run. Needed by inner classes. Cannot be private due to
|
| - // java_multiple_files option.
|
| - printer->Print(
|
| - "\n"
|
| - "public static void internalForceInit() {}\n");
|
| -
|
| printer->Print(
|
| "\n"
|
| "// @@protoc_insertion_point(outer_class_scope)\n");
|
| @@ -310,11 +300,10 @@ void FileGenerator::GenerateEmbeddedDescriptor(io::Printer* printer) {
|
| MessageGenerator(file_->message_type(i))
|
| .GenerateStaticVariableInitializers(printer);
|
| }
|
| -
|
| for (int i = 0; i < file_->extension_count(); i++) {
|
| // TODO(kenton): Reuse ExtensionGenerator objects?
|
| ExtensionGenerator(file_->extension(i))
|
| - .GenerateInitializationCode(printer);
|
| + .GenerateNonNestedInitializationCode(printer);
|
| }
|
|
|
| if (UsesExtensions(file_proto)) {
|
| @@ -325,9 +314,11 @@ void FileGenerator::GenerateEmbeddedDescriptor(io::Printer* printer) {
|
| " com.google.protobuf.ExtensionRegistry.newInstance();\n"
|
| "registerAllExtensions(registry);\n");
|
| for (int i = 0; i < file_->dependency_count(); i++) {
|
| - printer->Print(
|
| - "$dependency$.registerAllExtensions(registry);\n",
|
| - "dependency", ClassName(file_->dependency(i)));
|
| + if (ShouldIncludeDependency(file_->dependency(i))) {
|
| + printer->Print(
|
| + "$dependency$.registerAllExtensions(registry);\n",
|
| + "dependency", ClassName(file_->dependency(i)));
|
| + }
|
| }
|
| printer->Print(
|
| "return registry;\n");
|
| @@ -372,13 +363,14 @@ template<typename GeneratorClass, typename DescriptorClass>
|
| static void GenerateSibling(const string& package_dir,
|
| const string& java_package,
|
| const DescriptorClass* descriptor,
|
| - OutputDirectory* output_directory,
|
| - vector<string>* file_list) {
|
| - string filename = package_dir + descriptor->name() + ".java";
|
| + GeneratorContext* context,
|
| + vector<string>* file_list,
|
| + const string& name_suffix,
|
| + void (GeneratorClass::*pfn)(io::Printer* printer)) {
|
| + string filename = package_dir + descriptor->name() + name_suffix + ".java";
|
| file_list->push_back(filename);
|
|
|
| - scoped_ptr<io::ZeroCopyOutputStream> output(
|
| - output_directory->Open(filename));
|
| + scoped_ptr<io::ZeroCopyOutputStream> output(context->Open(filename));
|
| io::Printer printer(output.get(), '$');
|
|
|
| printer.Print(
|
| @@ -391,28 +383,36 @@ static void GenerateSibling(const string& package_dir,
|
| "package", java_package);
|
| }
|
|
|
| - GeneratorClass(descriptor).Generate(&printer);
|
| + GeneratorClass generator(descriptor);
|
| + (generator.*pfn)(&printer);
|
| }
|
|
|
| void FileGenerator::GenerateSiblings(const string& package_dir,
|
| - OutputDirectory* output_directory,
|
| + GeneratorContext* context,
|
| vector<string>* file_list) {
|
| if (file_->options().java_multiple_files()) {
|
| for (int i = 0; i < file_->enum_type_count(); i++) {
|
| GenerateSibling<EnumGenerator>(package_dir, java_package_,
|
| file_->enum_type(i),
|
| - output_directory, file_list);
|
| + context, file_list, "",
|
| + &EnumGenerator::Generate);
|
| }
|
| for (int i = 0; i < file_->message_type_count(); i++) {
|
| GenerateSibling<MessageGenerator>(package_dir, java_package_,
|
| file_->message_type(i),
|
| - output_directory, file_list);
|
| + context, file_list, "OrBuilder",
|
| + &MessageGenerator::GenerateInterface);
|
| + GenerateSibling<MessageGenerator>(package_dir, java_package_,
|
| + file_->message_type(i),
|
| + context, file_list, "",
|
| + &MessageGenerator::Generate);
|
| }
|
| if (HasGenericServices(file_)) {
|
| for (int i = 0; i < file_->service_count(); i++) {
|
| GenerateSibling<ServiceGenerator>(package_dir, java_package_,
|
| file_->service(i),
|
| - output_directory, file_list);
|
| + context, file_list, "",
|
| + &ServiceGenerator::Generate);
|
| }
|
| }
|
| }
|
|
|