From 67ac9eb4e93552033b57b7b817da962ba529d9db Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 20 Jan 2023 12:32:47 -0800 Subject: [PATCH 1/7] Migrate away from examining the syntax of a proto file via reflection. PiperOrigin-RevId: 503500019 --- src/google/protobuf/compiler/java/enum.cc | 8 ++--- .../protobuf/compiler/java/enum_field.cc | 34 +++++++++---------- .../protobuf/compiler/java/enum_field_lite.cc | 28 +++++++-------- .../protobuf/compiler/java/enum_lite.cc | 6 ++-- src/google/protobuf/compiler/java/helpers.cc | 9 +++-- src/google/protobuf/compiler/java/helpers.h | 16 +++++---- .../protobuf/compiler/java/map_field.cc | 12 +++---- .../protobuf/compiler/java/map_field_lite.cc | 14 ++++---- 8 files changed, 65 insertions(+), 62 deletions(-) diff --git a/src/google/protobuf/compiler/java/enum.cc b/src/google/protobuf/compiler/java/enum.cc index 84c99e6779..341361f8f0 100644 --- a/src/google/protobuf/compiler/java/enum.cc +++ b/src/google/protobuf/compiler/java/enum.cc @@ -119,7 +119,7 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Annotate("name", canonical_values_[i]); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { if (ordinal_is_index) { printer->Print("${$UNRECOGNIZED$}$(-1),\n", "{", "", "}", ""); } else { @@ -167,7 +167,7 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Print( "\n" "public final int getNumber() {\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { if (ordinal_is_index) { printer->Print( " if (this == UNRECOGNIZED) {\n" @@ -251,7 +251,7 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Print( "public final com.google.protobuf.Descriptors.EnumValueDescriptor\n" " getValueDescriptor() {\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { if (ordinal_is_index) { printer->Print( " if (this == UNRECOGNIZED) {\n" @@ -346,7 +346,7 @@ void EnumGenerator::Generate(io::Printer* printer) { " \"EnumValueDescriptor is not for this type.\");\n" " }\n", "classname", descriptor_->name()); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( " if (desc.getIndex() == -1) {\n" " return UNRECOGNIZED;\n" diff --git a/src/google/protobuf/compiler/java/enum_field.cc b/src/google/protobuf/compiler/java/enum_field.cc index 528220ca53..7a02399487 100644 --- a/src/google/protobuf/compiler/java/enum_field.cc +++ b/src/google/protobuf/compiler/java/enum_field.cc @@ -120,7 +120,7 @@ void SetEnumVariables( (*variables)["get_has_field_bit_from_local"] = GenerateGetBitFromLocal(builderBitIndex); - if (SupportUnknownEnumValue(descriptor->file())) { + if (SupportUnknownEnumValue(descriptor)) { variables->insert( {"unknown", absl::StrCat((*variables)["type"], ".UNRECOGNIZED")}); } else { @@ -167,7 +167,7 @@ void ImmutableEnumFieldGenerator::GenerateInterfaceMembers( printer->Print(variables_, "$deprecation$boolean has$capitalized_name$();\n"); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "$deprecation$int get$capitalized_name$Value();\n"); @@ -188,7 +188,7 @@ void ImmutableEnumFieldGenerator::GenerateMembers(io::Printer* printer) const { "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "@java.lang.Override $deprecation$public int " @@ -219,7 +219,7 @@ void ImmutableEnumFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "@java.lang.Override $deprecation$public int " @@ -286,7 +286,7 @@ void ImmutableEnumFieldGenerator::GenerateKotlinDslMembers( " $kt_dsl_builder$.${$set$capitalized_name$$}$(value)\n" " }\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "$kt_deprecation$public var $kt_name$Value: kotlin.Int\n" @@ -338,7 +338,7 @@ void ImmutableEnumFieldGenerator::GenerateMergingCode( "if (other.has$capitalized_name$()) {\n" " set$capitalized_name$(other.get$capitalized_name$());\n" "}\n"); - } else if (SupportUnknownEnumValue(descriptor_->file())) { + } else if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "if (other.$name$_ != $default_number$) {\n" @@ -362,7 +362,7 @@ void ImmutableEnumFieldGenerator::GenerateBuildingCode( void ImmutableEnumFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print(variables_, "$name$_ = input.readEnum();\n" "$set_has_field_bit_builder$\n"); @@ -437,7 +437,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -473,7 +473,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -552,7 +552,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateBuildingCode( void ImmutableEnumOneofFieldGenerator::GenerateMergingCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "set$capitalized_name$Value(other.get$capitalized_name$Value());\n"); @@ -564,7 +564,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateMergingCode( void ImmutableEnumOneofFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print(variables_, "int rawValue = input.readEnum();\n" "$set_oneof_case_message$;\n" @@ -604,7 +604,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateSerializedSizeCode( void ImmutableEnumOneofFieldGenerator::GenerateEqualsCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "if (get$capitalized_name$Value()\n" @@ -619,7 +619,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateEqualsCode( void ImmutableEnumOneofFieldGenerator::GenerateHashCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print(variables_, "hash = (37 * hash) + $constant_name$;\n" "hash = (53 * hash) + get$capitalized_name$Value();\n"); @@ -661,7 +661,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateInterfaceMembers( WriteFieldAccessorDocComment(printer, descriptor_, LIST_INDEXED_GETTER); printer->Print(variables_, "$deprecation$$type$ get$capitalized_name$(int index);\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "$deprecation$java.util.List\n" @@ -716,7 +716,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateMembers( " return $name$_converter_.convert($name$_.get(index));\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "@java.lang.Override\n" @@ -844,7 +844,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "$deprecation$public java.util.List\n" @@ -954,7 +954,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateBuildingCode( void RepeatedImmutableEnumFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { // Read and store the enum - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print(variables_, "int tmpRaw = input.readEnum();\n" "ensure$capitalized_name$IsMutable();\n" diff --git a/src/google/protobuf/compiler/java/enum_field_lite.cc b/src/google/protobuf/compiler/java/enum_field_lite.cc index c15e5e765d..bf5c789f9a 100644 --- a/src/google/protobuf/compiler/java/enum_field_lite.cc +++ b/src/google/protobuf/compiler/java/enum_field_lite.cc @@ -128,7 +128,7 @@ void SetEnumVariables( (*variables)["set_has_field_bit_to_local"] = GenerateSetBitToLocal(messageBitIndex); - if (SupportUnknownEnumValue(descriptor->file())) { + if (SupportUnknownEnumValue(descriptor)) { variables->insert( {"unknown", absl::StrCat((*variables)["type"], ".UNRECOGNIZED")}); } else { @@ -172,7 +172,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateInterfaceMembers( "$deprecation$boolean ${$has$capitalized_name$$}$();\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "$deprecation$int ${$get$capitalized_name$Value$}$();\n"); @@ -212,7 +212,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateMembers( "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -232,7 +232,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateMembers( printer->Annotate("{", "}", descriptor_); // Generate private setters for the builder to proxy into. - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, SETTER); printer->Print(variables_, "private void set$capitalized_name$Value(int value) {\n" @@ -266,7 +266,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -327,7 +327,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateKotlinDslMembers( " $kt_dsl_builder$.${$set$capitalized_name$$}$(value)\n" " }\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "$kt_deprecation$public var $kt_name$Value: kotlin.Int\n" @@ -409,7 +409,7 @@ void ImmutableEnumOneofFieldLiteGenerator::GenerateMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -436,7 +436,7 @@ void ImmutableEnumOneofFieldLiteGenerator::GenerateMembers( printer->Annotate("{", "}", descriptor_); // Generate private setters for the builder to proxy into. - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, SETTER); printer->Print(variables_, "private void set$capitalized_name$Value(int value) {\n" @@ -485,7 +485,7 @@ void ImmutableEnumOneofFieldLiteGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -571,7 +571,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateInterfaceMembers( variables_, "$deprecation$$type$ ${$get$capitalized_name$$}$(int index);\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "$deprecation$java.util.List\n" @@ -641,7 +641,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateMembers( " return result == null ? $unknown$ : result;\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "@java.lang.Override\n" @@ -707,7 +707,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateMembers( " $name$_ = emptyIntList();\n" "}\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, SETTER); printer->Print(variables_, "private void set$capitalized_name$Value(\n" @@ -740,7 +740,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateFieldInfo( WriteIntToUtf16CharSequence(GetExperimentalJavaFieldType(descriptor_), output); printer->Print(variables_, "\"$name$_\",\n"); - if (!SupportUnknownEnumValue(descriptor_->file())) { + if (!SupportUnknownEnumValue(descriptor_)) { PrintEnumVerifierLogic(printer, descriptor_, variables_, /*var_name=*/"$type$", /*terminating_string=*/",\n", @@ -815,7 +815,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "@java.lang.Override\n" diff --git a/src/google/protobuf/compiler/java/enum_lite.cc b/src/google/protobuf/compiler/java/enum_lite.cc index 5d10a684bc..2aa2b4c73b 100644 --- a/src/google/protobuf/compiler/java/enum_lite.cc +++ b/src/google/protobuf/compiler/java/enum_lite.cc @@ -97,7 +97,7 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { printer->Annotate("name", canonical_values_[i]); } - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print("${$UNRECOGNIZED$}$(-1),\n", "{", "", "}", ""); printer->Annotate("{", "}", descriptor_); } @@ -142,7 +142,7 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { "\n" "@java.lang.Override\n" "public final int getNumber() {\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( " if (this == UNRECOGNIZED) {\n" " throw new java.lang.IllegalArgumentException(\n" @@ -235,7 +235,7 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { " result.append(getClass().getName()).append('@')\n" " .append(java.lang.Integer.toHexString(\n" " java.lang.System.identityHashCode(this)));\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( " if (this != UNRECOGNIZED) {\n" " result.append(\" number=\").append(getNumber());\n" diff --git a/src/google/protobuf/compiler/java/helpers.cc b/src/google/protobuf/compiler/java/helpers.cc index ab4dec6c03..77df7e4855 100644 --- a/src/google/protobuf/compiler/java/helpers.cc +++ b/src/google/protobuf/compiler/java/helpers.cc @@ -932,11 +932,10 @@ int GetExperimentalJavaFieldType(const FieldDescriptor* field) { } if (field->is_map()) { - if (!SupportUnknownEnumValue(field)) { - const FieldDescriptor* value = field->message_type()->map_value(); - if (GetJavaType(value) == JAVATYPE_ENUM) { - extra_bits |= kMapWithProto2EnumValue; - } + const FieldDescriptor* value = field->message_type()->map_value(); + if (GetJavaType(value) == JAVATYPE_ENUM && + !SupportUnknownEnumValue(field)) { + extra_bits |= kMapWithProto2EnumValue; } return kMapFieldType | extra_bits; } else if (field->is_packed()) { diff --git a/src/google/protobuf/compiler/java/helpers.h b/src/google/protobuf/compiler/java/helpers.h index 0ebb3b9ebe..bb60a65324 100644 --- a/src/google/protobuf/compiler/java/helpers.h +++ b/src/google/protobuf/compiler/java/helpers.h @@ -384,15 +384,19 @@ inline bool ExposePublicParser(const FileDescriptor* descriptor) { return descriptor->syntax() == FileDescriptor::SYNTAX_PROTO2; } -// Whether unknown enum values are kept (i.e., not stored in UnknownFieldSet -// but in the message and can be queried using additional getters that return -// ints. -inline bool SupportUnknownEnumValue(const FileDescriptor* descriptor) { - return descriptor->syntax() == FileDescriptor::SYNTAX_PROTO3; +inline bool SupportUnknownEnumValue(const EnumDescriptor* e) { + return !e->is_closed(); } inline bool SupportUnknownEnumValue(const FieldDescriptor* field) { - return field->file()->syntax() == FileDescriptor::SYNTAX_PROTO3; + // If we get in a map field, we are asking about its value type, not the map + // field. + if (field->is_map()) { + field = field->message_type()->map_value(); + } + + GOOGLE_ABSL_CHECK(field->enum_type() != nullptr) << field->type_name(); + return SupportUnknownEnumValue(field->enum_type()); } // Check whether a message has repeated fields. diff --git a/src/google/protobuf/compiler/java/map_field.cc b/src/google/protobuf/compiler/java/map_field.cc index ad82051124..4ebaef24c5 100644 --- a/src/google/protobuf/compiler/java/map_field.cc +++ b/src/google/protobuf/compiler/java/map_field.cc @@ -147,7 +147,7 @@ void SetMessageVariables( {"value_enum_type_pass_through_nullness", absl::StrCat(pass_through_nullness, (*variables)["value_enum_type"])}); - if (SupportUnknownEnumValue(descriptor->file())) { + if (SupportUnknownEnumValue(descriptor)) { // Map unknown values to a special UNRECOGNIZED value if supported. variables->insert( {"unrecognized_value", @@ -275,7 +275,7 @@ void ImmutableMapFieldGenerator::GenerateInterfaceMembers( "$deprecation$$value_enum_type$ ${$get$capitalized_name$OrThrow$}$(\n" " $key_type$ key);\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "/**\n" @@ -478,7 +478,7 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { if (context_->options().opensource_runtime) { printer->Print( variables_, @@ -645,7 +645,7 @@ void ImmutableMapFieldGenerator::GenerateMapGetters( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "/**\n" @@ -870,8 +870,8 @@ void ImmutableMapFieldGenerator::GenerateBuildingCode( void ImmutableMapFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { - if (!SupportUnknownEnumValue(descriptor_->file()) && - GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { + if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM && + !SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "com.google.protobuf.ByteString bytes = input.readBytes();\n" diff --git a/src/google/protobuf/compiler/java/map_field_lite.cc b/src/google/protobuf/compiler/java/map_field_lite.cc index 87970ef65e..04a4051472 100644 --- a/src/google/protobuf/compiler/java/map_field_lite.cc +++ b/src/google/protobuf/compiler/java/map_field_lite.cc @@ -144,7 +144,7 @@ void SetMessageVariables( {"value_enum_type_pass_through_nullness", absl::StrCat(pass_through_nullness, (*variables)["value_enum_type"])}); - if (SupportUnknownEnumValue(descriptor->file())) { + if (SupportUnknownEnumValue(descriptor)) { // Map unknown values to a special UNRECOGNIZED value if supported. variables->insert( {"unrecognized_value", @@ -248,7 +248,7 @@ void ImmutableMapFieldLiteGenerator::GenerateInterfaceMembers( "$deprecation$$value_enum_type$ ${$get$capitalized_name$OrThrow$}$(\n" " $key_type$ key);\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "/**\n" @@ -432,7 +432,7 @@ void ImmutableMapFieldLiteGenerator::GenerateMembers( " return $name$ValueConverter.doForward(map.get(key));\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "/**\n" @@ -556,7 +556,7 @@ void ImmutableMapFieldLiteGenerator::GenerateMembers( " internalGetMutable$capitalized_name$(),\n" " $name$ValueConverter);\n" "}\n"); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { WriteFieldDocComment(printer, descriptor_); printer->Print( variables_, @@ -583,8 +583,8 @@ void ImmutableMapFieldLiteGenerator::GenerateFieldInfo( printer->Print(variables_, "\"$name$_\",\n" "$default_entry$,\n"); - if (!SupportUnknownEnumValue(descriptor_) && - GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { + if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM && + !SupportUnknownEnumValue(descriptor_)) { PrintEnumVerifierLogic(printer, ValueField(descriptor_), variables_, /*var_name=*/"$value_enum_type$", /*terminating_string=*/",\n", @@ -711,7 +711,7 @@ void ImmutableMapFieldLiteGenerator::GenerateBuilderMembers( " return this;\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_->file())) { + if (SupportUnknownEnumValue(descriptor_)) { printer->Print( variables_, "/**\n" From 17a9313849e939dde03205c0856fbabd432a3f05 Mon Sep 17 00:00:00 2001 From: Sandy Zhang Date: Fri, 20 Jan 2023 13:11:40 -0800 Subject: [PATCH 2/7] Remove RTTI checks for DefaultFieldComparator. PiperOrigin-RevId: 503507674 --- src/google/protobuf/port_def.inc | 4 ---- src/google/protobuf/port_undef.inc | 1 - src/google/protobuf/util/message_differencer.cc | 2 -- src/google/protobuf/util/message_differencer.h | 2 -- 4 files changed, 9 deletions(-) diff --git a/src/google/protobuf/port_def.inc b/src/google/protobuf/port_def.inc index 6a546aacba..20f393cd5a 100644 --- a/src/google/protobuf/port_def.inc +++ b/src/google/protobuf/port_def.inc @@ -208,10 +208,6 @@ static_assert(PROTOBUF_CPLUSPLUS_MIN(201402L), "Protobuf only supports C++14 and // Owner: mordberg@ #define PROTOBUF_FUTURE_MAP_PAIR_UPGRADE 1 -// Used to remove the RTTI checks for `DefaultFieldComparator`. -// Owner: kfm@ -#define PROTOBUF_FUTURE_REMOVE_DEFAULT_FIELD_COMPARATOR 1 - // Used to remove the manipulation of cleared elements in RepeatedPtrField. // Owner: mkruskal@ #define PROTOBUF_FUTURE_REMOVE_CLEARED_API 1 diff --git a/src/google/protobuf/port_undef.inc b/src/google/protobuf/port_undef.inc index b731d65a47..7c54d2d034 100644 --- a/src/google/protobuf/port_undef.inc +++ b/src/google/protobuf/port_undef.inc @@ -118,7 +118,6 @@ #ifdef PROTOBUF_FUTURE_BREAKING_CHANGES #undef PROTOBUF_FUTURE_BREAKING_CHANGES #undef PROTOBUF_FUTURE_MAP_PAIR_UPGRADE -#undef PROTOBUF_FUTURE_REMOVE_DEFAULT_FIELD_COMPARATOR #undef PROTOBUF_FUTURE_REMOVE_CLEARED_API #endif diff --git a/src/google/protobuf/util/message_differencer.cc b/src/google/protobuf/util/message_differencer.cc index 7aa5eee4c0..2bc47626be 100644 --- a/src/google/protobuf/util/message_differencer.cc +++ b/src/google/protobuf/util/message_differencer.cc @@ -347,14 +347,12 @@ void MessageDifferencer::set_field_comparator(FieldComparator* comparator) { field_comparator_.base = comparator; } -#ifdef PROTOBUF_FUTURE_REMOVE_DEFAULT_FIELD_COMPARATOR void MessageDifferencer::set_field_comparator( DefaultFieldComparator* comparator) { GOOGLE_ABSL_CHECK(comparator) << "Field comparator can't be NULL."; field_comparator_kind_ = kFCDefault; field_comparator_.default_impl = comparator; } -#endif // PROTOBUF_FUTURE_REMOVE_DEFAULT_FIELD_COMPARATOR void MessageDifferencer::set_message_field_comparison( MessageFieldComparison comparison) { diff --git a/src/google/protobuf/util/message_differencer.h b/src/google/protobuf/util/message_differencer.h index a3804ade80..314873a1ab 100644 --- a/src/google/protobuf/util/message_differencer.h +++ b/src/google/protobuf/util/message_differencer.h @@ -553,9 +553,7 @@ class PROTOBUF_EXPORT MessageDifferencer { // Note that this method must be called before Compare for the comparator to // be used. void set_field_comparator(FieldComparator* comparator); -#ifdef PROTOBUF_FUTURE_REMOVE_DEFAULT_FIELD_COMPARATOR void set_field_comparator(DefaultFieldComparator* comparator); -#endif // PROTOBUF_FUTURE_REMOVE_DEFAULT_FIELD_COMPARATOR // DEPRECATED. Pass a DefaultFieldComparator instance instead. // Sets the fraction and margin for the float comparison of a given field. From 3629ca3b5f730ed98293c06d442560484b26ae84 Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 20 Jan 2023 14:19:19 -0800 Subject: [PATCH 3/7] Automated rollback of commit 67ac9eb4e93552033b57b7b817da962ba529d9db. PiperOrigin-RevId: 503521593 --- src/google/protobuf/compiler/java/enum.cc | 8 ++--- .../protobuf/compiler/java/enum_field.cc | 34 +++++++++---------- .../protobuf/compiler/java/enum_field_lite.cc | 28 +++++++-------- .../protobuf/compiler/java/enum_lite.cc | 6 ++-- src/google/protobuf/compiler/java/helpers.cc | 9 ++--- src/google/protobuf/compiler/java/helpers.h | 16 ++++----- .../protobuf/compiler/java/map_field.cc | 12 +++---- .../protobuf/compiler/java/map_field_lite.cc | 14 ++++---- 8 files changed, 62 insertions(+), 65 deletions(-) diff --git a/src/google/protobuf/compiler/java/enum.cc b/src/google/protobuf/compiler/java/enum.cc index 341361f8f0..84c99e6779 100644 --- a/src/google/protobuf/compiler/java/enum.cc +++ b/src/google/protobuf/compiler/java/enum.cc @@ -119,7 +119,7 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Annotate("name", canonical_values_[i]); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { if (ordinal_is_index) { printer->Print("${$UNRECOGNIZED$}$(-1),\n", "{", "", "}", ""); } else { @@ -167,7 +167,7 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Print( "\n" "public final int getNumber() {\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { if (ordinal_is_index) { printer->Print( " if (this == UNRECOGNIZED) {\n" @@ -251,7 +251,7 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Print( "public final com.google.protobuf.Descriptors.EnumValueDescriptor\n" " getValueDescriptor() {\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { if (ordinal_is_index) { printer->Print( " if (this == UNRECOGNIZED) {\n" @@ -346,7 +346,7 @@ void EnumGenerator::Generate(io::Printer* printer) { " \"EnumValueDescriptor is not for this type.\");\n" " }\n", "classname", descriptor_->name()); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( " if (desc.getIndex() == -1) {\n" " return UNRECOGNIZED;\n" diff --git a/src/google/protobuf/compiler/java/enum_field.cc b/src/google/protobuf/compiler/java/enum_field.cc index 7a02399487..528220ca53 100644 --- a/src/google/protobuf/compiler/java/enum_field.cc +++ b/src/google/protobuf/compiler/java/enum_field.cc @@ -120,7 +120,7 @@ void SetEnumVariables( (*variables)["get_has_field_bit_from_local"] = GenerateGetBitFromLocal(builderBitIndex); - if (SupportUnknownEnumValue(descriptor)) { + if (SupportUnknownEnumValue(descriptor->file())) { variables->insert( {"unknown", absl::StrCat((*variables)["type"], ".UNRECOGNIZED")}); } else { @@ -167,7 +167,7 @@ void ImmutableEnumFieldGenerator::GenerateInterfaceMembers( printer->Print(variables_, "$deprecation$boolean has$capitalized_name$();\n"); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "$deprecation$int get$capitalized_name$Value();\n"); @@ -188,7 +188,7 @@ void ImmutableEnumFieldGenerator::GenerateMembers(io::Printer* printer) const { "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "@java.lang.Override $deprecation$public int " @@ -219,7 +219,7 @@ void ImmutableEnumFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "@java.lang.Override $deprecation$public int " @@ -286,7 +286,7 @@ void ImmutableEnumFieldGenerator::GenerateKotlinDslMembers( " $kt_dsl_builder$.${$set$capitalized_name$$}$(value)\n" " }\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "$kt_deprecation$public var $kt_name$Value: kotlin.Int\n" @@ -338,7 +338,7 @@ void ImmutableEnumFieldGenerator::GenerateMergingCode( "if (other.has$capitalized_name$()) {\n" " set$capitalized_name$(other.get$capitalized_name$());\n" "}\n"); - } else if (SupportUnknownEnumValue(descriptor_)) { + } else if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "if (other.$name$_ != $default_number$) {\n" @@ -362,7 +362,7 @@ void ImmutableEnumFieldGenerator::GenerateBuildingCode( void ImmutableEnumFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print(variables_, "$name$_ = input.readEnum();\n" "$set_has_field_bit_builder$\n"); @@ -437,7 +437,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -473,7 +473,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -552,7 +552,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateBuildingCode( void ImmutableEnumOneofFieldGenerator::GenerateMergingCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "set$capitalized_name$Value(other.get$capitalized_name$Value());\n"); @@ -564,7 +564,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateMergingCode( void ImmutableEnumOneofFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print(variables_, "int rawValue = input.readEnum();\n" "$set_oneof_case_message$;\n" @@ -604,7 +604,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateSerializedSizeCode( void ImmutableEnumOneofFieldGenerator::GenerateEqualsCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "if (get$capitalized_name$Value()\n" @@ -619,7 +619,7 @@ void ImmutableEnumOneofFieldGenerator::GenerateEqualsCode( void ImmutableEnumOneofFieldGenerator::GenerateHashCode( io::Printer* printer) const { - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print(variables_, "hash = (37 * hash) + $constant_name$;\n" "hash = (53 * hash) + get$capitalized_name$Value();\n"); @@ -661,7 +661,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateInterfaceMembers( WriteFieldAccessorDocComment(printer, descriptor_, LIST_INDEXED_GETTER); printer->Print(variables_, "$deprecation$$type$ get$capitalized_name$(int index);\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "$deprecation$java.util.List\n" @@ -716,7 +716,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateMembers( " return $name$_converter_.convert($name$_.get(index));\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "@java.lang.Override\n" @@ -844,7 +844,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "$deprecation$public java.util.List\n" @@ -954,7 +954,7 @@ void RepeatedImmutableEnumFieldGenerator::GenerateBuildingCode( void RepeatedImmutableEnumFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { // Read and store the enum - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print(variables_, "int tmpRaw = input.readEnum();\n" "ensure$capitalized_name$IsMutable();\n" diff --git a/src/google/protobuf/compiler/java/enum_field_lite.cc b/src/google/protobuf/compiler/java/enum_field_lite.cc index bf5c789f9a..c15e5e765d 100644 --- a/src/google/protobuf/compiler/java/enum_field_lite.cc +++ b/src/google/protobuf/compiler/java/enum_field_lite.cc @@ -128,7 +128,7 @@ void SetEnumVariables( (*variables)["set_has_field_bit_to_local"] = GenerateSetBitToLocal(messageBitIndex); - if (SupportUnknownEnumValue(descriptor)) { + if (SupportUnknownEnumValue(descriptor->file())) { variables->insert( {"unknown", absl::StrCat((*variables)["type"], ".UNRECOGNIZED")}); } else { @@ -172,7 +172,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateInterfaceMembers( "$deprecation$boolean ${$has$capitalized_name$$}$();\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print(variables_, "$deprecation$int ${$get$capitalized_name$Value$}$();\n"); @@ -212,7 +212,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateMembers( "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -232,7 +232,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateMembers( printer->Annotate("{", "}", descriptor_); // Generate private setters for the builder to proxy into. - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, SETTER); printer->Print(variables_, "private void set$capitalized_name$Value(int value) {\n" @@ -266,7 +266,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -327,7 +327,7 @@ void ImmutableEnumFieldLiteGenerator::GenerateKotlinDslMembers( " $kt_dsl_builder$.${$set$capitalized_name$$}$(value)\n" " }\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "$kt_deprecation$public var $kt_name$Value: kotlin.Int\n" @@ -409,7 +409,7 @@ void ImmutableEnumOneofFieldLiteGenerator::GenerateMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -436,7 +436,7 @@ void ImmutableEnumOneofFieldLiteGenerator::GenerateMembers( printer->Annotate("{", "}", descriptor_); // Generate private setters for the builder to proxy into. - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, SETTER); printer->Print(variables_, "private void set$capitalized_name$Value(int value) {\n" @@ -485,7 +485,7 @@ void ImmutableEnumOneofFieldLiteGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, GETTER); printer->Print( variables_, @@ -571,7 +571,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateInterfaceMembers( variables_, "$deprecation$$type$ ${$get$capitalized_name$$}$(int index);\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "$deprecation$java.util.List\n" @@ -641,7 +641,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateMembers( " return result == null ? $unknown$ : result;\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "@java.lang.Override\n" @@ -707,7 +707,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateMembers( " $name$_ = emptyIntList();\n" "}\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, SETTER); printer->Print(variables_, "private void set$capitalized_name$Value(\n" @@ -740,7 +740,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateFieldInfo( WriteIntToUtf16CharSequence(GetExperimentalJavaFieldType(descriptor_), output); printer->Print(variables_, "\"$name$_\",\n"); - if (!SupportUnknownEnumValue(descriptor_)) { + if (!SupportUnknownEnumValue(descriptor_->file())) { PrintEnumVerifierLogic(printer, descriptor_, variables_, /*var_name=*/"$type$", /*terminating_string=*/",\n", @@ -815,7 +815,7 @@ void RepeatedImmutableEnumFieldLiteGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldEnumValueAccessorDocComment(printer, descriptor_, LIST_GETTER); printer->Print(variables_, "@java.lang.Override\n" diff --git a/src/google/protobuf/compiler/java/enum_lite.cc b/src/google/protobuf/compiler/java/enum_lite.cc index 2aa2b4c73b..5d10a684bc 100644 --- a/src/google/protobuf/compiler/java/enum_lite.cc +++ b/src/google/protobuf/compiler/java/enum_lite.cc @@ -97,7 +97,7 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { printer->Annotate("name", canonical_values_[i]); } - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print("${$UNRECOGNIZED$}$(-1),\n", "{", "", "}", ""); printer->Annotate("{", "}", descriptor_); } @@ -142,7 +142,7 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { "\n" "@java.lang.Override\n" "public final int getNumber() {\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( " if (this == UNRECOGNIZED) {\n" " throw new java.lang.IllegalArgumentException(\n" @@ -235,7 +235,7 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { " result.append(getClass().getName()).append('@')\n" " .append(java.lang.Integer.toHexString(\n" " java.lang.System.identityHashCode(this)));\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( " if (this != UNRECOGNIZED) {\n" " result.append(\" number=\").append(getNumber());\n" diff --git a/src/google/protobuf/compiler/java/helpers.cc b/src/google/protobuf/compiler/java/helpers.cc index 77df7e4855..ab4dec6c03 100644 --- a/src/google/protobuf/compiler/java/helpers.cc +++ b/src/google/protobuf/compiler/java/helpers.cc @@ -932,10 +932,11 @@ int GetExperimentalJavaFieldType(const FieldDescriptor* field) { } if (field->is_map()) { - const FieldDescriptor* value = field->message_type()->map_value(); - if (GetJavaType(value) == JAVATYPE_ENUM && - !SupportUnknownEnumValue(field)) { - extra_bits |= kMapWithProto2EnumValue; + if (!SupportUnknownEnumValue(field)) { + const FieldDescriptor* value = field->message_type()->map_value(); + if (GetJavaType(value) == JAVATYPE_ENUM) { + extra_bits |= kMapWithProto2EnumValue; + } } return kMapFieldType | extra_bits; } else if (field->is_packed()) { diff --git a/src/google/protobuf/compiler/java/helpers.h b/src/google/protobuf/compiler/java/helpers.h index bb60a65324..0ebb3b9ebe 100644 --- a/src/google/protobuf/compiler/java/helpers.h +++ b/src/google/protobuf/compiler/java/helpers.h @@ -384,19 +384,15 @@ inline bool ExposePublicParser(const FileDescriptor* descriptor) { return descriptor->syntax() == FileDescriptor::SYNTAX_PROTO2; } -inline bool SupportUnknownEnumValue(const EnumDescriptor* e) { - return !e->is_closed(); +// Whether unknown enum values are kept (i.e., not stored in UnknownFieldSet +// but in the message and can be queried using additional getters that return +// ints. +inline bool SupportUnknownEnumValue(const FileDescriptor* descriptor) { + return descriptor->syntax() == FileDescriptor::SYNTAX_PROTO3; } inline bool SupportUnknownEnumValue(const FieldDescriptor* field) { - // If we get in a map field, we are asking about its value type, not the map - // field. - if (field->is_map()) { - field = field->message_type()->map_value(); - } - - GOOGLE_ABSL_CHECK(field->enum_type() != nullptr) << field->type_name(); - return SupportUnknownEnumValue(field->enum_type()); + return field->file()->syntax() == FileDescriptor::SYNTAX_PROTO3; } // Check whether a message has repeated fields. diff --git a/src/google/protobuf/compiler/java/map_field.cc b/src/google/protobuf/compiler/java/map_field.cc index 4ebaef24c5..ad82051124 100644 --- a/src/google/protobuf/compiler/java/map_field.cc +++ b/src/google/protobuf/compiler/java/map_field.cc @@ -147,7 +147,7 @@ void SetMessageVariables( {"value_enum_type_pass_through_nullness", absl::StrCat(pass_through_nullness, (*variables)["value_enum_type"])}); - if (SupportUnknownEnumValue(descriptor)) { + if (SupportUnknownEnumValue(descriptor->file())) { // Map unknown values to a special UNRECOGNIZED value if supported. variables->insert( {"unrecognized_value", @@ -275,7 +275,7 @@ void ImmutableMapFieldGenerator::GenerateInterfaceMembers( "$deprecation$$value_enum_type$ ${$get$capitalized_name$OrThrow$}$(\n" " $key_type$ key);\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "/**\n" @@ -478,7 +478,7 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { if (context_->options().opensource_runtime) { printer->Print( variables_, @@ -645,7 +645,7 @@ void ImmutableMapFieldGenerator::GenerateMapGetters( "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "/**\n" @@ -870,8 +870,8 @@ void ImmutableMapFieldGenerator::GenerateBuildingCode( void ImmutableMapFieldGenerator::GenerateBuilderParsingCode( io::Printer* printer) const { - if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM && - !SupportUnknownEnumValue(descriptor_)) { + if (!SupportUnknownEnumValue(descriptor_->file()) && + GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { printer->Print( variables_, "com.google.protobuf.ByteString bytes = input.readBytes();\n" diff --git a/src/google/protobuf/compiler/java/map_field_lite.cc b/src/google/protobuf/compiler/java/map_field_lite.cc index 04a4051472..87970ef65e 100644 --- a/src/google/protobuf/compiler/java/map_field_lite.cc +++ b/src/google/protobuf/compiler/java/map_field_lite.cc @@ -144,7 +144,7 @@ void SetMessageVariables( {"value_enum_type_pass_through_nullness", absl::StrCat(pass_through_nullness, (*variables)["value_enum_type"])}); - if (SupportUnknownEnumValue(descriptor)) { + if (SupportUnknownEnumValue(descriptor->file())) { // Map unknown values to a special UNRECOGNIZED value if supported. variables->insert( {"unrecognized_value", @@ -248,7 +248,7 @@ void ImmutableMapFieldLiteGenerator::GenerateInterfaceMembers( "$deprecation$$value_enum_type$ ${$get$capitalized_name$OrThrow$}$(\n" " $key_type$ key);\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "/**\n" @@ -432,7 +432,7 @@ void ImmutableMapFieldLiteGenerator::GenerateMembers( " return $name$ValueConverter.doForward(map.get(key));\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "/**\n" @@ -556,7 +556,7 @@ void ImmutableMapFieldLiteGenerator::GenerateMembers( " internalGetMutable$capitalized_name$(),\n" " $name$ValueConverter);\n" "}\n"); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { WriteFieldDocComment(printer, descriptor_); printer->Print( variables_, @@ -583,8 +583,8 @@ void ImmutableMapFieldLiteGenerator::GenerateFieldInfo( printer->Print(variables_, "\"$name$_\",\n" "$default_entry$,\n"); - if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM && - !SupportUnknownEnumValue(descriptor_)) { + if (!SupportUnknownEnumValue(descriptor_) && + GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { PrintEnumVerifierLogic(printer, ValueField(descriptor_), variables_, /*var_name=*/"$value_enum_type$", /*terminating_string=*/",\n", @@ -711,7 +711,7 @@ void ImmutableMapFieldLiteGenerator::GenerateBuilderMembers( " return this;\n" "}\n"); printer->Annotate("{", "}", descriptor_); - if (SupportUnknownEnumValue(descriptor_)) { + if (SupportUnknownEnumValue(descriptor_->file())) { printer->Print( variables_, "/**\n" From 354fe99c429fa9bef801074c86f63231431392d7 Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 20 Jan 2023 16:16:23 -0800 Subject: [PATCH 4/7] internal change PiperOrigin-RevId: 503544432 --- src/google/protobuf/compiler/cpp/helpers.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/google/protobuf/compiler/cpp/helpers.cc b/src/google/protobuf/compiler/cpp/helpers.cc index fce4e80724..86d6196d01 100644 --- a/src/google/protobuf/compiler/cpp/helpers.cc +++ b/src/google/protobuf/compiler/cpp/helpers.cc @@ -1424,8 +1424,6 @@ bool GetBootstrapBasename(const Options& options, absl::string_view basename, "net/proto2/compiler/proto/plugin"}, {"net/proto2/compiler/proto/profile", "net/proto2/compiler/proto/profile_bootstrap"}, - {"third_party/protobuf/extension_declaration", - "third_party/protobuf/extension_declaration_bootstrap"}, }; auto iter = bootstrap_mapping->find(basename); if (iter == bootstrap_mapping->end()) { From e207bcd940400fd8b99b838aae1117f1860ff495 Mon Sep 17 00:00:00 2001 From: Mike Kruskal Date: Fri, 20 Jan 2023 18:40:08 -0800 Subject: [PATCH 5/7] Migrate ruby release targets to genrule to work around Bazel 5 bug (#11619) sh_binary doesn't treat its data dependencies correctly prior to Bazel 6 (see https://github.com/mkruskal-google/protobuf/pull/new/ruby_release) Closes #11619 COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/11619 from mkruskal-google:ruby_release f91352a479902a0fa5d37d65d14c3eb8b268d385 PiperOrigin-RevId: 503564788 --- .github/workflows/ruby_install.yml | 21 +++++-- ruby/BUILD.bazel | 60 ++++++++++++++++---- ruby/build_jruby_release.sh | 63 --------------------- ruby/build_release.sh | 88 ------------------------------ 4 files changed, 63 insertions(+), 169 deletions(-) delete mode 100755 ruby/build_jruby_release.sh delete mode 100755 ruby/build_release.sh diff --git a/.github/workflows/ruby_install.yml b/.github/workflows/ruby_install.yml index c9f38c79c7..a1823c77fe 100644 --- a/.github/workflows/ruby_install.yml +++ b/.github/workflows/ruby_install.yml @@ -18,7 +18,16 @@ jobs: strategy: fail-fast: false matrix: - ruby: [2.6, 2.7, 3.0, 3.1, 3.2, jruby-9.2, jruby-9.3] + include: + - { ruby: 2.6, bazel: 6.0.0} + - { ruby: 2.7, bazel: 6.0.0} + - { ruby: 3.0, bazel: 6.0.0} + - { ruby: 3.1, bazel: 6.0.0} + - { ruby: 3.2, bazel: 6.0.0} + - { ruby: jruby-9.2, bazel: 6.0.0} + - { ruby: jruby-9.3, bazel: 6.0.0} + - { ruby: 2.6, bazel: 5.1.1} + - { ruby: jruby-9.2, bazel: 5.1.1} steps: - uses: actions/checkout@v2 @@ -26,7 +35,7 @@ jobs: run: | sudo apt-get install -qy wget mkdir $HOME/bin - wget -O $HOME/bin/bazel https://github.com/bazelbuild/bazel/releases/download/6.0.0/bazel-6.0.0-linux-x86_64 + wget -O $HOME/bin/bazel https://github.com/bazelbuild/bazel/releases/download/${{ matrix.bazel }}/bazel-${{ matrix.bazel }}-linux-x86_64 chmod a+x $HOME/bin/bazel - name: Install git run: | @@ -40,16 +49,16 @@ jobs: with: submodules: recursive - name: Build cruby gem - run: $HOME/bin/bazel run ruby:release + run: $HOME/bin/bazel build ruby:release if: ${{ !contains(matrix.ruby, 'jruby') }} - name: Install cruby gem - run: gem install bazel-bin/ruby/release.runfiles/com_google_protobuf/tmp/google-protobuf-* + run: gem install bazel-bin/ruby/google-protobuf-* if: ${{ !contains(matrix.ruby, 'jruby') }} - name: Build jruby gem - run: $HOME/bin/bazel run ruby:jruby_release + run: $HOME/bin/bazel build ruby:jruby_release if: ${{ contains(matrix.ruby, 'jruby') }} - name: Install jruby gem - run: gem install bazel-bin/ruby/jruby_release.runfiles/com_google_protobuf/tmp/google-protobuf-* + run: gem install bazel-bin/ruby/google-protobuf-* if: ${{ contains(matrix.ruby, 'jruby') }} - name: Test installation run: | diff --git a/ruby/BUILD.bazel b/ruby/BUILD.bazel index b469bc8fc4..533185473a 100755 --- a/ruby/BUILD.bazel +++ b/ruby/BUILD.bazel @@ -4,6 +4,7 @@ load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") load("@rules_ruby//ruby:defs.bzl", "ruby_library") +load("//build_defs:internal_shell.bzl", "inline_sh_binary") load("//:protobuf.bzl", "internal_ruby_proto_library") load("//conformance:defs.bzl", "conformance_test") load("//:protobuf_version.bzl", "PROTOBUF_RUBY_VERSION") @@ -20,27 +21,44 @@ ruby_library( ], ) -sh_binary( +# Note: these can be greatly simplified using inline_sh_binary in Bazel 6, +# but doesn't work prior to that due to https://github.com/bazelbuild/bazel/issues/15043. +# Instead, we need to manually copy all of the srcs into gendir from a genrule. +genrule( name = "jruby_release", - data = [ + srcs = [ "//ruby/lib/google:copy_jar", "//ruby/lib/google:dist_files", "//:well_known_ruby_protos", "google-protobuf.gemspec", ], - srcs = [ - "build_jruby_release.sh", - ], - deps = ["@bazel_tools//tools/bash/runfiles"], + outs = ["google-protobuf-"+PROTOBUF_RUBY_VERSION+"-java.gem"], + cmd = """ + set -eux + mkdir tmp + for src in $(SRCS); do + cp --parents -L "$$src" tmp + done + for wkt in $(execpaths //:well_known_ruby_protos); do + mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/" + done + mv "tmp/$(execpath //ruby/lib/google:copy_jar)" "tmp/ruby/lib/google" + cd tmp/ruby + chmod -R 777 ./ + gem build google-protobuf.gemspec + cd ../.. + mv tmp/ruby/google-protobuf-*.gem $@ + """, + tags = ["manual"], target_compatible_with = select({ "@rules_ruby//ruby/runtime:config_jruby": [], "//conditions:default": ["@platforms//:incompatible"], }), ) -sh_binary( +genrule( name = "release", - data = [ + srcs = [ "@utf8_range//:utf8_range_srcs", "@utf8_range//:LICENSE", "//:well_known_ruby_protos", @@ -48,16 +66,34 @@ sh_binary( "//ruby/lib/google:dist_files", "google-protobuf.gemspec", ], - srcs = [ - "build_release.sh", - ], - deps = ["@bazel_tools//tools/bash/runfiles"], + outs = ["google-protobuf-"+PROTOBUF_RUBY_VERSION+".gem"], + cmd = """ + set -eux + mkdir tmp + for src in $(SRCS); do + cp --parents -L "$$src" "tmp" + done + mkdir -p "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range" + for utf in $(execpaths @utf8_range//:utf8_range_srcs) $(execpath @utf8_range//:LICENSE); do + mv "tmp/$$utf" "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range" + done + for wkt in $(execpaths //:well_known_ruby_protos); do + mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/" + done + cd tmp/ruby + chmod -R 777 ./ + gem build google-protobuf.gemspec + cd ../.. + mv tmp/ruby/google-protobuf-*.gem $@ + """, + tags = ["manual"], target_compatible_with = select({ "@rules_ruby//ruby/runtime:config_ruby": [], "//conditions:default": ["@platforms//:incompatible"], }), ) + ################################################################################ # Tests ################################################################################ diff --git a/ruby/build_jruby_release.sh b/ruby/build_jruby_release.sh deleted file mode 100755 index 9ff66d680a..0000000000 --- a/ruby/build_jruby_release.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# This file should be executed with jruby - -set -ex - -# --- begin runfiles.bash initialization --- -# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). -set -euo pipefail -if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then - if [[ -f "$0.runfiles_manifest" ]]; then - export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" - elif [[ -f "$0.runfiles/MANIFEST" ]]; then - export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" - elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then - export RUNFILES_DIR="$0.runfiles" - fi -fi -if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then - source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" -elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then - source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ - "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" -else -echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" -exit 1 -fi -# --- end runfiles.bash initialization --- - -# Make a temporary directory and move to it to do all packaging work -mkdir -p tmp -cd tmp - -# Move all generated files to lib/google/protobuf -mkdir -p lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/any_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/api_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/descriptor_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/duration_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/empty_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/field_mask_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/source_context_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/struct_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/timestamp_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/type_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/wrappers_pb.rb)" lib/google/protobuf - -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf_java.jar)" lib/google - -# Move all source files to the correct location -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf.rb)" lib/google -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/descriptor_dsl.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/message_exts.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/repeated_field.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/well_known_types.rb)" lib/google/protobuf - -# Move gemspec file to current directory -cp "$(rlocation com_google_protobuf/ruby/google.protobuf.gemspec)" . - -# Make all files global readable/writable/executable -chmod -R 777 ./ - -# Build gem -gem build google-protobuf.gemspec diff --git a/ruby/build_release.sh b/ruby/build_release.sh deleted file mode 100755 index c9b68d1514..0000000000 --- a/ruby/build_release.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# This file should be executed with ruby - -set -ex - -# --- begin runfiles.bash initialization --- -# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). -set -euo pipefail -if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then - if [[ -f "$0.runfiles_manifest" ]]; then - export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" - elif [[ -f "$0.runfiles/MANIFEST" ]]; then - export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" - elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then - export RUNFILES_DIR="$0.runfiles" - fi -fi -if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then - source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" -elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then - source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ - "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" -else -echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" -exit 1 -fi -# --- end runfiles.bash initialization --- - -# rvm use ruby-3.0 - -# Make a temporary directory and move to it to do all packaging work -mkdir -p tmp -cd tmp - -# Move all generated files to lib/google/protobuf -mkdir -p lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/any_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/api_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/descriptor_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/duration_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/empty_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/field_mask_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/source_context_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/struct_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/timestamp_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/type_pb.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/src/google/protobuf/wrappers_pb.rb)" lib/google/protobuf - -# Move all utf-8 files to ext/google/protobuf_c/third_party/utf8_range -UTF8_DIR=ext/google/protobuf_c/third_party/utf8_range -mkdir -p $UTF8_DIR -cp "$(rlocation utf8_range/LICENSE)" $UTF8_DIR/LICENSE -cp "$(rlocation utf8_range/naive.c)" $UTF8_DIR -cp "$(rlocation utf8_range/range2-neon.c)" $UTF8_DIR -cp "$(rlocation utf8_range/range2-sse.c)" $UTF8_DIR -cp "$(rlocation utf8_range/utf8_range.h)" $UTF8_DIR - -# Move all source files to the correct location -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/convert.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/convert.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/defs.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/defs.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/extconf.rb)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/map.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/map.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/message.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/message.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/protobuf.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/protobuf.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/repeated_field.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/repeated_field.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/ruby-upb.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/ruby-upb.h)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/wrap_memcpy.c)" ext/google/protobuf_c -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf.rb)" lib/google -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/descriptor_dsl.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/message_exts.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/repeated_field.rb)" lib/google/protobuf -cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/well_known_types.rb)" lib/google/protobuf - -# Move gemspec file to current directory -cp "$(rlocation com_google_protobuf/ruby/google.protobuf.gemspec)" . - -# Make all files global readable/writable/executable -chmod -R 777 ./ - -# Build gem -gem build google-protobuf.gemspec From 89349575f48db98da849f19c829ea23854e350dd Mon Sep 17 00:00:00 2001 From: Mike Kruskal Date: Fri, 20 Jan 2023 19:06:22 -0800 Subject: [PATCH 6/7] Internal change PiperOrigin-RevId: 503567665 --- kokoro/release/collect_all_artifacts.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kokoro/release/collect_all_artifacts.sh b/kokoro/release/collect_all_artifacts.sh index 330bb693c0..470dc3842d 100755 --- a/kokoro/release/collect_all_artifacts.sh +++ b/kokoro/release/collect_all_artifacts.sh @@ -57,6 +57,10 @@ sudo rm -f /etc/apt/sources.list.d/cuda.list sudo apt update sudo apt-get install -y nuget +# Copy WKT protos to csharp directory. +mkdir -p src/google/protobuf +cp ../src/google/protobuf/*.proto src/google/protobuf/ + nuget pack Google.Protobuf.Tools.nuspec # Copy the nupkg to the output artifacts From 7930cd1f9d1ec9c6632ed29e9aede3c6ab362960 Mon Sep 17 00:00:00 2001 From: Mike Kruskal Date: Fri, 20 Jan 2023 21:38:59 -0800 Subject: [PATCH 7/7] Upgrade to Abseil LTS 20230117 (#11622) Closes #11622 PiperOrigin-RevId: 503588252 --- .gitmodules | 2 +- build_defs/cpp_opts.bzl | 3 +-- cmake/abseil-cpp.cmake | 4 +--- cmake/tests.cmake | 4 ++-- protobuf_deps.bzl | 4 ++-- python/google/protobuf/pyext/descriptor_pool.cc | 7 +++++++ src/google/protobuf/arena_unittest.cc | 2 ++ src/google/protobuf/descriptor_unittest.cc | 2 ++ src/google/protobuf/repeated_field_unittest.cc | 2 ++ third_party/abseil-cpp | 2 +- third_party/zlib.BUILD | 1 + 11 files changed, 22 insertions(+), 11 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7a46a17f1a..c4e7dcca7c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,7 +5,7 @@ [submodule "third_party/abseil-cpp"] path = third_party/abseil-cpp url = https://github.com/abseil/abseil-cpp.git - branch = lts_2022_06_23 + branch = lts_2023_01_17 [submodule "third_party/jsoncpp"] path = third_party/jsoncpp url = https://github.com/open-source-parsers/jsoncpp.git diff --git a/build_defs/cpp_opts.bzl b/build_defs/cpp_opts.bzl index 6da9b4ef7a..14cdd4de64 100644 --- a/build_defs/cpp_opts.bzl +++ b/build_defs/cpp_opts.bzl @@ -19,9 +19,8 @@ COPTS = select({ "-DHAVE_ZLIB", "-Woverloaded-virtual", "-Wno-sign-compare", + "-Wno-nonnull", "-Werror", - # TODO(b/265232445) This is required due to https://github.com/abseil/abseil-cpp/issues/1201. - "-Wno-deprecated", ], }) diff --git a/cmake/abseil-cpp.cmake b/cmake/abseil-cpp.cmake index ff32501bbe..cb7d13b0ce 100644 --- a/cmake/abseil-cpp.cmake +++ b/cmake/abseil-cpp.cmake @@ -1,7 +1,5 @@ # Setup our dependency on Abseil. -set(ABSL_PROPAGATE_CXX_STD ON) - if(TARGET absl::strings) # If Abseil is included already, skip including it. # (https://github.com/protocolbuffers/protobuf/issues/10435) @@ -68,4 +66,4 @@ else() absl::utility absl::variant ) -endif () \ No newline at end of file +endif () diff --git a/cmake/tests.cmake b/cmake/tests.cmake index d3a0517927..9038c6db99 100644 --- a/cmake/tests.cmake +++ b/cmake/tests.cmake @@ -165,12 +165,12 @@ target_link_libraries(lite-test add_test(NAME lite-test COMMAND lite-test ${protobuf_GTEST_ARGS}) -add_custom_target(check +add_custom_target(full-test COMMAND tests DEPENDS tests lite-test test_plugin WORKING_DIRECTORY ${protobuf_SOURCE_DIR}) -add_test(NAME check +add_test(NAME full-test COMMAND tests ${protobuf_GTEST_ARGS}) # For test purposes, remove headers that should already be installed. This diff --git a/protobuf_deps.bzl b/protobuf_deps.bzl index 4a9e722a7f..b446eaeaf8 100644 --- a/protobuf_deps.bzl +++ b/protobuf_deps.bzl @@ -41,8 +41,8 @@ def protobuf_deps(): _github_archive( name = "com_google_absl", repo = "https://github.com/abseil/abseil-cpp", - commit = "273292d1cfc0a94a65082ee350509af1d113344d", - sha256 = "6764f226bd6e2d8ab9fe2f3cab5f45fb1a4a15c04b58b87ba7fa87456054f98b", + commit = "10b627fbe944110d1672bdf3f8e23b5909721399", + sha256 = "138ec814b4b72a79a41b2ae6526150467ff7749d8a792a63742207a5d8578ed1", ) if not native.existing_rule("zlib"): diff --git a/python/google/protobuf/pyext/descriptor_pool.cc b/python/google/protobuf/pyext/descriptor_pool.cc index 6899e94b44..a1e236ea4f 100644 --- a/python/google/protobuf/pyext/descriptor_pool.cc +++ b/python/google/protobuf/pyext/descriptor_pool.cc @@ -48,6 +48,9 @@ #include "absl/strings/string_view.h" #include "absl/strings/str_replace.h" +// Must be included last. +#include "google/protobuf/port_def.inc" + #define PyString_AsStringAndSize(ob, charpp, sizep) \ (PyUnicode_Check(ob) \ ? ((*(charpp) = const_cast( \ @@ -172,7 +175,9 @@ static PyDescriptorPool* PyDescriptorPool_NewWithDatabase( cpool->is_mutable = true; } if (use_deprecated_legacy_json_field_conflicts) { + PROTOBUF_IGNORE_DEPRECATION_START pool->UseDeprecatedLegacyJsonFieldConflicts(); + PROTOBUF_IGNORE_DEPRECATION_STOP } cpool->pool = pool; cpool->is_owned = true; @@ -826,3 +831,5 @@ PyObject* PyDescriptorPool_FromPool(const DescriptorPool* pool) { } // namespace python } // namespace protobuf } // namespace google + +#include "google/protobuf/port_undef.inc" diff --git a/src/google/protobuf/arena_unittest.cc b/src/google/protobuf/arena_unittest.cc index 87a4a11567..a40bb99265 100644 --- a/src/google/protobuf/arena_unittest.cc +++ b/src/google/protobuf/arena_unittest.cc @@ -809,6 +809,7 @@ TEST(ArenaTest, AddAllocatedWithReflection) { TEST(ArenaTest, RepeatedPtrFieldAddClearedTest) { #ifndef PROTOBUF_FUTURE_REMOVE_CLEARED_API { + PROTOBUF_IGNORE_DEPRECATION_START RepeatedPtrField repeated_field; EXPECT_TRUE(repeated_field.empty()); EXPECT_EQ(0, repeated_field.size()); @@ -817,6 +818,7 @@ TEST(ArenaTest, RepeatedPtrFieldAddClearedTest) { repeated_field.AddCleared(cleared); EXPECT_TRUE(repeated_field.empty()); EXPECT_EQ(0, repeated_field.size()); + PROTOBUF_IGNORE_DEPRECATION_STOP } #endif // !PROTOBUF_FUTURE_REMOVE_CLEARED_API { diff --git a/src/google/protobuf/descriptor_unittest.cc b/src/google/protobuf/descriptor_unittest.cc index 44c054a8f1..038aa00fcb 100644 --- a/src/google/protobuf/descriptor_unittest.cc +++ b/src/google/protobuf/descriptor_unittest.cc @@ -1277,8 +1277,10 @@ class StylizedFieldNamesTest : public testing::Test { AddExtensionRange(AddMessage(&file, "ExtendableMessage"), 1, 1000); DescriptorProto* message = AddMessage(&file, "TestMessage"); + PROTOBUF_IGNORE_DEPRECATION_START message->mutable_options()->set_deprecated_legacy_json_field_conflicts( true); + PROTOBUF_IGNORE_DEPRECATION_STOP AddField(message, "foo_foo", 1, FieldDescriptorProto::LABEL_OPTIONAL, FieldDescriptorProto::TYPE_INT32); AddField(message, "FooBar", 2, FieldDescriptorProto::LABEL_OPTIONAL, diff --git a/src/google/protobuf/repeated_field_unittest.cc b/src/google/protobuf/repeated_field_unittest.cc index 61f69bc0bd..3ea7327373 100644 --- a/src/google/protobuf/repeated_field_unittest.cc +++ b/src/google/protobuf/repeated_field_unittest.cc @@ -1386,6 +1386,7 @@ TEST(RepeatedPtrField, ClearedElements) { field.Clear(); EXPECT_EQ(field.ClearedCount(), 2); #ifndef PROTOBUF_FUTURE_REMOVE_CLEARED_API + PROTOBUF_IGNORE_DEPRECATION_START EXPECT_EQ(field.ReleaseCleared(), original); // Take ownership again. EXPECT_EQ(field.ClearedCount(), 1); EXPECT_NE(field.Add(), original); @@ -1397,6 +1398,7 @@ TEST(RepeatedPtrField, ClearedElements) { EXPECT_EQ(field.ClearedCount(), 1); EXPECT_EQ(field.Add(), original); EXPECT_EQ(field.ClearedCount(), 0); + PROTOBUF_IGNORE_DEPRECATION_STOP #endif // !PROTOBUF_FUTURE_REMOVE_CLEARED_API } diff --git a/third_party/abseil-cpp b/third_party/abseil-cpp index 273292d1cf..10b627fbe9 160000 --- a/third_party/abseil-cpp +++ b/third_party/abseil-cpp @@ -1 +1 @@ -Subproject commit 273292d1cfc0a94a65082ee350509af1d113344d +Subproject commit 10b627fbe944110d1672bdf3f8e23b5909721399 diff --git a/third_party/zlib.BUILD b/third_party/zlib.BUILD index 187bec2123..0b8fbbc143 100644 --- a/third_party/zlib.BUILD +++ b/third_party/zlib.BUILD @@ -60,6 +60,7 @@ cc_library( copts = select({ "@bazel_tools//src/conditions:windows": [], "//conditions:default": [ + "-Wno-deprecated-non-prototype", "-Wno-unused-variable", "-Wno-implicit-function-declaration", ],