diff options
author | Tom Chao <chaot@google.com> | 2013-11-11 11:22:02 -0800 |
---|---|---|
committer | Tom Chao <chaot@google.com> | 2013-11-11 11:22:02 -0800 |
commit | 7e02f374901ff471db5140f415de157ac6243050 (patch) | |
tree | b18fa1ea98e2f496d977b4712929a40528652d3f /src | |
parent | 8a15121c1077fe883f428bd27dee6b99e06e48b6 (diff) | |
download | external_protobuf-7e02f374901ff471db5140f415de157ac6243050.zip external_protobuf-7e02f374901ff471db5140f415de157ac6243050.tar.gz external_protobuf-7e02f374901ff471db5140f415de157ac6243050.tar.bz2 |
Minimize method count for nanoproto.
- Migrates getCachedSize to the MessageNano parent class to save one method per message.
- Create ExtendableMessageNano parent class for protos with extensions, this saves the
getExtension and setExtension methods on the relevant messages.
- getSerializedSize's default case (with no fields to serialize) also migrate to the
parent class, which saves methods on empty messages.
- Container classes become interfaces to save the constructor.
Change-Id: I81f1a1b6d6a660096835e9df3ea20456655aab4a
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/compiler/javanano/javanano_file.cc | 4 | ||||
-rw-r--r-- | src/google/protobuf/compiler/javanano/javanano_message.cc | 85 |
2 files changed, 28 insertions, 61 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_file.cc b/src/google/protobuf/compiler/javanano/javanano_file.cc index 4e9fe0a..bdc51c4 100644 --- a/src/google/protobuf/compiler/javanano/javanano_file.cc +++ b/src/google/protobuf/compiler/javanano/javanano_file.cc @@ -177,9 +177,7 @@ void FileGenerator::Generate(io::Printer* printer) { printer->Print( "\n" "@SuppressWarnings(\"hiding\")\n" - "public final class $classname$ {\n" - " \n" - " private $classname$() {}\n", + "public interface $classname$ {\n", "classname", classname_); printer->Indent(); diff --git a/src/google/protobuf/compiler/javanano/javanano_message.cc b/src/google/protobuf/compiler/javanano/javanano_message.cc index 63f8955..901870f 100644 --- a/src/google/protobuf/compiler/javanano/javanano_message.cc +++ b/src/google/protobuf/compiler/javanano/javanano_message.cc @@ -139,16 +139,21 @@ void MessageGenerator::Generate(io::Printer* printer) { printer->Print( "\n" "@SuppressWarnings(\"hiding\")\n" - "public final class $classname$ extends\n" - " com.google.protobuf.nano.MessageNano {\n", + "public final class $classname$ extends\n", "classname", descriptor_->name()); } else { printer->Print( "\n" - "public static final class $classname$ extends\n" - " com.google.protobuf.nano.MessageNano {\n", + "public static final class $classname$ extends\n", "classname", descriptor_->name()); } + if (params_.store_unknown_fields()) { + printer->Print( + " com.google.protobuf.nano.ExtendableMessageNano {\n"); + } else { + printer->Print( + " com.google.protobuf.nano.MessageNano {\n"); + } printer->Indent(); printer->Print( "\n" @@ -159,13 +164,6 @@ void MessageGenerator::Generate(io::Printer* printer) { "}\n", "classname", descriptor_->name()); - if (params_.store_unknown_fields()) { - printer->Print( - "\n" - "private java.util.List<com.google.protobuf.nano.UnknownFieldData>\n" - " unknownFieldData;\n"); - } - // Nested types and extensions for (int i = 0; i < descriptor_->extension_count(); i++) { ExtensionGenerator(descriptor_->extension(i), params_).Generate(printer); @@ -203,25 +201,6 @@ void MessageGenerator::Generate(io::Printer* printer) { GenerateHashCode(printer); } - // If we have an extension range, generate accessors for extensions. - if (params_.store_unknown_fields() - && descriptor_->extension_range_count() > 0) { - printer->Print( - "\n" - "public <T> T getExtension(com.google.protobuf.nano.Extension<T> extension) {\n" - " return com.google.protobuf.nano.WireFormatNano.getExtension(\n" - " extension, unknownFieldData);\n" - "}\n" - "\n" - "public <T> void setExtension(com.google.protobuf.nano.Extension<T> extension, T value) {\n" - " if (unknownFieldData == null) {\n" - " unknownFieldData =\n" - " new java.util.ArrayList<com.google.protobuf.nano.UnknownFieldData>();\n" - " }\n" - " com.google.protobuf.nano.WireFormatNano.setExtension(\n" - " extension, value, unknownFieldData);\n" - "}\n"); - } GenerateMessageSerializationMethods(printer); GenerateMergeFromMethods(printer); GenerateParseFromMethods(printer); @@ -265,38 +244,28 @@ GenerateMessageSerializationMethods(io::Printer* printer) { } printer->Outdent(); - printer->Print( - "}\n" - "\n" - "private int cachedSize;\n" - "@Override\n" - "public int getCachedSize() {\n" - " if (cachedSize < 0) {\n" - " // getSerializedSize sets cachedSize\n" - " getSerializedSize();\n" - " }\n" - " return cachedSize;\n" - "}\n" - "\n" - "@Override\n" - "public int getSerializedSize() {\n" - " int size = 0;\n"); - printer->Indent(); + printer->Print("}\n"); - for (int i = 0; i < descriptor_->field_count(); i++) { - field_generators_.get(sorted_fields[i]).GenerateSerializedSizeCode(printer); - } + // Rely on the parent implementation of getSerializedSize if there are no fields to + // serialize in this MessageNano. + if (descriptor_->field_count() != 0) { + printer->Print( + "\n" + "@Override\n" + "public int getSerializedSize() {\n" + " int size = super.getSerializedSize();\n"); + printer->Indent(); - if (params_.store_unknown_fields()) { + for (int i = 0; i < descriptor_->field_count(); i++) { + field_generators_.get(sorted_fields[i]).GenerateSerializedSizeCode(printer); + } + + printer->Outdent(); printer->Print( - "size += com.google.protobuf.nano.WireFormatNano.computeWireSize(unknownFieldData);\n"); + " cachedSize = size;\n" + " return size;\n" + "}\n"); } - - printer->Outdent(); - printer->Print( - " cachedSize = size;\n" - " return size;\n" - "}\n"); } void MessageGenerator::GenerateMergeFromMethods(io::Printer* printer) { |