Index: third_party/protobuf/src/google/protobuf/compiler/java/java_string_field.cc |
=================================================================== |
--- third_party/protobuf/src/google/protobuf/compiler/java/java_string_field.cc (revision 216642) |
+++ third_party/protobuf/src/google/protobuf/compiler/java/java_string_field.cc (working copy) |
@@ -37,6 +37,7 @@ |
#include <string> |
#include <google/protobuf/compiler/java/java_string_field.h> |
+#include <google/protobuf/compiler/java/java_doc_comment.h> |
#include <google/protobuf/stubs/common.h> |
#include <google/protobuf/compiler/java/java_helpers.h> |
#include <google/protobuf/io/printer.h> |
@@ -85,6 +86,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); |
@@ -96,6 +98,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"] = |
@@ -160,19 +169,29 @@ |
// UnmodifiableLazyStringList. |
void StringFieldGenerator:: |
GenerateInterfaceMembers(io::Printer* printer) const { |
+ 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$java.lang.String get$capitalized_name$();\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$com.google.protobuf.ByteString\n" |
+ " get$capitalized_name$Bytes();\n"); |
} |
void StringFieldGenerator:: |
GenerateMembers(io::Printer* printer) const { |
printer->Print(variables_, |
- "private java.lang.Object $name$_;\n" |
+ "private java.lang.Object $name$_;\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public boolean has$capitalized_name$() {\n" |
" return $get_has_field_bit_message$;\n" |
"}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public java.lang.String get$capitalized_name$() {\n" |
" java.lang.Object ref = $name$_;\n" |
@@ -182,13 +201,16 @@ |
" com.google.protobuf.ByteString bs = \n" |
" (com.google.protobuf.ByteString) ref;\n" |
" java.lang.String s = bs.toStringUtf8();\n" |
- " if (com.google.protobuf.Internal.isValidUtf8(bs)) {\n" |
+ " if (bs.isValidUtf8()) {\n" |
" $name$_ = s;\n" |
" }\n" |
" return s;\n" |
" }\n" |
- "}\n" |
- "private com.google.protobuf.ByteString get$capitalized_name$Bytes() {\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$public com.google.protobuf.ByteString\n" |
+ " get$capitalized_name$Bytes() {\n" |
" java.lang.Object ref = $name$_;\n" |
" if (ref instanceof java.lang.String) {\n" |
" com.google.protobuf.ByteString b = \n" |
@@ -205,11 +227,14 @@ |
void StringFieldGenerator:: |
GenerateBuilderMembers(io::Printer* printer) const { |
printer->Print(variables_, |
- "private java.lang.Object $name$_ $default_init$;\n" |
+ "private java.lang.Object $name$_ $default_init$;\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public boolean has$capitalized_name$() {\n" |
" return $get_has_field_bit_builder$;\n" |
"}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public java.lang.String get$capitalized_name$() {\n" |
" java.lang.Object ref = $name$_;\n" |
@@ -223,7 +248,24 @@ |
" }\n" |
"}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
+ "$deprecation$public com.google.protobuf.ByteString\n" |
+ " get$capitalized_name$Bytes() {\n" |
+ " java.lang.Object ref = $name$_;\n" |
+ " if (ref instanceof String) {\n" |
+ " com.google.protobuf.ByteString b = \n" |
+ " com.google.protobuf.ByteString.copyFromUtf8(\n" |
+ " (java.lang.String) ref);\n" |
+ " $name$_ = b;\n" |
+ " return b;\n" |
+ " } else {\n" |
+ " return (com.google.protobuf.ByteString) ref;\n" |
+ " }\n" |
+ "}\n"); |
+ |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public Builder set$capitalized_name$(\n" |
" java.lang.String value) {\n" |
"$null_check$" |
@@ -231,7 +273,9 @@ |
" $name$_ = value;\n" |
" $on_changed$\n" |
" return this;\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public Builder clear$capitalized_name$() {\n" |
" $clear_has_field_bit_builder$;\n"); |
// The default value is not a simple literal so we want to avoid executing |
@@ -243,11 +287,15 @@ |
" return this;\n" |
"}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
- "void set$capitalized_name$(com.google.protobuf.ByteString value) {\n" |
+ "$deprecation$public Builder set$capitalized_name$Bytes(\n" |
+ " com.google.protobuf.ByteString value) {\n" |
+ "$null_check$" |
" $set_has_field_bit_builder$;\n" |
" $name$_ = value;\n" |
" $on_changed$\n" |
+ " return this;\n" |
"}\n"); |
} |
@@ -270,9 +318,13 @@ |
void StringFieldGenerator:: |
GenerateMergingCode(io::Printer* printer) const { |
+ // Allow a slight breach of abstraction here in order to avoid forcing |
+ // all string fields to Strings when copying fields from a Message. |
printer->Print(variables_, |
"if (other.has$capitalized_name$()) {\n" |
- " set$capitalized_name$(other.get$capitalized_name$());\n" |
+ " $set_has_field_bit_builder$;\n" |
+ " $name$_ = other.$name$_;\n" |
+ " $on_changed$\n" |
"}\n"); |
} |
@@ -288,11 +340,16 @@ |
void StringFieldGenerator:: |
GenerateParsingCode(io::Printer* printer) const { |
printer->Print(variables_, |
- "$set_has_field_bit_builder$;\n" |
+ "$set_has_field_bit_message$;\n" |
"$name$_ = input.readBytes();\n"); |
} |
void StringFieldGenerator:: |
+GenerateParsingDoneCode(io::Printer* printer) const { |
+ // noop for strings. |
+} |
+ |
+void StringFieldGenerator:: |
GenerateSerializationCode(io::Printer* printer) const { |
printer->Print(variables_, |
"if ($get_has_field_bit_message$) {\n" |
@@ -353,28 +410,49 @@ |
void RepeatedStringFieldGenerator:: |
GenerateInterfaceMembers(io::Printer* printer) const { |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$java.util.List<java.lang.String>\n" |
- " get$capitalized_name$List();\n" |
- "$deprecation$int get$capitalized_name$Count();\n" |
+ "get$capitalized_name$List();\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$int get$capitalized_name$Count();\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$java.lang.String get$capitalized_name$(int index);\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$com.google.protobuf.ByteString\n" |
+ " get$capitalized_name$Bytes(int index);\n"); |
} |
void RepeatedStringFieldGenerator:: |
GenerateMembers(io::Printer* printer) const { |
printer->Print(variables_, |
- "private com.google.protobuf.LazyStringList $name$_;\n" |
+ "private com.google.protobuf.LazyStringList $name$_;\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public java.util.List<java.lang.String>\n" |
" get$capitalized_name$List() {\n" |
" return $name$_;\n" // note: unmodifiable list |
- "}\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 java.lang.String get$capitalized_name$(int index) {\n" |
" return $name$_.get(index);\n" |
"}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$public com.google.protobuf.ByteString\n" |
+ " get$capitalized_name$Bytes(int index) {\n" |
+ " return $name$_.getByteString(index);\n" |
+ "}\n"); |
if (descriptor_->options().packed() && |
HasGeneratedMethods(descriptor_->containing_type())) { |
@@ -409,17 +487,30 @@ |
// could hold on to the returned list and modify it after the message |
// has been built, thus mutating the message which is supposed to be |
// immutable. |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public java.util.List<java.lang.String>\n" |
" get$capitalized_name$List() {\n" |
" return java.util.Collections.unmodifiableList($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 java.lang.String get$capitalized_name$(int index) {\n" |
" return $name$_.get(index);\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
+ "$deprecation$public com.google.protobuf.ByteString\n" |
+ " get$capitalized_name$Bytes(int index) {\n" |
+ " return $name$_.getByteString(index);\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public Builder set$capitalized_name$(\n" |
" int index, java.lang.String value) {\n" |
"$null_check$" |
@@ -427,7 +518,9 @@ |
" $name$_.set(index, value);\n" |
" $on_changed$\n" |
" return this;\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public Builder add$capitalized_name$(\n" |
" java.lang.String value) {\n" |
"$null_check$" |
@@ -435,14 +528,18 @@ |
" $name$_.add(value);\n" |
" $on_changed$\n" |
" return this;\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public Builder addAll$capitalized_name$(\n" |
" java.lang.Iterable<java.lang.String> values) {\n" |
" ensure$capitalized_name$IsMutable();\n" |
" super.addAll(values, $name$_);\n" |
" $on_changed$\n" |
" return this;\n" |
- "}\n" |
+ "}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
+ printer->Print(variables_, |
"$deprecation$public Builder clear$capitalized_name$() {\n" |
" $name$_ = $empty_list$;\n" |
" $clear_mutable_bit_builder$;\n" |
@@ -450,11 +547,15 @@ |
" return this;\n" |
"}\n"); |
+ WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
- "void add$capitalized_name$(com.google.protobuf.ByteString value) {\n" |
+ "$deprecation$public Builder add$capitalized_name$Bytes(\n" |
+ " com.google.protobuf.ByteString value) {\n" |
+ "$null_check$" |
" ensure$capitalized_name$IsMutable();\n" |
" $name$_.add(value);\n" |
" $on_changed$\n" |
+ " return this;\n" |
"}\n"); |
} |
@@ -512,7 +613,10 @@ |
void RepeatedStringFieldGenerator:: |
GenerateParsingCode(io::Printer* printer) const { |
printer->Print(variables_, |
- "ensure$capitalized_name$IsMutable();\n" |
+ "if (!$get_mutable_bit_parser$) {\n" |
+ " $name$_ = new com.google.protobuf.LazyStringArrayList();\n" |
+ " $set_mutable_bit_parser$;\n" |
+ "}\n" |
"$name$_.add(input.readBytes());\n"); |
} |
@@ -521,13 +625,25 @@ |
printer->Print(variables_, |
"int length = input.readRawVarint32();\n" |
"int limit = input.pushLimit(length);\n" |
+ "if (!$get_mutable_bit_parser$ && input.getBytesUntilLimit() > 0) {\n" |
+ " $name$_ = new com.google.protobuf.LazyStringArrayList();\n" |
+ " $set_mutable_bit_parser$;\n" |
+ "}\n" |
"while (input.getBytesUntilLimit() > 0) {\n" |
- " add$capitalized_name$(input.read$capitalized_type$());\n" |
+ " $name$.add(input.read$capitalized_type$());\n" |
"}\n" |
"input.popLimit(limit);\n"); |
} |
void RepeatedStringFieldGenerator:: |
+GenerateParsingDoneCode(io::Printer* printer) const { |
+ printer->Print(variables_, |
+ "if ($get_mutable_bit_parser$) {\n" |
+ " $name$_ = new com.google.protobuf.UnmodifiableLazyStringList($name$_);\n" |
+ "}\n"); |
+} |
+ |
+void RepeatedStringFieldGenerator:: |
GenerateSerializationCode(io::Printer* printer) const { |
if (descriptor_->options().packed()) { |
printer->Print(variables_, |