1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
diff --git a/src/google/protobuf/compiler/cpp/helpers.cc b/src/google/protobuf/compiler/cpp/helpers.cc
index f994743f5abca..a4eca1a472054 100644
--- a/src/google/protobuf/compiler/cpp/helpers.cc
+++ b/src/google/protobuf/compiler/cpp/helpers.cc
@@ -117,6 +117,14 @@ MessageKnownNonNullaryMethodsSnakeCase() {
return *methods;
}
+// TODO(crbug.com/332939935): This is used to allow generating an AnyLite proto
+// compatible with /third_party/medialite instead of checking in compiled
+// protobufs that complicate rolling.
+// Upstream should be fixed so that we don't need to generate a separate
+// AnyLite, then this patch/change should be dropped.
+constexpr absl::string_view kAnyLiteMessageName = "AnyLite";
+constexpr absl::string_view kAnyLiteProtoFile = "google/protobuf/any_lite.proto";
+
static const char* const kKeywordList[] = {
// clang-format off
"NULL",
@@ -1345,11 +1353,13 @@ bool IsStringOrMessage(const FieldDescriptor* field) {
}
bool IsAnyMessage(const FileDescriptor* descriptor) {
- return descriptor->name() == kAnyProtoFile;
+ return descriptor->name() == kAnyProtoFile ||
+ descriptor->name() == kAnyLiteProtoFile;
}
bool IsAnyMessage(const Descriptor* descriptor) {
- return descriptor->name() == kAnyMessageName &&
+ return (descriptor->name() == kAnyMessageName ||
+ descriptor->name() == kAnyLiteMessageName) &&
IsAnyMessage(descriptor->file());
}
diff --git a/src/google/protobuf/compiler/cpp/message.cc b/src/google/protobuf/compiler/cpp/message.cc
index 2566bec49c3ce..d5a7de27d06bf 100644
--- a/src/google/protobuf/compiler/cpp/message.cc
+++ b/src/google/protobuf/compiler/cpp/message.cc
@@ -2395,30 +2395,34 @@ void MessageGenerator::GenerateClassMethods(io::Printer* p) {
return;
}
if (IsAnyMessage(descriptor_)) {
- p->Emit({{"any_field_descriptor",
- [&] {
- if (!HasDescriptorMethods(descriptor_->file(), options_)) {
- return;
+ // TODO(crbug.com/332939935): Remove this workaround when the AnyLite patch
+ // can go away.
+ if (descriptor_->name() != "AnyLite") {
+ p->Emit({{"any_field_descriptor",
+ [&] {
+ if (!HasDescriptorMethods(descriptor_->file(), options_)) {
+ return;
+ }
+ p->Emit(
+ R"cc(
+ bool $classname$::GetAnyFieldDescriptors(
+ const $pb$::Message& message,
+ const $pb$::FieldDescriptor** type_url_field,
+ const $pb$::FieldDescriptor** value_field) {
+ return ::_pbi::GetAnyFieldDescriptors(message, type_url_field, value_field);
+ }
+ )cc");
+ }}},
+ R"cc(
+ $any_field_descriptor$;
+ bool $classname$::ParseAnyTypeUrl(
+ //~
+ ::absl::string_view type_url,
+ std::string* $nonnull$ full_type_name) {
+ return ::_pbi::ParseAnyTypeUrl(type_url, full_type_name);
}
- p->Emit(
- R"cc(
- bool $classname$::GetAnyFieldDescriptors(
- const $pb$::Message& message,
- const $pb$::FieldDescriptor** type_url_field,
- const $pb$::FieldDescriptor** value_field) {
- return ::_pbi::GetAnyFieldDescriptors(message, type_url_field, value_field);
- }
- )cc");
- }}},
- R"cc(
- $any_field_descriptor$;
- bool $classname$::ParseAnyTypeUrl(
- //~
- ::absl::string_view type_url,
- std::string* $nonnull$ full_type_name) {
- return ::_pbi::ParseAnyTypeUrl(type_url, full_type_name);
- }
- )cc");
+ )cc");
+ }
}
p->Emit(
{{"has_bit",
|