From 1d045c64c7d22ed74e28f5fc667607c34bf87202 Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Thu, 29 Feb 2024 19:58:49 -0800 Subject: [PATCH] EagerParseLazyField for const Message& PiperOrigin-RevId: 611681298 --- src/google/protobuf/extension_set.h | 2 ++ src/google/protobuf/internal_message_util.cc | 4 ++++ src/google/protobuf/internal_message_util_unittest.cc | 2 ++ src/google/protobuf/reflection_visit_field_info.h | 10 ++++++++++ src/google/protobuf/reflection_visit_fields.h | 1 - 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/google/protobuf/extension_set.h b/src/google/protobuf/extension_set.h index 9e5c7e5d3a..d9f25d5e2a 100644 --- a/src/google/protobuf/extension_set.h +++ b/src/google/protobuf/extension_set.h @@ -565,6 +565,8 @@ class PROTOBUF_EXPORT ExtensionSet { virtual LazyMessageExtension* New(Arena* arena) const = 0; virtual const MessageLite& GetMessage(const MessageLite& prototype, Arena* arena) const = 0; + virtual const MessageLite& GetMessageIgnoreUnparsed( + const MessageLite& prototype, Arena* arena) const = 0; virtual MessageLite* MutableMessage(const MessageLite& prototype, Arena* arena) = 0; virtual void SetAllocatedMessage(MessageLite* message, Arena* arena) = 0; diff --git a/src/google/protobuf/internal_message_util.cc b/src/google/protobuf/internal_message_util.cc index 5c3d934eb5..9f27f9376c 100644 --- a/src/google/protobuf/internal_message_util.cc +++ b/src/google/protobuf/internal_message_util.cc @@ -7,11 +7,15 @@ #include "google/protobuf/internal_message_util.h" +#include #include #include "google/protobuf/descriptor.h" #include "google/protobuf/map_field.h" #include "google/protobuf/message.h" +#include "google/protobuf/port.h" +#include "google/protobuf/reflection_visit_fields.h" + namespace google { namespace protobuf { diff --git a/src/google/protobuf/internal_message_util_unittest.cc b/src/google/protobuf/internal_message_util_unittest.cc index 5f3a010caf..e55d108b13 100644 --- a/src/google/protobuf/internal_message_util_unittest.cc +++ b/src/google/protobuf/internal_message_util_unittest.cc @@ -17,6 +17,8 @@ #include "absl/strings/string_view.h" #include "google/protobuf/map_unittest.pb.h" #include "google/protobuf/unittest.pb.h" +#include "google/protobuf/unittest_mset.pb.h" + namespace google { namespace protobuf { diff --git a/src/google/protobuf/reflection_visit_field_info.h b/src/google/protobuf/reflection_visit_field_info.h index 35ef18417f..97562336d2 100644 --- a/src/google/protobuf/reflection_visit_field_info.h +++ b/src/google/protobuf/reflection_visit_field_info.h @@ -210,6 +210,12 @@ struct DynamicExtensionInfoHelper { return DownCast( ext.lazymessage_value->GetMessage(prototype, arena)); } + static const Message& GetLazyMessageIgnoreUnparsed(const Extension& ext, + const Message& prototype, + Arena* arena) { + return DownCast( + ext.lazymessage_value->GetMessageIgnoreUnparsed(prototype, arena)); + } static Message& MutableLazyMessage(Extension& ext, const Message& prototype, Arena* arena) { return DownCast( @@ -658,6 +664,10 @@ struct LazyMessageDynamicExtensionInfo const Message& Get() const { return DynamicExtensionInfoHelper::GetLazyMessage(ext, prototype, arena); } + const Message& GetIgnoreUnparsed() const { + return DynamicExtensionInfoHelper::GetLazyMessageIgnoreUnparsed( + ext, prototype, arena); + } Message& Mutable() { return DynamicExtensionInfoHelper::MutableLazyMessage(ext, prototype, arena); diff --git a/src/google/protobuf/reflection_visit_fields.h b/src/google/protobuf/reflection_visit_fields.h index 06524924f3..e3178c5fbe 100644 --- a/src/google/protobuf/reflection_visit_fields.h +++ b/src/google/protobuf/reflection_visit_fields.h @@ -296,7 +296,6 @@ void ReflectionVisit::VisitFields(MessageT& message, CallbackFn&& func, auto& set = ExtensionSet(reflection, message); auto* extendee = reflection->descriptor_; auto* pool = reflection->descriptor_pool_; - auto* factory = reflection->message_factory_; auto* arena = message.GetArena(); set.ForEach([&](int number, auto& ext) {