| Index: third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc b/third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc
|
| index 5a7bf82df1fd39d5b7192b50e089a595e81922c2..690dad128fc6e48af36e776350c92e08d70cf33c 100644
|
| --- a/third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc
|
| @@ -86,9 +86,6 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
|
| case JAVATYPE_BOOLEAN:
|
| (*variables)["field_list_type"] =
|
| "com.google.protobuf.Internal." + capitalized_type + "List";
|
| - (*variables)["new_list"] = "new" + capitalized_type + "List";
|
| - (*variables)["new_list_with_capacity"] =
|
| - "new" + capitalized_type + "ListWithCapacity";
|
| (*variables)["empty_list"] = "empty" + capitalized_type + "List()";
|
| (*variables)["make_name_unmodifiable"] =
|
| (*variables)["name"] + "_.makeImmutable()";
|
| @@ -98,19 +95,21 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
|
| (*variables)["name"] + "_.add" + capitalized_type;
|
| (*variables)["repeated_set"] =
|
| (*variables)["name"] + "_.set" + capitalized_type;
|
| + (*variables)["visit_type"] = capitalized_type;
|
| + (*variables)["visit_type_list"] = "visit" + capitalized_type + "List";
|
| break;
|
| default:
|
| (*variables)["field_list_type"] =
|
| "com.google.protobuf.Internal.ProtobufList<" +
|
| (*variables)["boxed_type"] + ">";
|
| - (*variables)["new_list"] = "newProtobufList";
|
| - (*variables)["new_list_with_capacity"] = "newProtobufListWithCapacity";
|
| (*variables)["empty_list"] = "emptyProtobufList()";
|
| (*variables)["make_name_unmodifiable"] =
|
| (*variables)["name"] + "_.makeImmutable()";
|
| (*variables)["repeated_get"] = (*variables)["name"] + "_.get";
|
| (*variables)["repeated_add"] = (*variables)["name"] + "_.add";
|
| (*variables)["repeated_set"] = (*variables)["name"] + "_.set";
|
| + (*variables)["visit_type"] = "ByteString";
|
| + (*variables)["visit_type_list"] = "visitList";
|
| }
|
|
|
| if (IsReferenceType(GetJavaType(descriptor))) {
|
| @@ -129,8 +128,6 @@ void SetPrimitiveVariables(const FieldDescriptor* descriptor,
|
| if (fixed_size != -1) {
|
| (*variables)["fixed_size"] = SimpleItoa(fixed_size);
|
| }
|
| - (*variables)["on_changed"] =
|
| - HasDescriptorMethods(descriptor->containing_type()) ? "onChanged();" : "";
|
|
|
| if (SupportFieldPresence(descriptor->file())) {
|
| // For singular messages and builders, one bit is used for the hasField bit.
|
| @@ -299,17 +296,16 @@ GenerateBuilderClearCode(io::Printer* printer) const {
|
| }
|
|
|
| void ImmutablePrimitiveFieldLiteGenerator::
|
| -GenerateMergingCode(io::Printer* printer) const {
|
| +GenerateVisitCode(io::Printer* printer) const {
|
| if (SupportFieldPresence(descriptor_->file())) {
|
| printer->Print(variables_,
|
| - "if (other.has$capitalized_name$()) {\n"
|
| - " set$capitalized_name$(other.get$capitalized_name$());\n"
|
| - "}\n");
|
| + "$name$_ = visitor.visit$visit_type$(\n"
|
| + " has$capitalized_name$(), $name$_,\n"
|
| + " other.has$capitalized_name$(), other.$name$_);\n");
|
| } else {
|
| printer->Print(variables_,
|
| - "if (other.get$capitalized_name$() != $default$) {\n"
|
| - " set$capitalized_name$(other.get$capitalized_name$());\n"
|
| - "}\n");
|
| + "$name$_ = visitor.visit$visit_type$($name$_ != $default$, $name$_,\n"
|
| + " other.$name$_ != $default$, other.$name$_);\n");
|
| }
|
| }
|
|
|
| @@ -541,9 +537,10 @@ GenerateBuildingCode(io::Printer* printer) const {
|
| }
|
|
|
| void ImmutablePrimitiveOneofFieldLiteGenerator::
|
| -GenerateMergingCode(io::Printer* printer) const {
|
| +GenerateVisitCode(io::Printer* printer) const {
|
| printer->Print(variables_,
|
| - "set$capitalized_name$(other.get$capitalized_name$());\n");
|
| + "$oneof_name$_ = visitor.visitOneof$visit_type$(\n"
|
| + " $has_oneof_case_message$, $oneof_name$_, other.$oneof_name$_);\n");
|
| }
|
|
|
| void ImmutablePrimitiveOneofFieldLiteGenerator::
|
| @@ -635,7 +632,7 @@ GenerateMembers(io::Printer* printer) const {
|
| "}\n");
|
|
|
| if (descriptor_->options().packed() &&
|
| - HasGeneratedMethods(descriptor_->containing_type())) {
|
| + context_->HasGeneratedMethods(descriptor_->containing_type())) {
|
| printer->Print(variables_,
|
| "private int $name$MemoizedSerializedSize = -1;\n");
|
| }
|
| @@ -643,7 +640,8 @@ GenerateMembers(io::Printer* printer) const {
|
| printer->Print(variables_,
|
| "private void ensure$capitalized_name$IsMutable() {\n"
|
| " if (!$is_mutable$) {\n"
|
| - " $name$_ = $new_list$($name$_);\n"
|
| + " $name$_ =\n"
|
| + " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n"
|
| " }\n"
|
| "}\n");
|
|
|
| @@ -744,22 +742,9 @@ GenerateBuilderClearCode(io::Printer* printer) const {
|
| }
|
|
|
| void RepeatedImmutablePrimitiveFieldLiteGenerator::
|
| -GenerateMergingCode(io::Printer* printer) const {
|
| - // The code below does two optimizations:
|
| - // 1. If the other list is empty, there's nothing to do. This ensures we
|
| - // don't allocate a new array if we already have an immutable one.
|
| - // 2. If the other list is non-empty and our current list is empty, we can
|
| - // reuse the other list which is guaranteed to be immutable.
|
| - printer->Print(variables_,
|
| - "if (!other.$name$_.isEmpty()) {\n"
|
| - " if ($name$_.isEmpty()) {\n"
|
| - " $name$_ = other.$name$_;\n"
|
| - " } else {\n"
|
| - " ensure$capitalized_name$IsMutable();\n"
|
| - " $name$_.addAll(other.$name$_);\n"
|
| - " }\n"
|
| - " $on_changed$\n"
|
| - "}\n");
|
| +GenerateVisitCode(io::Printer* printer) const {
|
| + printer->Print(variables_,
|
| + "$name$_= visitor.$visit_type_list$($name$_, other.$name$_);\n");
|
| }
|
|
|
| void RepeatedImmutablePrimitiveFieldLiteGenerator::
|
| @@ -780,7 +765,8 @@ GenerateParsingCode(io::Printer* printer) const {
|
| // TODO(dweis): Scan the input buffer to count and ensure capacity.
|
| printer->Print(variables_,
|
| "if (!$is_mutable$) {\n"
|
| - " $name$_ = $new_list$();\n"
|
| + " $name$_ =\n"
|
| + " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n"
|
| "}\n"
|
| "$repeated_add$(input.read$capitalized_type$());\n");
|
| }
|
| @@ -797,10 +783,13 @@ GenerateParsingCodeFromPacked(io::Printer* printer) const {
|
| // TODO(dweis): Scan the input buffer to count, then initialize
|
| // appropriately.
|
| printer->Print(variables_,
|
| - " $name$_ = $new_list$();\n");
|
| + " $name$_ =\n"
|
| + " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n");
|
| } else {
|
| printer->Print(variables_,
|
| - " $name$_ = $new_list_with_capacity$(length/$fixed_size$);\n");
|
| + " final int currentSize = $name$_.size();\n"
|
| + " $name$_ = $name$_.mutableCopyWithCapacity(\n"
|
| + " currentSize + (length/$fixed_size$));\n");
|
| }
|
|
|
| // TODO(dweis): Scan the input buffer to count and ensure capacity.
|
|
|