diff options
author | Max Cai <maxtroy@google.com> | 2013-07-29 17:20:50 +0100 |
---|---|---|
committer | Max Cai <maxtroy@google.com> | 2013-08-05 21:54:58 +0100 |
commit | 624c448fbef20a1a2fad2289f622b468c25763d1 (patch) | |
tree | 70294971235a3e23aea495f7b3c2ea39cbfedb66 /src/google/protobuf/compiler/javamicro/javamicro_message.cc | |
parent | be47f55e2f93df84abb55759e49cf381d2745cc5 (diff) | |
download | external_protobuf-624c448fbef20a1a2fad2289f622b468c25763d1.zip external_protobuf-624c448fbef20a1a2fad2289f622b468c25763d1.tar.gz external_protobuf-624c448fbef20a1a2fad2289f622b468c25763d1.tar.bz2 |
Fix outer classname for javamicro/javanano.
- File class name is defined as the java_outer_classname option value
or the file name ToCamelCase; never the single message's ClassName.
- File-scope enums are translated to constants in the file class,
regardless of java_multiple_files.
- If java_multiple_files=true, and file's class name equals a message's
class name, no error. This is done by detecting that the outer class
is not needed and skipping the outer class codegen and clash checks.
Note: there is a disparity between java[lite] and the previous
java{micr|nan}o: when generating code for a single-message proto, the
outer class is omitted by java{micr|nan}o if the file does not have
java_outer_classname. This change makes java{micr|nan}o align with
java[lite] codegen and create the outer class, but will print some
info to warn of potential change of code.
- Also fixed the "is_own_file" detection and made all parseX() methods
static. Previously, all messages in a java_multiple_files=true file
are (incorrectly) considered to be in their own files, including
nested messages, causing them to become inner classes (instance-
bound) and forcing the parseX() methods to lose the static modifier.
- This change supersedes c/60164 and c/60086, which causes javanano to
put enum values into enum shell classes if java_multiple_files=true.
We now always use the parent class to host the enum values. A future
change will add a command line option to provide more flexibility.
- Elaborated in java/README.txt.
Change-Id: I684932f90e0a028ef37c662b221def5ffa202439
Diffstat (limited to 'src/google/protobuf/compiler/javamicro/javamicro_message.cc')
-rw-r--r-- | src/google/protobuf/compiler/javamicro/javamicro_message.cc | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/src/google/protobuf/compiler/javamicro/javamicro_message.cc b/src/google/protobuf/compiler/javamicro/javamicro_message.cc index 6f67e74..cf48b3c 100644 --- a/src/google/protobuf/compiler/javamicro/javamicro_message.cc +++ b/src/google/protobuf/compiler/javamicro/javamicro_message.cc @@ -173,15 +173,7 @@ void MessageGenerator::Generate(io::Printer* printer) { const string& file_name = descriptor_->file()->name(); bool is_own_file = params_.java_multiple_files(file_name) - || ((descriptor_->containing_type() == NULL) - && !params_.has_java_outer_classname(file_name)); - -#if 0 - GOOGLE_LOG(INFO) << "is_own_file=" << is_own_file; - GOOGLE_LOG(INFO) << "containing_type()=" << ((descriptor_->containing_type() == NULL) ? "NULL" : "not null"); - GOOGLE_LOG(INFO) << "java_multiple_files()=" << params_.java_multiple_files(); - GOOGLE_LOG(INFO) << "has_java_outer_classname()=" << params_.has_java_outer_classname(file_->name()); -#endif + && descriptor_->containing_type() == NULL; if ((descriptor_->extension_count() != 0) || (descriptor_->extension_range_count() != 0)) { @@ -362,25 +354,21 @@ void MessageGenerator::GenerateMergeFromMethods(io::Printer* printer) { void MessageGenerator:: GenerateParseFromMethods(io::Printer* printer) { - bool is_own_file = - descriptor_->containing_type() == NULL; - // Note: These are separate from GenerateMessageSerializationMethods() // because they need to be generated even for messages that are optimized // for code size. printer->Print( - "public $static$ $classname$ parseFrom(byte[] data)\n" + "public static $classname$ parseFrom(byte[] data)\n" " throws com.google.protobuf.micro.InvalidProtocolBufferMicroException {\n" " return ($classname$) (new $classname$().mergeFrom(data));\n" "}\n" "\n" - "public $static$ $classname$ parseFrom(\n" + "public static $classname$ parseFrom(\n" " com.google.protobuf.micro.CodedInputStreamMicro input)\n" " throws java.io.IOException {\n" " return new $classname$().mergeFrom(input);\n" "}\n" "\n", - "static", (is_own_file ? "static" : ""), "classname", descriptor_->name()); } |