Index: third_party/protobuf/src/google/protobuf/compiler/java/java_message_field.cc |
=================================================================== |
--- third_party/protobuf/src/google/protobuf/compiler/java/java_message_field.cc (revision 216642) |
+++ third_party/protobuf/src/google/protobuf/compiler/java/java_message_field.cc (working copy) |
@@ -36,6 +36,7 @@ |
#include <string> |
#include <google/protobuf/compiler/java/java_message_field.h> |
+#include <google/protobuf/compiler/java/java_doc_comment.h> |
#include <google/protobuf/compiler/java/java_helpers.h> |
#include <google/protobuf/io/printer.h> |
#include <google/protobuf/wire_format.h> |
@@ -73,6 +74,7 @@ |
// For singular messages and builders, one bit is used for the hasField bit. |
(*variables)["get_has_field_bit_message"] = GenerateGetBit(messageBitIndex); |
+ (*variables)["set_has_field_bit_message"] = GenerateSetBit(messageBitIndex); |
(*variables)["get_has_field_bit_builder"] = GenerateGetBit(builderBitIndex); |
(*variables)["set_has_field_bit_builder"] = GenerateSetBit(builderBitIndex); |
@@ -84,6 +86,13 @@ |
(*variables)["set_mutable_bit_builder"] = GenerateSetBit(builderBitIndex); |
(*variables)["clear_mutable_bit_builder"] = GenerateClearBit(builderBitIndex); |
+ // For repeated fields, one bit is used for whether the array is immutable |
+ // in the parsing constructor. |
+ (*variables)["get_mutable_bit_parser"] = |
+ GenerateGetBitMutableLocal(builderBitIndex); |
+ (*variables)["set_mutable_bit_parser"] = |
+ GenerateSetBitMutableLocal(builderBitIndex); |
+ |
(*variables)["get_has_field_bit_from_local"] = |
GenerateGetBitFromLocal(builderBitIndex); |
(*variables)["set_has_field_bit_to_local"] = |
@@ -120,11 +129,15 @@ |
// interface so that builders can choose dynamically to either return a |
// message or a nested builder, so that asking for the interface doesn't |
// cause a message to ever be built. |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
- "$deprecation$boolean has$capitalized_name$();\n" |
+ "$deprecation$boolean has$capitalized_name$();\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$$type$ get$capitalized_name$();\n"); |
if (HasNestedBuilders(descriptor_->containing_type())) { |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$$type$OrBuilder get$capitalized_name$OrBuilder();\n"); |
} |
@@ -133,15 +146,20 @@ |
void MessageFieldGenerator:: |
GenerateMembers(io::Printer* printer) const { |
printer->Print(variables_, |
- "private $type$ $name$_;\n" |
+ "private $type$ $name$_;\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public boolean has$capitalized_name$() {\n" |
" return $get_has_field_bit_message$;\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$ get$capitalized_name$() {\n" |
" return $name$_;\n" |
"}\n"); |
if (HasNestedBuilders(descriptor_->containing_type())) { |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n" |
" return $name$_;\n" |
@@ -208,12 +226,14 @@ |
// field of type "Field" called "Field". |
// boolean hasField() |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public boolean has$capitalized_name$() {\n" |
" return $get_has_field_bit_builder$;\n" |
"}\n"); |
// Field getField() |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public $type$ get$capitalized_name$()", |
@@ -224,6 +244,7 @@ |
NULL); |
// Field.Builder setField(Field value) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder set$capitalized_name$($type$ value)", |
@@ -239,6 +260,7 @@ |
"return this;\n"); |
// Field.Builder setField(Field.Builder builderForValue) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder set$capitalized_name$(\n" |
" $type$.Builder builderForValue)", |
@@ -252,6 +274,7 @@ |
"return this;\n"); |
// Field.Builder mergeField(Field value) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder merge$capitalized_name$($type$ value)", |
@@ -270,6 +293,7 @@ |
"return this;\n"); |
// Field.Builder clearField() |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder clear$capitalized_name$()", |
@@ -282,19 +306,24 @@ |
"return this;\n"); |
if (HasNestedBuilders(descriptor_->containing_type())) { |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public $type$.Builder get$capitalized_name$Builder() {\n" |
" $set_has_field_bit_builder$;\n" |
" $on_changed$\n" |
" return get$capitalized_name$FieldBuilder().getBuilder();\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder() {\n" |
" if ($name$Builder_ != null) {\n" |
" return $name$Builder_.getMessageOrBuilder();\n" |
" } else {\n" |
" return $name$_;\n" |
" }\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"private com.google.protobuf.SingleFieldBuilder<\n" |
" $type$, $type$.Builder, $type$OrBuilder> \n" |
" get$capitalized_name$FieldBuilder() {\n" |
@@ -357,24 +386,35 @@ |
void MessageFieldGenerator:: |
GenerateParsingCode(io::Printer* printer) const { |
printer->Print(variables_, |
- "$type$.Builder subBuilder = $type$.newBuilder();\n" |
- "if (has$capitalized_name$()) {\n" |
- " subBuilder.mergeFrom(get$capitalized_name$());\n" |
+ "$type$.Builder subBuilder = null;\n" |
+ "if ($get_has_field_bit_message$) {\n" |
+ " subBuilder = $name$_.toBuilder();\n" |
"}\n"); |
if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) { |
printer->Print(variables_, |
- "input.readGroup($number$, subBuilder, extensionRegistry);\n"); |
+ "$name$_ = input.readGroup($number$, $type$.PARSER,\n" |
+ " extensionRegistry);\n"); |
} else { |
printer->Print(variables_, |
- "input.readMessage(subBuilder, extensionRegistry);\n"); |
+ "$name$_ = input.readMessage($type$.PARSER, extensionRegistry);\n"); |
} |
printer->Print(variables_, |
- "set$capitalized_name$(subBuilder.buildPartial());\n"); |
+ "if (subBuilder != null) {\n" |
+ " subBuilder.mergeFrom($name$_);\n" |
+ " $name$_ = subBuilder.buildPartial();\n" |
+ "}\n"); |
+ printer->Print(variables_, |
+ "$set_has_field_bit_message$;\n"); |
} |
void MessageFieldGenerator:: |
+GenerateParsingDoneCode(io::Printer* printer) const { |
+ // noop for messages. |
+} |
+ |
+void MessageFieldGenerator:: |
GenerateSerializationCode(io::Printer* printer) const { |
printer->Print(variables_, |
"if ($get_has_field_bit_message$) {\n" |
@@ -437,15 +477,23 @@ |
// interface so that builders can choose dynamically to either return a |
// message or a nested builder, so that asking for the interface doesn't |
// cause a message to ever be built. |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$java.util.List<$type$> \n" |
- " get$capitalized_name$List();\n" |
- "$deprecation$$type$ get$capitalized_name$(int index);\n" |
+ " get$capitalized_name$List();\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$$type$ get$capitalized_name$(int index);\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$int get$capitalized_name$Count();\n"); |
if (HasNestedBuilders(descriptor_->containing_type())) { |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$java.util.List<? extends $type$OrBuilder> \n" |
- " get$capitalized_name$OrBuilderList();\n" |
+ " get$capitalized_name$OrBuilderList();\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$$type$OrBuilder get$capitalized_name$OrBuilder(\n" |
" int index);\n"); |
} |
@@ -454,20 +502,30 @@ |
void RepeatedMessageFieldGenerator:: |
GenerateMembers(io::Printer* printer) const { |
printer->Print(variables_, |
- "private java.util.List<$type$> $name$_;\n" |
+ "private java.util.List<$type$> $name$_;\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public java.util.List<$type$> get$capitalized_name$List() {\n" |
" return $name$_;\n" // note: unmodifiable list |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public java.util.List<? extends $type$OrBuilder> \n" |
" get$capitalized_name$OrBuilderList() {\n" |
" return $name$_;\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public int get$capitalized_name$Count() {\n" |
" return $name$_.size();\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$ get$capitalized_name$(int index) {\n" |
" return $name$_.get(index);\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n" |
" int index) {\n" |
" return $name$_.get(index);\n" |
@@ -552,6 +610,7 @@ |
// repeated field of type "Field" called "RepeatedField". |
// List<Field> getRepeatedFieldList() |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public java.util.List<$type$> get$capitalized_name$List()", |
@@ -561,6 +620,7 @@ |
NULL); |
// int getRepeatedFieldCount() |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public int get$capitalized_name$Count()", |
@@ -570,6 +630,7 @@ |
NULL); |
// Field getRepeatedField(int index) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public $type$ get$capitalized_name$(int index)", |
@@ -580,6 +641,7 @@ |
NULL); |
// Builder setRepeatedField(int index, Field value) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder set$capitalized_name$(\n" |
" int index, $type$ value)", |
@@ -593,6 +655,7 @@ |
"return this;\n"); |
// Builder setRepeatedField(int index, Field.Builder builderForValue) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder set$capitalized_name$(\n" |
" int index, $type$.Builder builderForValue)", |
@@ -606,6 +669,7 @@ |
"return this;\n"); |
// Builder addRepeatedField(Field value) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder add$capitalized_name$($type$ value)", |
@@ -622,6 +686,7 @@ |
"return this;\n"); |
// Builder addRepeatedField(int index, Field value) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder add$capitalized_name$(\n" |
" int index, $type$ value)", |
@@ -638,6 +703,7 @@ |
"return this;\n"); |
// Builder addRepeatedField(Field.Builder builderForValue) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder add$capitalized_name$(\n" |
" $type$.Builder builderForValue)", |
@@ -651,6 +717,7 @@ |
"return this;\n"); |
// Builder addRepeatedField(int index, Field.Builder builderForValue) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder add$capitalized_name$(\n" |
" int index, $type$.Builder builderForValue)", |
@@ -664,6 +731,7 @@ |
"return this;\n"); |
// Builder addAllRepeatedField(Iterable<Field> values) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder addAll$capitalized_name$(\n" |
" java.lang.Iterable<? extends $type$> values)", |
@@ -677,6 +745,7 @@ |
"return this;\n"); |
// Builder clearAllRepeatedField() |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder clear$capitalized_name$()", |
@@ -689,6 +758,7 @@ |
"return this;\n"); |
// Builder removeRepeatedField(int index) |
+ WriteFieldDocComment(printer, descriptor_); |
PrintNestedBuilderFunction(printer, |
"$deprecation$public Builder remove$capitalized_name$(int index)", |
@@ -701,12 +771,15 @@ |
"return this;\n"); |
if (HasNestedBuilders(descriptor_->containing_type())) { |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public $type$.Builder get$capitalized_name$Builder(\n" |
" int index) {\n" |
" return get$capitalized_name$FieldBuilder().getBuilder(index);\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$OrBuilder get$capitalized_name$OrBuilder(\n" |
" int index) {\n" |
" if ($name$Builder_ == null) {\n" |
@@ -714,8 +787,10 @@ |
" } else {\n" |
" return $name$Builder_.getMessageOrBuilder(index);\n" |
" }\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public java.util.List<? extends $type$OrBuilder> \n" |
" get$capitalized_name$OrBuilderList() {\n" |
" if ($name$Builder_ != null) {\n" |
@@ -723,17 +798,23 @@ |
" } else {\n" |
" return java.util.Collections.unmodifiableList($name$_);\n" |
" }\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$.Builder add$capitalized_name$Builder() {\n" |
" return get$capitalized_name$FieldBuilder().addBuilder(\n" |
" $type$.getDefaultInstance());\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public $type$.Builder add$capitalized_name$Builder(\n" |
" int index) {\n" |
" return get$capitalized_name$FieldBuilder().addBuilder(\n" |
" index, $type$.getDefaultInstance());\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public java.util.List<$type$.Builder> \n" |
" get$capitalized_name$BuilderList() {\n" |
" return get$capitalized_name$FieldBuilder().getBuilderList();\n" |
@@ -827,18 +908,27 @@ |
void RepeatedMessageFieldGenerator:: |
GenerateParsingCode(io::Printer* printer) const { |
printer->Print(variables_, |
- "$type$.Builder subBuilder = $type$.newBuilder();\n"); |
+ "if (!$get_mutable_bit_parser$) {\n" |
+ " $name$_ = new java.util.ArrayList<$type$>();\n" |
+ " $set_mutable_bit_parser$;\n" |
+ "}\n"); |
if (GetType(descriptor_) == FieldDescriptor::TYPE_GROUP) { |
printer->Print(variables_, |
- "input.readGroup($number$, subBuilder, extensionRegistry);\n"); |
+ "$name$_.add(input.readGroup($number$, $type$.PARSER,\n" |
+ " extensionRegistry));\n"); |
} else { |
printer->Print(variables_, |
- "input.readMessage(subBuilder, extensionRegistry);\n"); |
+ "$name$_.add(input.readMessage($type$.PARSER, extensionRegistry));\n"); |
} |
+} |
+void RepeatedMessageFieldGenerator:: |
+GenerateParsingDoneCode(io::Printer* printer) const { |
printer->Print(variables_, |
- "add$capitalized_name$(subBuilder.buildPartial());\n"); |
+ "if ($get_mutable_bit_parser$) {\n" |
+ " $name$_ = java.util.Collections.unmodifiableList($name$_);\n" |
+ "}\n"); |
} |
void RepeatedMessageFieldGenerator:: |