From b6ff501291cd806de41c58d71014ae63f7fc631c Mon Sep 17 00:00:00 2001 From: CEL Dev Team Date: Mon, 8 Jun 2026 16:57:55 -0700 Subject: [PATCH] Migrate absl::visit to std::visit. PiperOrigin-RevId: 928845975 --- common/legacy_value.cc | 4 +- common/value.cc | 106 +++++++++++++++++------------------ internal/well_known_types.cc | 48 ++++++++-------- parser/BUILD | 1 - parser/parser.cc | 4 +- 5 files changed, 81 insertions(+), 82 deletions(-) diff --git a/common/legacy_value.cc b/common/legacy_value.cc index 7fbf16732..2bd231f94 100644 --- a/common/legacy_value.cc +++ b/common/legacy_value.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include "google/protobuf/struct.pb.h" @@ -34,7 +35,6 @@ #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "absl/types/span.h" -#include "absl/types/variant.h" #include "base/attribute.h" #include "common/casting.h" #include "common/kind.h" @@ -1003,7 +1003,7 @@ absl::Status LegacyStructValue::Qualify( const auto* access_apis = message_wrapper.legacy_type_info()->GetAccessApis(message_wrapper); if (ABSL_PREDICT_FALSE(access_apis == nullptr)) { - absl::string_view field_name = absl::visit( + absl::string_view field_name = std::visit( absl::Overload( [](const FieldSpecifier& field) -> absl::string_view { return field.name; diff --git a/common/value.cc b/common/value.cc index 1cd3f54e1..ceea352aa 100644 --- a/common/value.cc +++ b/common/value.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include "google/protobuf/struct.pb.h" #include "absl/base/attributes.h" @@ -37,7 +38,6 @@ #include "absl/strings/string_view.h" #include "absl/time/time.h" #include "absl/types/optional.h" -#include "absl/types/variant.h" #include "common/allocator.h" #include "common/memory.h" #include "common/optional_ref.h" @@ -933,7 +933,7 @@ void StringRepeatedFieldAccessor( ABSL_DCHECK_LT(index, reflection->FieldSize(*message, field)); std::string scratch; - absl::visit( + std::visit( absl::Overload( [&](absl::string_view string) { if (string.data() == scratch.data() && @@ -1000,7 +1000,7 @@ void BytesRepeatedFieldAccessor( ABSL_DCHECK_LT(index, reflection->FieldSize(*message, field)); std::string scratch; - absl::visit( + std::visit( absl::Overload( [&](absl::string_view string) { if (string.data() == scratch.data() && @@ -1154,49 +1154,49 @@ struct OwningWellKnownTypesValueVisitor { std::string* absl_nonnull scratch; Value operator()(well_known_types::BytesValue&& value) const { - return absl::visit(absl::Overload( - [&](absl::string_view string) -> BytesValue { - if (string.empty()) { - return BytesValue(); - } - if (scratch->data() == string.data() && - scratch->size() == string.size()) { - return BytesValue(arena, std::move(*scratch)); - } - return BytesValue(arena, string); - }, - [&](absl::Cord&& cord) -> BytesValue { - if (cord.empty()) { - return BytesValue(); - } - return BytesValue(arena, cord); - }), - well_known_types::AsVariant(std::move(value))); + return std::visit(absl::Overload( + [&](absl::string_view string) -> BytesValue { + if (string.empty()) { + return BytesValue(); + } + if (scratch->data() == string.data() && + scratch->size() == string.size()) { + return BytesValue(arena, std::move(*scratch)); + } + return BytesValue(arena, string); + }, + [&](absl::Cord&& cord) -> BytesValue { + if (cord.empty()) { + return BytesValue(); + } + return BytesValue(arena, cord); + }), + well_known_types::AsVariant(std::move(value))); } Value operator()(well_known_types::StringValue&& value) const { - return absl::visit(absl::Overload( - [&](absl::string_view string) -> StringValue { - if (string.empty()) { - return StringValue(); - } - if (scratch->data() == string.data() && - scratch->size() == string.size()) { - return StringValue(arena, std::move(*scratch)); - } - return StringValue(arena, string); - }, - [&](absl::Cord&& cord) -> StringValue { - if (cord.empty()) { - return StringValue(); - } - return StringValue(arena, cord); - }), - well_known_types::AsVariant(std::move(value))); + return std::visit(absl::Overload( + [&](absl::string_view string) -> StringValue { + if (string.empty()) { + return StringValue(); + } + if (scratch->data() == string.data() && + scratch->size() == string.size()) { + return StringValue(arena, std::move(*scratch)); + } + return StringValue(arena, string); + }, + [&](absl::Cord&& cord) -> StringValue { + if (cord.empty()) { + return StringValue(); + } + return StringValue(arena, cord); + }), + well_known_types::AsVariant(std::move(value))); } Value operator()(well_known_types::ListValue&& value) const { - return absl::visit( + return std::visit( absl::Overload( [&](well_known_types::ListValueConstRef value) -> ListValue { auto* cloned = value.get().New(arena); @@ -1215,7 +1215,7 @@ struct OwningWellKnownTypesValueVisitor { } Value operator()(well_known_types::Struct&& value) const { - return absl::visit( + return std::visit( absl::Overload( [&](well_known_types::StructConstRef value) -> MapValue { auto* cloned = value.get().New(arena); @@ -1254,7 +1254,7 @@ struct BorrowingWellKnownTypesValueVisitor { std::string* absl_nonnull scratch; Value operator()(well_known_types::BytesValue&& value) const { - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> BytesValue { if (string.data() == scratch->data() && @@ -1272,7 +1272,7 @@ struct BorrowingWellKnownTypesValueVisitor { } Value operator()(well_known_types::StringValue&& value) const { - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> StringValue { if (string.data() == scratch->data() && @@ -1290,7 +1290,7 @@ struct BorrowingWellKnownTypesValueVisitor { } Value operator()(well_known_types::ListValue&& value) const { - return absl::visit( + return std::visit( absl::Overload( [&](well_known_types::ListValueConstRef value) -> ParsedJsonListValue { @@ -1309,7 +1309,7 @@ struct BorrowingWellKnownTypesValueVisitor { } Value operator()(well_known_types::Struct&& value) const { - return absl::visit( + return std::visit( absl::Overload( [&](well_known_types::StructConstRef value) -> ParsedJsonMapValue { return ParsedJsonMapValue(&value.get(), @@ -1360,7 +1360,7 @@ Value Value::FromMessage( if (ABSL_PREDICT_FALSE(!status_or_adapted.ok())) { return ErrorValue(std::move(status_or_adapted).status()); } - return absl::visit( + return std::visit( absl::Overload(OwningWellKnownTypesValueVisitor{ /* .arena = */ arena, /* .scratch = */ &scratch}, [&](std::monostate) -> Value { @@ -1388,7 +1388,7 @@ Value Value::FromMessage( if (ABSL_PREDICT_FALSE(!status_or_adapted.ok())) { return ErrorValue(std::move(status_or_adapted).status()); } - return absl::visit( + return std::visit( absl::Overload(OwningWellKnownTypesValueVisitor{ /* .arena = */ arena, /* .scratch = */ &scratch}, [&](std::monostate) -> Value { @@ -1418,7 +1418,7 @@ Value Value::WrapMessage( if (ABSL_PREDICT_FALSE(!adapted_value.ok())) { return ErrorValue(std::move(adapted_value).status()); } - return absl::visit( + return std::visit( absl::Overload(BorrowingWellKnownTypesValueVisitor{ /* .message = */ message, /* .arena = */ arena, /* .scratch = */ &scratch}, @@ -1452,7 +1452,7 @@ Value Value::WrapMessageUnsafe( if (ABSL_PREDICT_FALSE(!adapted_value.ok())) { return ErrorValue(std::move(adapted_value).status()); } - return absl::visit( + return std::visit( absl::Overload(BorrowingWellKnownTypesValueVisitor{ /* .message = */ message, /* .arena = */ arena, /* .scratch = */ &scratch}, @@ -1552,7 +1552,7 @@ Value WrapFieldImpl( return BoolValue(reflection->GetBool(*message, field)); case google::protobuf::FieldDescriptor::TYPE_STRING: { std::string scratch; - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> StringValue { if (string.data() == scratch.data() && @@ -1590,7 +1590,7 @@ Value WrapFieldImpl( } case google::protobuf::FieldDescriptor::TYPE_BYTES: { std::string scratch; - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> BytesValue { if (string.data() == scratch.data() && @@ -1681,7 +1681,7 @@ Value WrapRepeatedFieldImpl( return BoolValue(reflection->GetRepeatedBool(*message, field, index)); case google::protobuf::FieldDescriptor::TYPE_STRING: { std::string scratch; - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> StringValue { if (string.data() == scratch.data() && @@ -1715,7 +1715,7 @@ Value WrapRepeatedFieldImpl( } case google::protobuf::FieldDescriptor::TYPE_BYTES: { std::string scratch; - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> BytesValue { if (string.data() == scratch.data() && diff --git a/internal/well_known_types.cc b/internal/well_known_types.cc index 02e50c3e3..5b2ff294b 100644 --- a/internal/well_known_types.cc +++ b/internal/well_known_types.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include "google/protobuf/any.pb.h" @@ -44,7 +45,6 @@ #include "absl/strings/string_view.h" #include "absl/strings/strip.h" #include "absl/time/time.h" -#include "absl/types/variant.h" #include "common/json.h" #include "common/memory.h" #include "extensions/protobuf/internal/map_reflection.h" @@ -85,7 +85,7 @@ FieldDescriptor::Label GetFieldLabel( absl::string_view FlatStringValue( const StringValue& value ABSL_ATTRIBUTE_LIFETIME_BOUND, std::string& scratch ABSL_ATTRIBUTE_LIFETIME_BOUND) { - return absl::visit( + return std::visit( absl::Overload( [](absl::string_view string) -> absl::string_view { return string; }, [&](const absl::Cord& cord) -> absl::string_view { @@ -101,7 +101,7 @@ absl::string_view FlatStringValue( StringValue CopyStringValue(const StringValue& value, std::string& scratch ABSL_ATTRIBUTE_LIFETIME_BOUND) { - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> StringValue { if (string.data() != scratch.data()) { @@ -116,7 +116,7 @@ StringValue CopyStringValue(const StringValue& value, BytesValue CopyBytesValue(const BytesValue& value, std::string& scratch ABSL_ATTRIBUTE_LIFETIME_BOUND) { - return absl::visit( + return std::visit( absl::Overload( [&](absl::string_view string) -> BytesValue { if (string.data() != scratch.data()) { @@ -381,18 +381,18 @@ absl::Status CheckMapField(const FieldDescriptor* absl_nonnull field) { } // namespace bool StringValue::ConsumePrefix(absl::string_view prefix) { - return absl::visit(absl::Overload( - [&](absl::string_view& value) { - return absl::ConsumePrefix(&value, prefix); - }, - [&](absl::Cord& cord) { - if (cord.StartsWith(prefix)) { - cord.RemovePrefix(prefix.size()); - return true; - } - return false; - }), - AsVariant(*this)); + return std::visit(absl::Overload( + [&](absl::string_view& value) { + return absl::ConsumePrefix(&value, prefix); + }, + [&](absl::Cord& cord) { + if (cord.StartsWith(prefix)) { + cord.RemovePrefix(prefix.size()); + return true; + } + return false; + }), + AsVariant(*this)); } StringValue GetStringField(const google::protobuf::Reflection* absl_nonnull reflection, @@ -1980,14 +1980,14 @@ absl::StatusOr> AdaptAny( } BytesValue value = reflection.GetValue(*to_unwrap, value_scratch); Unique unpacked = WrapUnique(prototype->New(arena), arena); - const bool ok = absl::visit(absl::Overload( - [&](absl::string_view string) -> bool { - return unpacked->ParseFromString(string); - }, - [&](const absl::Cord& cord) -> bool { - return unpacked->ParseFromString(cord); - }), - AsVariant(value)); + const bool ok = std::visit(absl::Overload( + [&](absl::string_view string) -> bool { + return unpacked->ParseFromString(string); + }, + [&](const absl::Cord& cord) -> bool { + return unpacked->ParseFromString(cord); + }), + AsVariant(value)); if (!ok) { return absl::InvalidArgumentError(absl::StrCat( "failed to unpack protocol buffer message: ", type_url_view)); diff --git a/parser/BUILD b/parser/BUILD index 6650d9fe9..f8d3af4b9 100644 --- a/parser/BUILD +++ b/parser/BUILD @@ -67,7 +67,6 @@ cc_library( "@com_google_absl//absl/strings:str_format", "@com_google_absl//absl/types:optional", "@com_google_absl//absl/types:span", - "@com_google_absl//absl/types:variant", "@com_google_cel_spec//proto/cel/expr:syntax_cc_proto", ], ) diff --git a/parser/parser.cc b/parser/parser.cc index 6c6434319..631883e0f 100644 --- a/parser/parser.cc +++ b/parser/parser.cc @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "cel/expr/syntax.pb.h" @@ -51,7 +52,6 @@ #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "absl/types/span.h" -#include "absl/types/variant.h" #include "antlr4-runtime.h" #include "common/ast.h" #include "common/ast/expr_proto.h" @@ -257,7 +257,7 @@ class ParserMacroExprFactory final : public MacroExprFactory { if (auto it = macro_calls_.find(expr.id()); it != macro_calls_.end()) { return NewUnspecified(expr.id()); } - return absl::visit( + return std::visit( absl::Overload( [this, &expr](const UnspecifiedExpr&) -> Expr { return NewUnspecified(expr.id());