change java compiler to only produce one java file

pull/1/head
jieluo@google.com 11 years ago
parent 9efebb3294
commit 7db9c098df
  1. 2
      examples/Makefile
  2. 8
      src/google/protobuf/compiler/java/java_file.cc
  3. 9
      src/google/protobuf/compiler/java/java_generator.cc
  4. 2
      src/google/protobuf/compiler/java/java_name_resolver.cc
  5. 16
      src/google/protobuf/compiler/java/java_shared_code_generator.cc
  6. 3
      src/google/protobuf/compiler/java/java_shared_code_generator.h

@ -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` 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_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 @touch javac_middleman
add_person_java: javac_middleman add_person_java: javac_middleman

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

@ -99,19 +99,10 @@ bool JavaGenerator::Generate(const FileDescriptor* file,
vector<string> all_files; 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; vector<FileGenerator*> file_generators;
if (generate_immutable_code) { if (generate_immutable_code) {
file_generators.push_back(new FileGenerator(file, /* immutable = */ true)); 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) { for (int i = 0; i < file_generators.size(); ++i) {
if (!file_generators[i]->Validate(error)) { if (!file_generators[i]->Validate(error)) {
for (int j = 0; j < file_generators.size(); ++j) { for (int j = 0; j < file_generators.size(); ++j) {

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

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

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

Loading…
Cancel
Save