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); |
} |
} |
} |