File: 0039-generate-mediapipe-anylite.patch

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (97 lines) | stat: -rw-r--r-- 4,104 bytes parent folder | download | duplicates (5)
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",