소스 검색

change java compiler to only produce one java file

jieluo@google.com 11 년 전
부모
커밋
7db9c098df

+ 1 - 1
examples/Makefile

@@ -30,7 +30,7 @@ list_people_cpp: list_people.cc protoc_middleman
 	c++ list_people.cc addressbook.pb.cc -o list_people_cpp `pkg-config --cflags --libs protobuf`
 
 javac_middleman: AddPerson.java ListPeople.java protoc_middleman
-	javac AddPerson.java ListPeople.java com/example/tutorial/AddressBookProtos.java com/example/tutorial/AddressBookProtosInternalDescriptors.java
+	javac AddPerson.java ListPeople.java com/example/tutorial/AddressBookProtos.java
 	@touch javac_middleman
 
 add_person_java: javac_middleman

+ 4 - 4
src/google/protobuf/compiler/java/java_file.cc

@@ -44,6 +44,7 @@
 #include <google/protobuf/compiler/java/java_message.h>
 #include <google/protobuf/compiler/java/java_name_resolver.h>
 #include <google/protobuf/compiler/java/java_service.h>
+#include <google/protobuf/compiler/java/java_shared_code_generator.h>
 #include <google/protobuf/compiler/code_generator.h>
 #include <google/protobuf/io/printer.h>
 #include <google/protobuf/io/zero_copy_stream.h>
@@ -314,14 +315,13 @@ void FileGenerator::GenerateDescriptorInitializationCodeForImmutable(
     "    getDescriptor() {\n"
     "  return descriptor;\n"
     "}\n"
-    "private static com.google.protobuf.Descriptors.FileDescriptor\n"
+    "public static com.google.protobuf.Descriptors.FileDescriptor\n"
     "    descriptor;\n"
     "static {\n");
   printer->Indent();
 
-  printer->Print(
-    "descriptor = $descriptor_classname$.descriptor;\n",
-    "descriptor_classname", name_resolver_->GetDescriptorClassName(file_));
+  SharedCodeGenerator shared_code_generator(file_);
+  shared_code_generator.GenerateDescriptors(printer);
 
   for (int i = 0; i < file_->message_type_count(); i++) {
     message_generators_[i]->GenerateStaticVariableInitializers(printer);

+ 0 - 9
src/google/protobuf/compiler/java/java_generator.cc

@@ -99,19 +99,10 @@ bool JavaGenerator::Generate(const FileDescriptor* file,
 
   vector<string> all_files;
 
-  if (generate_shared_code) {
-    // Generate code shared between immutable and mutable API.
-    SharedCodeGenerator shared_code_generator(file);
-    shared_code_generator.Generate(context, &all_files);
-  }
-
   vector<FileGenerator*> file_generators;
   if (generate_immutable_code) {
     file_generators.push_back(new FileGenerator(file, /* immutable = */ true));
   }
-  if (generate_mutable_code) {
-    file_generators.push_back(new FileGenerator(file, /* mutable = */ false));
-  }
   for (int i = 0; i < file_generators.size(); ++i) {
     if (!file_generators[i]->Validate(error)) {
       for (int j = 0; j < file_generators.size(); ++j) {

+ 1 - 1
src/google/protobuf/compiler/java/java_name_resolver.cc

@@ -177,7 +177,7 @@ bool ClassNameResolver::HasConflictingClassName(
 
 string ClassNameResolver::GetDescriptorClassName(
     const FileDescriptor* descriptor) {
-  return GetFileImmutableClassName(descriptor) + "InternalDescriptors";
+  return GetFileImmutableClassName(descriptor);
 }
 
 string ClassNameResolver::GetClassName(const FileDescriptor* descriptor,

+ 8 - 10
src/google/protobuf/compiler/java/java_shared_code_generator.cc

@@ -80,12 +80,18 @@ void SharedCodeGenerator::Generate(GeneratorContext* context,
         "package", java_package);
     }
     printer->Print(
-      "public final class $classname$ {\n",
+      "public final class $classname$ {\n"
+      "  public static com.google.protobuf.Descriptors.FileDescriptor\n"
+      "      descriptor;\n"
+      "  static {\n",
       "classname", classname);
     printer->Indent();
+    printer->Indent();
     GenerateDescriptors(printer.get());
     printer->Outdent();
+    printer->Outdent();
     printer->Print(
+      "  }\n"
       "}\n");
 
     printer.reset();
@@ -113,11 +119,7 @@ void SharedCodeGenerator::GenerateDescriptors(io::Printer* printer) {
   file_proto.SerializeToString(&file_data);
 
   printer->Print(
-    "public static com.google.protobuf.Descriptors.FileDescriptor\n"
-    "    descriptor;\n"
-    "static {\n"
-    "  java.lang.String[] descriptorData = {\n");
-  printer->Indent();
+    "java.lang.String[] descriptorData = {\n");
   printer->Indent();
 
   // Only write 40 bytes per line.
@@ -206,10 +208,6 @@ void SharedCodeGenerator::GenerateDescriptors(io::Printer* printer) {
 
   printer->Print(
     "    }, assigner);\n");
-
-  printer->Outdent();
-  printer->Print(
-    "}\n");
 }
 
 bool SharedCodeGenerator::ShouldIncludeDependency(

+ 1 - 2
src/google/protobuf/compiler/java/java_shared_code_generator.h

@@ -68,10 +68,9 @@ class SharedCodeGenerator {
 
   void Generate(GeneratorContext* generator_context,
                 vector<string>* file_list);
-
- private:
   void GenerateDescriptors(io::Printer* printer);
 
+ private:
   // Returns whether the dependency should be included in the output file.
   // Always returns true for opensource, but used internally at Google to help
   // improve compatibility with version 1 of protocol buffers.