| Index: third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.cc b/third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.cc
|
| index b3e9e986c47829f11768c5603c5eef35c65417a7..f5643abc6ace896caa07836ef4c647200e9bce5e 100644
|
| --- a/third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/compiler/java/java_message_builder.cc
|
| @@ -94,20 +94,22 @@ Generate(io::Printer* printer) {
|
| if (descriptor_->extension_range_count() > 0) {
|
| printer->Print(
|
| "public static final class Builder extends\n"
|
| - " com.google.protobuf.GeneratedMessage.ExtendableBuilder<\n"
|
| + " com.google.protobuf.GeneratedMessage$ver$.ExtendableBuilder<\n"
|
| " $classname$, Builder> implements\n"
|
| " $extra_interfaces$\n"
|
| " $classname$OrBuilder {\n",
|
| "classname", name_resolver_->GetImmutableClassName(descriptor_),
|
| - "extra_interfaces", ExtraBuilderInterfaces(descriptor_));
|
| + "extra_interfaces", ExtraBuilderInterfaces(descriptor_),
|
| + "ver", GeneratedCodeVersionSuffix());
|
| } else {
|
| printer->Print(
|
| "public static final class Builder extends\n"
|
| - " com.google.protobuf.GeneratedMessage.Builder<Builder> implements\n"
|
| + " com.google.protobuf.GeneratedMessage$ver$.Builder<Builder> implements\n"
|
| " $extra_interfaces$\n"
|
| " $classname$OrBuilder {\n",
|
| "classname", name_resolver_->GetImmutableClassName(descriptor_),
|
| - "extra_interfaces", ExtraBuilderInterfaces(descriptor_));
|
| + "extra_interfaces", ExtraBuilderInterfaces(descriptor_),
|
| + "ver", GeneratedCodeVersionSuffix());
|
| }
|
| printer->Indent();
|
|
|
| @@ -120,7 +122,7 @@ Generate(io::Printer* printer) {
|
| }
|
|
|
| // oneof
|
| - map<string, string> vars;
|
| + std::map<string, string> vars;
|
| for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
|
| vars["oneof_name"] = context_->GetOneofGeneratorInfo(
|
| descriptor_->oneof_decl(i))->name;
|
| @@ -181,6 +183,23 @@ Generate(io::Printer* printer) {
|
| " return this;\n"
|
| "}\n"
|
| "\n");
|
| + } else {
|
| + // Override methods declared in GeneratedMessage to return the concrete
|
| + // generated type so callsites won't depend on GeneratedMessage. This
|
| + // is needed to keep binary compatibility when we change generated code
|
| + // to subclass a different GeneratedMessage class (e.g., in v3.0.0 release
|
| + // we changed all generated code to subclass GeneratedMessageV3).
|
| + printer->Print(
|
| + "public final Builder setUnknownFields(\n"
|
| + " final com.google.protobuf.UnknownFieldSet unknownFields) {\n"
|
| + " return super.setUnknownFields(unknownFields);\n"
|
| + "}\n"
|
| + "\n"
|
| + "public final Builder mergeUnknownFields(\n"
|
| + " final com.google.protobuf.UnknownFieldSet unknownFields) {\n"
|
| + " return super.mergeUnknownFields(unknownFields);\n"
|
| + "}\n"
|
| + "\n");
|
| }
|
|
|
| printer->Print(
|
| @@ -206,7 +225,7 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
| "fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
|
| "identifier", UniqueFileScopeIdentifier(descriptor_));
|
| }
|
| - vector<const FieldDescriptor*> map_fields;
|
| + std::vector<const FieldDescriptor*> map_fields;
|
| for (int i = 0; i < descriptor_->field_count(); i++) {
|
| const FieldDescriptor* field = descriptor_->field(i);
|
| if (GetJavaType(field) == JAVATYPE_MESSAGE &&
|
| @@ -268,7 +287,7 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
| "}\n");
|
| }
|
| printer->Print(
|
| - "protected com.google.protobuf.GeneratedMessage.FieldAccessorTable\n"
|
| + "protected com.google.protobuf.GeneratedMessage$ver$.FieldAccessorTable\n"
|
| " internalGetFieldAccessorTable() {\n"
|
| " return $fileclass$.internal_$identifier$_fieldAccessorTable\n"
|
| " .ensureFieldAccessorsInitialized(\n"
|
| @@ -277,7 +296,8 @@ GenerateDescriptorMethods(io::Printer* printer) {
|
| "\n",
|
| "classname", name_resolver_->GetImmutableClassName(descriptor_),
|
| "fileclass", name_resolver_->GetImmutableClassName(descriptor_->file()),
|
| - "identifier", UniqueFileScopeIdentifier(descriptor_));
|
| + "identifier", UniqueFileScopeIdentifier(descriptor_),
|
| + "ver", GeneratedCodeVersionSuffix());
|
| }
|
|
|
| // ===================================================================
|
| @@ -294,15 +314,18 @@ GenerateCommonBuilderMethods(io::Printer* printer) {
|
|
|
| printer->Print(
|
| "private Builder(\n"
|
| - " com.google.protobuf.GeneratedMessage.BuilderParent parent) {\n"
|
| + " com.google.protobuf.GeneratedMessage$ver$.BuilderParent parent) {\n"
|
| " super(parent);\n"
|
| " maybeForceBuilderInitialization();\n"
|
| "}\n",
|
| - "classname", name_resolver_->GetImmutableClassName(descriptor_));
|
| + "classname", name_resolver_->GetImmutableClassName(descriptor_),
|
| + "ver", GeneratedCodeVersionSuffix());
|
|
|
| printer->Print(
|
| "private void maybeForceBuilderInitialization() {\n"
|
| - " if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {\n");
|
| + " if (com.google.protobuf.GeneratedMessage$ver$\n"
|
| + " .alwaysUseFieldBuilders) {\n",
|
| + "ver", GeneratedCodeVersionSuffix());
|
|
|
| printer->Indent();
|
| printer->Indent();
|
| @@ -438,6 +461,67 @@ GenerateCommonBuilderMethods(io::Printer* printer) {
|
| "\n",
|
| "classname", name_resolver_->GetImmutableClassName(descriptor_));
|
|
|
| + // Override methods declared in GeneratedMessage to return the concrete
|
| + // generated type so callsites won't depend on GeneratedMessage. This
|
| + // is needed to keep binary compatibility when we change generated code
|
| + // to subclass a different GeneratedMessage class (e.g., in v3.0.0 release
|
| + // we changed all generated code to subclass GeneratedMessageV3).
|
| + printer->Print(
|
| + "public Builder clone() {\n"
|
| + " return (Builder) super.clone();\n"
|
| + "}\n"
|
| + "public Builder setField(\n"
|
| + " com.google.protobuf.Descriptors.FieldDescriptor field,\n"
|
| + " Object value) {\n"
|
| + " return (Builder) super.setField(field, value);\n"
|
| + "}\n"
|
| + "public Builder clearField(\n"
|
| + " com.google.protobuf.Descriptors.FieldDescriptor field) {\n"
|
| + " return (Builder) super.clearField(field);\n"
|
| + "}\n"
|
| + "public Builder clearOneof(\n"
|
| + " com.google.protobuf.Descriptors.OneofDescriptor oneof) {\n"
|
| + " return (Builder) super.clearOneof(oneof);\n"
|
| + "}\n"
|
| + "public Builder setRepeatedField(\n"
|
| + " com.google.protobuf.Descriptors.FieldDescriptor field,\n"
|
| + " int index, Object value) {\n"
|
| + " return (Builder) super.setRepeatedField(field, index, value);\n"
|
| + "}\n"
|
| + "public Builder addRepeatedField(\n"
|
| + " com.google.protobuf.Descriptors.FieldDescriptor field,\n"
|
| + " Object value) {\n"
|
| + " return (Builder) super.addRepeatedField(field, value);\n"
|
| + "}\n");
|
| +
|
| + if (descriptor_->extension_range_count() > 0) {
|
| + printer->Print(
|
| + "public <Type> Builder setExtension(\n"
|
| + " com.google.protobuf.GeneratedMessage.GeneratedExtension<\n"
|
| + " $classname$, Type> extension,\n"
|
| + " Type value) {\n"
|
| + " return (Builder) super.setExtension(extension, value);\n"
|
| + "}\n"
|
| + "public <Type> Builder setExtension(\n"
|
| + " com.google.protobuf.GeneratedMessage.GeneratedExtension<\n"
|
| + " $classname$, java.util.List<Type>> extension,\n"
|
| + " int index, Type value) {\n"
|
| + " return (Builder) super.setExtension(extension, index, value);\n"
|
| + "}\n"
|
| + "public <Type> Builder addExtension(\n"
|
| + " com.google.protobuf.GeneratedMessage.GeneratedExtension<\n"
|
| + " $classname$, java.util.List<Type>> extension,\n"
|
| + " Type value) {\n"
|
| + " return (Builder) super.addExtension(extension, value);\n"
|
| + "}\n"
|
| + "public <Type> Builder clearExtension(\n"
|
| + " com.google.protobuf.GeneratedMessage.GeneratedExtension<\n"
|
| + " $classname$, ?> extension) {\n"
|
| + " return (Builder) super.clearExtension(extension);\n"
|
| + "}\n",
|
| + "classname", name_resolver_->GetImmutableClassName(descriptor_));
|
| + }
|
| +
|
| // -----------------------------------------------------------------
|
|
|
| if (context_->HasGeneratedMethods(descriptor_)) {
|
| @@ -615,7 +699,7 @@ void MessageBuilderGenerator::GenerateIsInitialized(
|
| case FieldDescriptor::LABEL_REPEATED:
|
| if (IsMapEntry(field->message_type())) {
|
| printer->Print(
|
| - "for ($type$ item : get$name$().values()) {\n"
|
| + "for ($type$ item : get$name$Map().values()) {\n"
|
| " if (!item.isInitialized()) {\n"
|
| " return false;\n"
|
| " }\n"
|
|
|