Prepare `MessageLite::GetTypeName` to be upgraded to return

`absl::string_view`.
This is a modernization of the API and performance improvement for all callers.

Currently gated behind opt-in macro
`PROTOBUF_TEMPORARY_ENABLE_STRING_VIEW_RETURN_TYPE` for users to test and prevent
issues when the breaking change happens.

PiperOrigin-RevId: 667616632
pull/17924/head
Protobuf Team Bot 7 months ago committed by Copybara-Service
parent 0d9baf367f
commit 30a8ef5008
  1. 21
      src/google/protobuf/lite_unittest.cc
  2. 4
      src/google/protobuf/message_lite.cc
  3. 8
      src/google/protobuf/message_lite.h
  4. 17
      src/google/protobuf/message_unittest.inc

@ -1363,9 +1363,10 @@ TEST(LiteTest, DynamicCastMessage) {
TEST(LiteTest, DynamicCastMessageInvalidReferenceType) { TEST(LiteTest, DynamicCastMessageInvalidReferenceType) {
CastType1 test_type_1; CastType1 test_type_1;
const MessageLite& test_type_1_pointer_const_ref = test_type_1; const MessageLite& test_type_1_pointer_const_ref = test_type_1;
ASSERT_DEATH(DynamicCastMessage<CastType2>(test_type_1_pointer_const_ref), ASSERT_DEATH(
"Cannot downcast " + test_type_1.GetTypeName() + " to " + DynamicCastMessage<CastType2>(test_type_1_pointer_const_ref),
CastType2::default_instance().GetTypeName()); absl::StrCat("Cannot downcast ", test_type_1.GetTypeName(), " to ",
CastType2::default_instance().GetTypeName()));
} }
#endif // GTEST_HAS_DEATH_TEST #endif // GTEST_HAS_DEATH_TEST
@ -1396,9 +1397,10 @@ TEST(LiteTest, DownCastMessageInvalidPointerType) {
MessageLite* test_type_1_pointer = &test_type_1; MessageLite* test_type_1_pointer = &test_type_1;
ASSERT_DEBUG_DEATH(DownCastMessage<CastType2>(test_type_1_pointer), ASSERT_DEBUG_DEATH(
"Cannot downcast " + test_type_1.GetTypeName() + " to " + DownCastMessage<CastType2>(test_type_1_pointer),
CastType2::default_instance().GetTypeName()); absl::StrCat("Cannot downcast ", test_type_1.GetTypeName(), " to ",
CastType2::default_instance().GetTypeName()));
} }
TEST(LiteTest, DownCastMessageInvalidReferenceType) { TEST(LiteTest, DownCastMessageInvalidReferenceType) {
@ -1406,9 +1408,10 @@ TEST(LiteTest, DownCastMessageInvalidReferenceType) {
MessageLite& test_type_1_pointer = test_type_1; MessageLite& test_type_1_pointer = test_type_1;
ASSERT_DEBUG_DEATH(DownCastMessage<CastType2>(test_type_1_pointer), ASSERT_DEBUG_DEATH(
"Cannot downcast " + test_type_1.GetTypeName() + " to " + DownCastMessage<CastType2>(test_type_1_pointer),
CastType2::default_instance().GetTypeName()); absl::StrCat("Cannot downcast ", test_type_1.GetTypeName(), " to ",
CastType2::default_instance().GetTypeName()));
} }
#endif // GTEST_HAS_DEATH_TEST #endif // GTEST_HAS_DEATH_TEST

@ -74,8 +74,8 @@ const char* MessageLite::_InternalParse(const char* ptr,
return internal::TcParser::ParseLoop(this, ptr, ctx, GetTcParseTable()); return internal::TcParser::ParseLoop(this, ptr, ctx, GetTcParseTable());
} }
std::string MessageLite::GetTypeName() const { internal::GetTypeNameReturnType MessageLite::GetTypeName() const {
return std::string(TypeId::Get(*this).name()); return internal::GetTypeNameReturnType(TypeId::Get(*this).name());
} }
absl::string_view TypeId::name() const { absl::string_view TypeId::name() const {

@ -190,6 +190,12 @@ inline int ToIntSize(size_t size) {
return static_cast<int>(size); return static_cast<int>(size);
} }
#if defined(PROTOBUF_FUTURE_STRING_VIEW_RETURN_TYPE)
using GetTypeNameReturnType = absl::string_view;
#else
using GetTypeNameReturnType = std::string;
#endif
// Default empty string object. Don't use this directly. Instead, call // Default empty string object. Don't use this directly. Instead, call
// GetEmptyString() to get the reference. This empty string is aligned with a // GetEmptyString() to get the reference. This empty string is aligned with a
// minimum alignment of 8 bytes to match the requirement of ArenaStringPtr. // minimum alignment of 8 bytes to match the requirement of ArenaStringPtr.
@ -240,7 +246,7 @@ class PROTOBUF_EXPORT MessageLite {
// Basic Operations ------------------------------------------------ // Basic Operations ------------------------------------------------
// Get the name of this message type, e.g. "foo.bar.BazProto". // Get the name of this message type, e.g. "foo.bar.BazProto".
std::string GetTypeName() const; internal::GetTypeNameReturnType GetTypeName() const;
// Construct a new instance of the same type. Ownership is passed to the // Construct a new instance of the same type. Ownership is passed to the
// caller. // caller.

@ -792,10 +792,11 @@ TEST(MESSAGE_TEST_NAME, DynamicCastMessage) {
TEST(MESSAGE_TEST_NAME, DynamicCastMessageInvalidReferenceType) { TEST(MESSAGE_TEST_NAME, DynamicCastMessageInvalidReferenceType) {
UNITTEST::TestAllTypes test_all_types; UNITTEST::TestAllTypes test_all_types;
const MessageLite& test_all_types_pointer_const_ref = test_all_types; const MessageLite& test_all_types_pointer_const_ref = test_all_types;
ASSERT_DEATH(DynamicCastMessage<UNITTEST::TestRequired>( ASSERT_DEATH(
test_all_types_pointer_const_ref), DynamicCastMessage<UNITTEST::TestRequired>(
"Cannot downcast " + test_all_types.GetTypeName() + " to " + test_all_types_pointer_const_ref),
UNITTEST::TestRequired::default_instance().GetTypeName()); absl::StrCat("Cannot downcast ", test_all_types.GetTypeName(), " to ",
UNITTEST::TestRequired::default_instance().GetTypeName()));
} }
TEST(MESSAGE_TEST_NAME, DownCastMessageValidType) { TEST(MESSAGE_TEST_NAME, DownCastMessageValidType) {
@ -829,8 +830,8 @@ TEST(MESSAGE_TEST_NAME, DownCastMessageInvalidPointerType) {
ASSERT_DEBUG_DEATH( ASSERT_DEBUG_DEATH(
DownCastMessage<UNITTEST::TestRequired>(test_all_types_pointer), DownCastMessage<UNITTEST::TestRequired>(test_all_types_pointer),
"Cannot downcast " + test_all_types.GetTypeName() + " to " + absl::StrCat("Cannot downcast ", test_all_types.GetTypeName(), " to ",
UNITTEST::TestRequired::default_instance().GetTypeName()); UNITTEST::TestRequired::default_instance().GetTypeName()));
} }
TEST(MESSAGE_TEST_NAME, DownCastMessageInvalidReferenceType) { TEST(MESSAGE_TEST_NAME, DownCastMessageInvalidReferenceType) {
@ -840,8 +841,8 @@ TEST(MESSAGE_TEST_NAME, DownCastMessageInvalidReferenceType) {
ASSERT_DEBUG_DEATH( ASSERT_DEBUG_DEATH(
DownCastMessage<UNITTEST::TestRequired>(test_all_types_ref), DownCastMessage<UNITTEST::TestRequired>(test_all_types_ref),
"Cannot downcast " + test_all_types.GetTypeName() + " to " + absl::StrCat("Cannot downcast ", test_all_types.GetTypeName(), " to ",
UNITTEST::TestRequired::default_instance().GetTypeName()); UNITTEST::TestRequired::default_instance().GetTypeName()));
} }
TEST(MESSAGE_TEST_NAME, MessageDebugStringMatchesBehindPointerAndLitePointer) { TEST(MESSAGE_TEST_NAME, MessageDebugStringMatchesBehindPointerAndLitePointer) {

Loading…
Cancel
Save