Index: third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc |
diff --git a/third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc b/third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc |
index e3e87c58f45ce165859c0beacf04b79aa21fc952..908d6db413144a22e7cd09a833bce5a07a14ef30 100644 |
--- a/third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc |
+++ b/third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc |
@@ -75,8 +75,6 @@ void SetEnumVariables(const FieldDescriptor* descriptor, |
// by the proto compiler |
(*variables)["deprecation"] = descriptor->options().deprecated() |
? "@java.lang.Deprecated " : ""; |
- (*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. |
@@ -179,7 +177,7 @@ GenerateMembers(io::Printer* printer) const { |
WriteFieldDocComment(printer, descriptor_); |
printer->Print(variables_, |
"$deprecation$public $type$ get$capitalized_name$() {\n" |
- " $type$ result = $type$.valueOf($name$_);\n" |
+ " $type$ result = $type$.forNumber($name$_);\n" |
" return result == null ? $unknown$ : result;\n" |
"}\n"); |
@@ -228,7 +226,7 @@ GenerateBuilderMembers(io::Printer* printer) const { |
printer->Print(variables_, |
"$deprecation$public Builder set$capitalized_name$Value(int value) {\n" |
" copyOnWrite();\n" |
- " instance.set$capitalized_name$Value(int value);\n" |
+ " instance.set$capitalized_name$Value(value);\n" |
" return this;\n" |
"}\n"); |
} |
@@ -264,17 +262,15 @@ GenerateInitializationCode(io::Printer* printer) const { |
} |
void ImmutableEnumFieldLiteGenerator:: |
-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.visitInt(has$capitalized_name$(), $name$_,\n" |
+ " other.has$capitalized_name$(), other.$name$_);\n"); |
} else if (SupportUnknownEnumValue(descriptor_->file())) { |
printer->Print(variables_, |
- "if (other.$name$_ != $default_number$) {\n" |
- " set$capitalized_name$Value(other.get$capitalized_name$Value());\n" |
- "}\n"); |
+ "$name$_ = visitor.visitInt($name$_ != $default_number$, $name$_," |
+ " other.$name$_ != $default_number$, other.$name$_);\n"); |
} else { |
GOOGLE_LOG(FATAL) << "Can't reach here."; |
} |
@@ -295,7 +291,7 @@ GenerateParsingCode(io::Printer* printer) const { |
} else { |
printer->Print(variables_, |
"int rawValue = input.readEnum();\n" |
- "$type$ value = $type$.valueOf(rawValue);\n" |
+ "$type$ value = $type$.forNumber(rawValue);\n" |
"if (value == null) {\n"); |
if (PreserveUnknownFields(descriptor_->containing_type())) { |
printer->Print(variables_, |
@@ -389,7 +385,7 @@ GenerateMembers(io::Printer* printer) const { |
printer->Print(variables_, |
"$deprecation$public $type$ get$capitalized_name$() {\n" |
" if ($has_oneof_case_message$) {\n" |
- " $type$ result = $type$.valueOf((java.lang.Integer) $oneof_name$_);\n" |
+ " $type$ result = $type$.forNumber((java.lang.Integer) $oneof_name$_);\n" |
" return result == null ? $unknown$ : result;\n" |
" }\n" |
" return $default$;\n" |
@@ -468,14 +464,10 @@ GenerateBuilderMembers(io::Printer* printer) const { |
} |
void ImmutableEnumOneofFieldLiteGenerator:: |
-GenerateMergingCode(io::Printer* printer) const { |
- if (SupportUnknownEnumValue(descriptor_->file())) { |
- printer->Print(variables_, |
- "set$capitalized_name$Value(other.get$capitalized_name$Value());\n"); |
- } else { |
- printer->Print(variables_, |
- "set$capitalized_name$(other.get$capitalized_name$());\n"); |
- } |
+GenerateVisitCode(io::Printer* printer) const { |
+ printer->Print(variables_, |
+ "$oneof_name$_ = visitor.visitOneofInt(\n" |
+ " $has_oneof_case_message$, $oneof_name$_, other.$oneof_name$_);\n"); |
} |
void ImmutableEnumOneofFieldLiteGenerator:: |
@@ -488,7 +480,7 @@ GenerateParsingCode(io::Printer* printer) const { |
} else { |
printer->Print(variables_, |
"int rawValue = input.readEnum();\n" |
- "$type$ value = $type$.valueOf(rawValue);\n" |
+ "$type$ value = $type$.forNumber(rawValue);\n" |
"if (value == null) {\n"); |
if (PreserveUnknownFields(descriptor_->containing_type())) { |
printer->Print(variables_, |
@@ -602,7 +594,7 @@ GenerateMembers(io::Printer* printer) const { |
" new com.google.protobuf.Internal.ListAdapter.Converter<\n" |
" java.lang.Integer, $type$>() {\n" |
" public $type$ convert(java.lang.Integer from) {\n" |
- " $type$ result = $type$.valueOf(from);\n" |
+ " $type$ result = $type$.forNumber(from);\n" |
" return result == null ? $unknown$ : result;\n" |
" }\n" |
" };\n"); |
@@ -638,7 +630,7 @@ GenerateMembers(io::Printer* printer) const { |
} |
if (descriptor_->options().packed() && |
- HasGeneratedMethods(descriptor_->containing_type())) { |
+ context_->HasGeneratedMethods(descriptor_->containing_type())) { |
printer->Print(variables_, |
"private int $name$MemoizedSerializedSize;\n"); |
} |
@@ -647,7 +639,8 @@ GenerateMembers(io::Printer* printer) const { |
printer->Print(variables_, |
"private void ensure$capitalized_name$IsMutable() {\n" |
" if (!$is_mutable$) {\n" |
- " $name$_ = newIntList($name$_);\n" |
+ " $name$_ =\n" |
+ " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n" |
" }\n" |
"}\n"); |
WriteFieldDocComment(printer, descriptor_); |
@@ -807,22 +800,9 @@ GenerateInitializationCode(io::Printer* printer) const { |
} |
void RepeatedImmutableEnumFieldLiteGenerator:: |
-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.visitIntList($name$_, other.$name$_);\n"); |
} |
void RepeatedImmutableEnumFieldLiteGenerator:: |
@@ -834,27 +814,23 @@ GenerateDynamicMethodMakeImmutableCode(io::Printer* printer) const { |
void RepeatedImmutableEnumFieldLiteGenerator:: |
GenerateParsingCode(io::Printer* printer) const { |
// Read and store the enum |
+ printer->Print(variables_, |
+ "if (!$is_mutable$) {\n" |
+ " $name$_ =\n" |
+ " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n" |
+ "}\n"); |
+ |
if (SupportUnknownEnumValue(descriptor_->file())) { |
printer->Print(variables_, |
- "int rawValue = input.readEnum();\n" |
- "if (!$is_mutable$) {\n" |
- " $name$_ = newIntList();\n" |
- "}\n" |
- "$name$_.addInt(rawValue);\n"); |
+ "$name$_.addInt(input.readEnum());\n"); |
} else { |
printer->Print(variables_, |
"int rawValue = input.readEnum();\n" |
- "$type$ value = $type$.valueOf(rawValue);\n" |
- "if (value == null) {\n"); |
- if (PreserveUnknownFields(descriptor_->containing_type())) { |
- printer->Print(variables_, |
- " super.mergeVarintField($number$, rawValue);\n"); |
- } |
- printer->Print(variables_, |
+ "$type$ value = $type$.forNumber(rawValue);\n" |
+ "if (value == null) {\n" |
+ // We store the unknown value in unknown fields. |
+ " super.mergeVarintField($number$, rawValue);\n" |
"} else {\n" |
- " if (!$is_mutable$) {\n" |
- " $name$_ = newIntList();\n" |
- " }\n" |
" $name$_.addInt(rawValue);\n" |
"}\n"); |
} |
@@ -862,7 +838,11 @@ GenerateParsingCode(io::Printer* printer) const { |
void RepeatedImmutableEnumFieldLiteGenerator:: |
GenerateParsingCodeFromPacked(io::Printer* printer) const { |
- // Wrap GenerateParsingCode's contents with a while loop. |
+ printer->Print(variables_, |
+ "if (!$is_mutable$) {\n" |
+ " $name$_ =\n" |
+ " com.google.protobuf.GeneratedMessageLite.mutableCopy($name$_);\n" |
+ "}\n"); |
printer->Print(variables_, |
"int length = input.readRawVarint32();\n" |
@@ -870,7 +850,21 @@ GenerateParsingCodeFromPacked(io::Printer* printer) const { |
"while(input.getBytesUntilLimit() > 0) {\n"); |
printer->Indent(); |
- GenerateParsingCode(printer); |
+ // Read and store the enum |
+ if (SupportUnknownEnumValue(descriptor_->file())) { |
+ printer->Print(variables_, |
+ "$name$_.addInt(input.readEnum());\n"); |
+ } else { |
+ printer->Print(variables_, |
+ "int rawValue = input.readEnum();\n" |
+ "$type$ value = $type$.forNumber(rawValue);\n" |
+ "if (value == null) {\n" |
+ // We store the unknown value in unknown fields. |
+ " super.mergeVarintField($number$, rawValue);\n" |
+ "} else {\n" |
+ " $name$_.addInt(rawValue);\n" |
+ "}\n"); |
+ } |
printer->Outdent(); |
printer->Print(variables_, |