| 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_,
|
|
|