EagerParseLazyField for const Message&

PiperOrigin-RevId: 611681298
pull/15966/head
Protobuf Team Bot 12 months ago committed by Copybara-Service
parent 45b881baa1
commit 1d045c64c7
  1. 2
      src/google/protobuf/extension_set.h
  2. 4
      src/google/protobuf/internal_message_util.cc
  3. 2
      src/google/protobuf/internal_message_util_unittest.cc
  4. 10
      src/google/protobuf/reflection_visit_field_info.h
  5. 1
      src/google/protobuf/reflection_visit_fields.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;

@ -7,11 +7,15 @@
#include "google/protobuf/internal_message_util.h"
#include <queue>
#include <vector>
#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 {

@ -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 {

@ -210,6 +210,12 @@ struct DynamicExtensionInfoHelper {
return DownCast<const Message&>(
ext.lazymessage_value->GetMessage(prototype, arena));
}
static const Message& GetLazyMessageIgnoreUnparsed(const Extension& ext,
const Message& prototype,
Arena* arena) {
return DownCast<const Message&>(
ext.lazymessage_value->GetMessageIgnoreUnparsed(prototype, arena));
}
static Message& MutableLazyMessage(Extension& ext, const Message& prototype,
Arena* arena) {
return DownCast<Message&>(
@ -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);

@ -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) {

Loading…
Cancel
Save