Skip to content

Commit a9ad51f

Browse files
Breaking change: Upgrade return type of type_name() and cpp_type_name() from const char* to absl::string_view.
Part of the changes announced in https://protobuf.dev/news/2024-10-02/#descriptor-apis PiperOrigin-RevId: 705895312
1 parent a2ef571 commit a9ad51f

File tree

7 files changed

+142
-88
lines changed

7 files changed

+142
-88
lines changed

src/google/protobuf/descriptor.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -7375,7 +7375,7 @@ void DescriptorBuilder::CheckExtensionDeclarationFieldType(
73757375
const FieldDescriptor& field, const FieldDescriptorProto& proto,
73767376
absl::string_view type) {
73777377
if (had_errors_) return;
7378-
std::string actual_type = field.type_name();
7378+
std::string actual_type(field.type_name());
73797379
std::string expected_type(type);
73807380
if (field.message_type() || field.enum_type()) {
73817381
// Field message type descriptor can be in a partial state which will cause

src/google/protobuf/descriptor.h

+23-11
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,12 @@ typedef absl::string_view DescriptorStringView;
203203
typedef const std::string& DescriptorStringView;
204204
#endif
205205

206+
#if defined(PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE_TYPENAME)
207+
typedef absl::string_view DescriptorTypenameStringView;
208+
#else
209+
typedef const char* DescriptorTypenameStringView;
210+
#endif
211+
206212
class FlatAllocator;
207213

208214
class PROTOBUF_EXPORT LazyDescriptor {
@@ -873,11 +879,13 @@ class PROTOBUF_EXPORT FieldDescriptor : private internal::SymbolBase,
873879
// when parsing formats which prefer to use camel-case naming style.
874880
internal::DescriptorStringView camelcase_name() const;
875881

876-
Type type() const; // Declared type of this field.
877-
const char* type_name() const; // Name of the declared type.
878-
CppType cpp_type() const; // C++ type of this field.
879-
const char* cpp_type_name() const; // Name of the C++ type.
880-
Label label() const; // optional/required/repeated
882+
Type type() const; // Declared type of this field.
883+
// Name of the declared type.
884+
internal::DescriptorTypenameStringView type_name() const;
885+
CppType cpp_type() const; // C++ type of this field.
886+
// Name of the C++ type.
887+
internal::DescriptorTypenameStringView cpp_type_name() const;
888+
Label label() const; // optional/required/repeated
881889

882890
#ifndef SWIG
883891
CppStringType cpp_string_type() const; // The C++ string type of this field.
@@ -1028,10 +1036,10 @@ class PROTOBUF_EXPORT FieldDescriptor : private internal::SymbolBase,
10281036
static CppType TypeToCppType(Type type);
10291037

10301038
// Helper method to get the name of a Type.
1031-
static const char* TypeName(Type type);
1039+
static internal::DescriptorTypenameStringView TypeName(Type type);
10321040

10331041
// Helper method to get the name of a CppType.
1034-
static const char* CppTypeName(CppType cpp_type);
1042+
static internal::DescriptorTypenameStringView CppTypeName(CppType cpp_type);
10351043

10361044
// Return true iff [packed = true] is valid for fields of this type.
10371045
static inline bool IsTypePackable(Type field_type);
@@ -2897,27 +2905,31 @@ inline int MethodDescriptor::index() const {
28972905
return static_cast<int>(this - service_->methods_);
28982906
}
28992907

2900-
inline const char* FieldDescriptor::type_name() const {
2908+
inline internal::DescriptorTypenameStringView FieldDescriptor::type_name()
2909+
const {
29012910
return kTypeToName[type()];
29022911
}
29032912

29042913
inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const {
29052914
return kTypeToCppTypeMap[type()];
29062915
}
29072916

2908-
inline const char* FieldDescriptor::cpp_type_name() const {
2917+
inline internal::DescriptorTypenameStringView FieldDescriptor::cpp_type_name()
2918+
const {
29092919
return kCppTypeToName[kTypeToCppTypeMap[type()]];
29102920
}
29112921

29122922
inline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) {
29132923
return kTypeToCppTypeMap[type];
29142924
}
29152925

2916-
inline const char* FieldDescriptor::TypeName(Type type) {
2926+
inline internal::DescriptorTypenameStringView FieldDescriptor::TypeName(
2927+
Type type) {
29172928
return kTypeToName[type];
29182929
}
29192930

2920-
inline const char* FieldDescriptor::CppTypeName(CppType cpp_type) {
2931+
inline internal::DescriptorTypenameStringView FieldDescriptor::CppTypeName(
2932+
CppType cpp_type) {
29212933
return kCppTypeToName[cpp_type];
29222934
}
29232935

src/google/protobuf/descriptor_unittest.cc

+100-66
Original file line numberDiff line numberDiff line change
@@ -2637,7 +2637,7 @@ class MiscTest : public testing::Test {
26372637
}
26382638
}
26392639

2640-
const char* GetTypeNameForFieldType(FieldDescriptor::Type type) {
2640+
absl::string_view GetTypeNameForFieldType(FieldDescriptor::Type type) {
26412641
const FieldDescriptor* field = GetFieldDescriptorOfType(type);
26422642
return field != nullptr ? field->type_name() : "";
26432643
}
@@ -2648,7 +2648,7 @@ class MiscTest : public testing::Test {
26482648
: static_cast<FieldDescriptor::CppType>(0);
26492649
}
26502650

2651-
const char* GetCppTypeNameForFieldType(FieldDescriptor::Type type) {
2651+
absl::string_view GetCppTypeNameForFieldType(FieldDescriptor::Type type) {
26522652
const FieldDescriptor* field = GetFieldDescriptorOfType(type);
26532653
return field != nullptr ? field->cpp_type_name() : "";
26542654
}
@@ -2673,49 +2673,65 @@ TEST_F(MiscTest, TypeNames) {
26732673

26742674
typedef FieldDescriptor FD; // avoid ugly line wrapping
26752675

2676-
EXPECT_STREQ("double", GetTypeNameForFieldType(FD::TYPE_DOUBLE));
2677-
EXPECT_STREQ("float", GetTypeNameForFieldType(FD::TYPE_FLOAT));
2678-
EXPECT_STREQ("int64", GetTypeNameForFieldType(FD::TYPE_INT64));
2679-
EXPECT_STREQ("uint64", GetTypeNameForFieldType(FD::TYPE_UINT64));
2680-
EXPECT_STREQ("int32", GetTypeNameForFieldType(FD::TYPE_INT32));
2681-
EXPECT_STREQ("fixed64", GetTypeNameForFieldType(FD::TYPE_FIXED64));
2682-
EXPECT_STREQ("fixed32", GetTypeNameForFieldType(FD::TYPE_FIXED32));
2683-
EXPECT_STREQ("bool", GetTypeNameForFieldType(FD::TYPE_BOOL));
2684-
EXPECT_STREQ("string", GetTypeNameForFieldType(FD::TYPE_STRING));
2685-
EXPECT_STREQ("group", GetTypeNameForFieldType(FD::TYPE_GROUP));
2686-
EXPECT_STREQ("message", GetTypeNameForFieldType(FD::TYPE_MESSAGE));
2687-
EXPECT_STREQ("bytes", GetTypeNameForFieldType(FD::TYPE_BYTES));
2688-
EXPECT_STREQ("uint32", GetTypeNameForFieldType(FD::TYPE_UINT32));
2689-
EXPECT_STREQ("enum", GetTypeNameForFieldType(FD::TYPE_ENUM));
2690-
EXPECT_STREQ("sfixed32", GetTypeNameForFieldType(FD::TYPE_SFIXED32));
2691-
EXPECT_STREQ("sfixed64", GetTypeNameForFieldType(FD::TYPE_SFIXED64));
2692-
EXPECT_STREQ("sint32", GetTypeNameForFieldType(FD::TYPE_SINT32));
2693-
EXPECT_STREQ("sint64", GetTypeNameForFieldType(FD::TYPE_SINT64));
2676+
EXPECT_EQ(absl::string_view("double"),
2677+
GetTypeNameForFieldType(FD::TYPE_DOUBLE));
2678+
EXPECT_EQ(absl::string_view("float"),
2679+
GetTypeNameForFieldType(FD::TYPE_FLOAT));
2680+
EXPECT_EQ(absl::string_view("int64"),
2681+
GetTypeNameForFieldType(FD::TYPE_INT64));
2682+
EXPECT_EQ(absl::string_view("uint64"),
2683+
GetTypeNameForFieldType(FD::TYPE_UINT64));
2684+
EXPECT_EQ(absl::string_view("int32"),
2685+
GetTypeNameForFieldType(FD::TYPE_INT32));
2686+
EXPECT_EQ(absl::string_view("fixed64"),
2687+
GetTypeNameForFieldType(FD::TYPE_FIXED64));
2688+
EXPECT_EQ(absl::string_view("fixed32"),
2689+
GetTypeNameForFieldType(FD::TYPE_FIXED32));
2690+
EXPECT_EQ(absl::string_view("bool"), GetTypeNameForFieldType(FD::TYPE_BOOL));
2691+
EXPECT_EQ(absl::string_view("string"),
2692+
GetTypeNameForFieldType(FD::TYPE_STRING));
2693+
EXPECT_EQ(absl::string_view("group"),
2694+
GetTypeNameForFieldType(FD::TYPE_GROUP));
2695+
EXPECT_EQ(absl::string_view("message"),
2696+
GetTypeNameForFieldType(FD::TYPE_MESSAGE));
2697+
EXPECT_EQ(absl::string_view("bytes"),
2698+
GetTypeNameForFieldType(FD::TYPE_BYTES));
2699+
EXPECT_EQ(absl::string_view("uint32"),
2700+
GetTypeNameForFieldType(FD::TYPE_UINT32));
2701+
EXPECT_EQ(absl::string_view("enum"), GetTypeNameForFieldType(FD::TYPE_ENUM));
2702+
EXPECT_EQ(absl::string_view("sfixed32"),
2703+
GetTypeNameForFieldType(FD::TYPE_SFIXED32));
2704+
EXPECT_EQ(absl::string_view("sfixed64"),
2705+
GetTypeNameForFieldType(FD::TYPE_SFIXED64));
2706+
EXPECT_EQ(absl::string_view("sint32"),
2707+
GetTypeNameForFieldType(FD::TYPE_SINT32));
2708+
EXPECT_EQ(absl::string_view("sint64"),
2709+
GetTypeNameForFieldType(FD::TYPE_SINT64));
26942710
}
26952711

26962712
TEST_F(MiscTest, StaticTypeNames) {
26972713
// Test that correct type names are returned.
26982714

26992715
typedef FieldDescriptor FD; // avoid ugly line wrapping
27002716

2701-
EXPECT_STREQ("double", FD::TypeName(FD::TYPE_DOUBLE));
2702-
EXPECT_STREQ("float", FD::TypeName(FD::TYPE_FLOAT));
2703-
EXPECT_STREQ("int64", FD::TypeName(FD::TYPE_INT64));
2704-
EXPECT_STREQ("uint64", FD::TypeName(FD::TYPE_UINT64));
2705-
EXPECT_STREQ("int32", FD::TypeName(FD::TYPE_INT32));
2706-
EXPECT_STREQ("fixed64", FD::TypeName(FD::TYPE_FIXED64));
2707-
EXPECT_STREQ("fixed32", FD::TypeName(FD::TYPE_FIXED32));
2708-
EXPECT_STREQ("bool", FD::TypeName(FD::TYPE_BOOL));
2709-
EXPECT_STREQ("string", FD::TypeName(FD::TYPE_STRING));
2710-
EXPECT_STREQ("group", FD::TypeName(FD::TYPE_GROUP));
2711-
EXPECT_STREQ("message", FD::TypeName(FD::TYPE_MESSAGE));
2712-
EXPECT_STREQ("bytes", FD::TypeName(FD::TYPE_BYTES));
2713-
EXPECT_STREQ("uint32", FD::TypeName(FD::TYPE_UINT32));
2714-
EXPECT_STREQ("enum", FD::TypeName(FD::TYPE_ENUM));
2715-
EXPECT_STREQ("sfixed32", FD::TypeName(FD::TYPE_SFIXED32));
2716-
EXPECT_STREQ("sfixed64", FD::TypeName(FD::TYPE_SFIXED64));
2717-
EXPECT_STREQ("sint32", FD::TypeName(FD::TYPE_SINT32));
2718-
EXPECT_STREQ("sint64", FD::TypeName(FD::TYPE_SINT64));
2717+
EXPECT_EQ(absl::string_view("double"), FD::TypeName(FD::TYPE_DOUBLE));
2718+
EXPECT_EQ(absl::string_view("float"), FD::TypeName(FD::TYPE_FLOAT));
2719+
EXPECT_EQ(absl::string_view("int64"), FD::TypeName(FD::TYPE_INT64));
2720+
EXPECT_EQ(absl::string_view("uint64"), FD::TypeName(FD::TYPE_UINT64));
2721+
EXPECT_EQ(absl::string_view("int32"), FD::TypeName(FD::TYPE_INT32));
2722+
EXPECT_EQ(absl::string_view("fixed64"), FD::TypeName(FD::TYPE_FIXED64));
2723+
EXPECT_EQ(absl::string_view("fixed32"), FD::TypeName(FD::TYPE_FIXED32));
2724+
EXPECT_EQ(absl::string_view("bool"), FD::TypeName(FD::TYPE_BOOL));
2725+
EXPECT_EQ(absl::string_view("string"), FD::TypeName(FD::TYPE_STRING));
2726+
EXPECT_EQ(absl::string_view("group"), FD::TypeName(FD::TYPE_GROUP));
2727+
EXPECT_EQ(absl::string_view("message"), FD::TypeName(FD::TYPE_MESSAGE));
2728+
EXPECT_EQ(absl::string_view("bytes"), FD::TypeName(FD::TYPE_BYTES));
2729+
EXPECT_EQ(absl::string_view("uint32"), FD::TypeName(FD::TYPE_UINT32));
2730+
EXPECT_EQ(absl::string_view("enum"), FD::TypeName(FD::TYPE_ENUM));
2731+
EXPECT_EQ(absl::string_view("sfixed32"), FD::TypeName(FD::TYPE_SFIXED32));
2732+
EXPECT_EQ(absl::string_view("sfixed64"), FD::TypeName(FD::TYPE_SFIXED64));
2733+
EXPECT_EQ(absl::string_view("sint32"), FD::TypeName(FD::TYPE_SINT32));
2734+
EXPECT_EQ(absl::string_view("sint64"), FD::TypeName(FD::TYPE_SINT64));
27192735
}
27202736

27212737
TEST_F(MiscTest, CppTypes) {
@@ -2748,41 +2764,59 @@ TEST_F(MiscTest, CppTypeNames) {
27482764

27492765
typedef FieldDescriptor FD; // avoid ugly line wrapping
27502766

2751-
EXPECT_STREQ("double", GetCppTypeNameForFieldType(FD::TYPE_DOUBLE));
2752-
EXPECT_STREQ("float", GetCppTypeNameForFieldType(FD::TYPE_FLOAT));
2753-
EXPECT_STREQ("int64", GetCppTypeNameForFieldType(FD::TYPE_INT64));
2754-
EXPECT_STREQ("uint64", GetCppTypeNameForFieldType(FD::TYPE_UINT64));
2755-
EXPECT_STREQ("int32", GetCppTypeNameForFieldType(FD::TYPE_INT32));
2756-
EXPECT_STREQ("uint64", GetCppTypeNameForFieldType(FD::TYPE_FIXED64));
2757-
EXPECT_STREQ("uint32", GetCppTypeNameForFieldType(FD::TYPE_FIXED32));
2758-
EXPECT_STREQ("bool", GetCppTypeNameForFieldType(FD::TYPE_BOOL));
2759-
EXPECT_STREQ("string", GetCppTypeNameForFieldType(FD::TYPE_STRING));
2760-
EXPECT_STREQ("message", GetCppTypeNameForFieldType(FD::TYPE_GROUP));
2761-
EXPECT_STREQ("message", GetCppTypeNameForFieldType(FD::TYPE_MESSAGE));
2762-
EXPECT_STREQ("string", GetCppTypeNameForFieldType(FD::TYPE_BYTES));
2763-
EXPECT_STREQ("uint32", GetCppTypeNameForFieldType(FD::TYPE_UINT32));
2764-
EXPECT_STREQ("enum", GetCppTypeNameForFieldType(FD::TYPE_ENUM));
2765-
EXPECT_STREQ("int32", GetCppTypeNameForFieldType(FD::TYPE_SFIXED32));
2766-
EXPECT_STREQ("int64", GetCppTypeNameForFieldType(FD::TYPE_SFIXED64));
2767-
EXPECT_STREQ("int32", GetCppTypeNameForFieldType(FD::TYPE_SINT32));
2768-
EXPECT_STREQ("int64", GetCppTypeNameForFieldType(FD::TYPE_SINT64));
2767+
EXPECT_EQ(absl::string_view("double"),
2768+
GetCppTypeNameForFieldType(FD::TYPE_DOUBLE));
2769+
EXPECT_EQ(absl::string_view("float"),
2770+
GetCppTypeNameForFieldType(FD::TYPE_FLOAT));
2771+
EXPECT_EQ(absl::string_view("int64"),
2772+
GetCppTypeNameForFieldType(FD::TYPE_INT64));
2773+
EXPECT_EQ(absl::string_view("uint64"),
2774+
GetCppTypeNameForFieldType(FD::TYPE_UINT64));
2775+
EXPECT_EQ(absl::string_view("int32"),
2776+
GetCppTypeNameForFieldType(FD::TYPE_INT32));
2777+
EXPECT_EQ(absl::string_view("uint64"),
2778+
GetCppTypeNameForFieldType(FD::TYPE_FIXED64));
2779+
EXPECT_EQ(absl::string_view("uint32"),
2780+
GetCppTypeNameForFieldType(FD::TYPE_FIXED32));
2781+
EXPECT_EQ(absl::string_view("bool"),
2782+
GetCppTypeNameForFieldType(FD::TYPE_BOOL));
2783+
EXPECT_EQ(absl::string_view("string"),
2784+
GetCppTypeNameForFieldType(FD::TYPE_STRING));
2785+
EXPECT_EQ(absl::string_view("message"),
2786+
GetCppTypeNameForFieldType(FD::TYPE_GROUP));
2787+
EXPECT_EQ(absl::string_view("message"),
2788+
GetCppTypeNameForFieldType(FD::TYPE_MESSAGE));
2789+
EXPECT_EQ(absl::string_view("string"),
2790+
GetCppTypeNameForFieldType(FD::TYPE_BYTES));
2791+
EXPECT_EQ(absl::string_view("uint32"),
2792+
GetCppTypeNameForFieldType(FD::TYPE_UINT32));
2793+
EXPECT_EQ(absl::string_view("enum"),
2794+
GetCppTypeNameForFieldType(FD::TYPE_ENUM));
2795+
EXPECT_EQ(absl::string_view("int32"),
2796+
GetCppTypeNameForFieldType(FD::TYPE_SFIXED32));
2797+
EXPECT_EQ(absl::string_view("int64"),
2798+
GetCppTypeNameForFieldType(FD::TYPE_SFIXED64));
2799+
EXPECT_EQ(absl::string_view("int32"),
2800+
GetCppTypeNameForFieldType(FD::TYPE_SINT32));
2801+
EXPECT_EQ(absl::string_view("int64"),
2802+
GetCppTypeNameForFieldType(FD::TYPE_SINT64));
27692803
}
27702804

27712805
TEST_F(MiscTest, StaticCppTypeNames) {
27722806
// Test that correct CPP type names are returned.
27732807

27742808
typedef FieldDescriptor FD; // avoid ugly line wrapping
27752809

2776-
EXPECT_STREQ("int32", FD::CppTypeName(FD::CPPTYPE_INT32));
2777-
EXPECT_STREQ("int64", FD::CppTypeName(FD::CPPTYPE_INT64));
2778-
EXPECT_STREQ("uint32", FD::CppTypeName(FD::CPPTYPE_UINT32));
2779-
EXPECT_STREQ("uint64", FD::CppTypeName(FD::CPPTYPE_UINT64));
2780-
EXPECT_STREQ("double", FD::CppTypeName(FD::CPPTYPE_DOUBLE));
2781-
EXPECT_STREQ("float", FD::CppTypeName(FD::CPPTYPE_FLOAT));
2782-
EXPECT_STREQ("bool", FD::CppTypeName(FD::CPPTYPE_BOOL));
2783-
EXPECT_STREQ("enum", FD::CppTypeName(FD::CPPTYPE_ENUM));
2784-
EXPECT_STREQ("string", FD::CppTypeName(FD::CPPTYPE_STRING));
2785-
EXPECT_STREQ("message", FD::CppTypeName(FD::CPPTYPE_MESSAGE));
2810+
EXPECT_EQ(absl::string_view("int32"), FD::CppTypeName(FD::CPPTYPE_INT32));
2811+
EXPECT_EQ(absl::string_view("int64"), FD::CppTypeName(FD::CPPTYPE_INT64));
2812+
EXPECT_EQ(absl::string_view("uint32"), FD::CppTypeName(FD::CPPTYPE_UINT32));
2813+
EXPECT_EQ(absl::string_view("uint64"), FD::CppTypeName(FD::CPPTYPE_UINT64));
2814+
EXPECT_EQ(absl::string_view("double"), FD::CppTypeName(FD::CPPTYPE_DOUBLE));
2815+
EXPECT_EQ(absl::string_view("float"), FD::CppTypeName(FD::CPPTYPE_FLOAT));
2816+
EXPECT_EQ(absl::string_view("bool"), FD::CppTypeName(FD::CPPTYPE_BOOL));
2817+
EXPECT_EQ(absl::string_view("enum"), FD::CppTypeName(FD::CPPTYPE_ENUM));
2818+
EXPECT_EQ(absl::string_view("string"), FD::CppTypeName(FD::CPPTYPE_STRING));
2819+
EXPECT_EQ(absl::string_view("message"), FD::CppTypeName(FD::CPPTYPE_MESSAGE));
27862820
}
27872821

27882822
TEST_F(MiscTest, MessageType) {

src/google/protobuf/port_def.inc

+5
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ static_assert(PROTOBUF_ABSL_MIN(20230125, 3),
157157
#define PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE 1
158158
#endif
159159

160+
#ifdef PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE_TYPENAME
161+
#error PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE_TYPENAME was previously defined
162+
#endif
163+
#define PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE_TYPENAME 1
164+
160165
#ifdef PROTOBUF_ALWAYS_INLINE
161166
#error PROTOBUF_ALWAYS_INLINE was previously defined
162167
#endif

src/google/protobuf/port_undef.inc

+2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
#undef PROTOBUF_FUTURE_REMOVE_CREATEMESSAGE
7272
#endif
7373

74+
#undef PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE_TYPENAME
75+
7476
// Restore macros that may have been #undef'd in port_def.inc.
7577

7678
#ifdef PROTOBUF_DID_UNDEF_noreturn

src/google/protobuf/reflection_tester.cc

+5-5
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ void MapReflectionTester::SetMapFieldsViaMapReflection(Message* message) {
604604
}
605605

606606
void MapReflectionTester::GetMapValueViaMapReflection(
607-
Message* message, const std::string& field_name, const MapKey& map_key,
607+
Message* message, absl::string_view field_name, const MapKey& map_key,
608608
MapValueRef* map_val) {
609609
const Reflection* reflection = message->GetReflection();
610610
EXPECT_FALSE(reflection->InsertOrLookupMapValue(message, F(field_name),
@@ -618,25 +618,25 @@ void MapReflectionTester::DeleteMapValueViaMapReflection(
618618
}
619619

620620
Message* MapReflectionTester::GetMapEntryViaReflection(
621-
Message* message, const std::string& field_name, int index) {
621+
Message* message, absl::string_view field_name, int index) {
622622
const Reflection* reflection = message->GetReflection();
623623
return reflection->MutableRepeatedMessage(message, F(field_name), index);
624624
}
625625

626626
MapIterator MapReflectionTester::MapBegin(Message* message,
627-
const std::string& field_name) {
627+
absl::string_view field_name) {
628628
const Reflection* reflection = message->GetReflection();
629629
return reflection->MapBegin(message, F(field_name));
630630
}
631631

632632
MapIterator MapReflectionTester::MapEnd(Message* message,
633-
const std::string& field_name) {
633+
absl::string_view field_name) {
634634
const Reflection* reflection = message->GetReflection();
635635
return reflection->MapEnd(message, F(field_name));
636636
}
637637

638638
int MapReflectionTester::MapSize(const Message& message,
639-
const std::string& field_name) {
639+
absl::string_view field_name) {
640640
const Reflection* reflection = message.GetReflection();
641641
return reflection->MapSize(message, F(field_name));
642642
}

src/google/protobuf/reflection_tester.h

+6-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include <optional>
1212

13+
#include "absl/strings/string_view.h"
1314
#include "google/protobuf/map_field.h"
1415
#include "google/protobuf/message.h"
1516

@@ -40,16 +41,16 @@ class MapReflectionTester {
4041
void ExpectClearViaReflection(const Message& message);
4142
void ExpectClearViaReflectionIterator(Message* message);
4243
void GetMapValueViaMapReflection(Message* message,
43-
const std::string& field_name,
44+
absl::string_view field_name,
4445
const MapKey& map_key, MapValueRef* map_val);
4546
void DeleteMapValueViaMapReflection(Message* message,
4647
absl::string_view field_name,
4748
const MapKey& map_key);
4849
Message* GetMapEntryViaReflection(Message* message,
49-
const std::string& field_name, int index);
50-
MapIterator MapBegin(Message* message, const std::string& field_name);
51-
MapIterator MapEnd(Message* message, const std::string& field_name);
52-
int MapSize(const Message& message, const std::string& field_name);
50+
absl::string_view field_name, int index);
51+
MapIterator MapBegin(Message* message, absl::string_view field_name);
52+
MapIterator MapEnd(Message* message, absl::string_view field_name);
53+
int MapSize(const Message& message, absl::string_view field_name);
5354

5455
static std::optional<MapValueConstRef> LookupMapValue(
5556
const Reflection& reflection, const Message& message,

0 commit comments

Comments
 (0)