From a5412936c72901026ecbdf0439cea77aaf922dad Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 31 Jul 2026 16:13:43 -0700 Subject: [PATCH] Annotate extension names in hpb generator for Kythe metadata. PiperOrigin-RevId: 957381097 --- hpb_generator/gen_extensions.cc | 5 ++++- hpb_generator/tests/metadata_test.cc | 29 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/hpb_generator/gen_extensions.cc b/hpb_generator/gen_extensions.cc index 2938ef0408..2c7bea800d 100644 --- a/hpb_generator/gen_extensions.cc +++ b/hpb_generator/gen_extensions.cc @@ -22,6 +22,8 @@ namespace google { namespace protobuf { namespace hpb_generator { +using Sub = google::protobuf::io::Printer::Sub; + std::string ExtensionIdentifierBase(const google::protobuf::FieldDescriptor* ext) { assert(ext->is_extension()); std::string ext_scope; @@ -55,7 +57,8 @@ void WriteExtensionIdentifierHeader(const google::protobuf::FieldDescriptor* ext {"linkage", linkage}, {"mini_table_name", absl::StrCat(ExtensionIdentifierBase(ext), "_", ext->name(), "_ext")}, - {"extension_name", ResolveKeywordConflict(ext->name())}, + Sub("extension_name", ResolveKeywordConflict(ext->name())) + .AnnotatedAs(ext), {"extension_number", ext->number()}}, R"cc( inline $linkage$ constexpr ::hpb::internal::ExtensionIdentifier< diff --git a/hpb_generator/tests/metadata_test.cc b/hpb_generator/tests/metadata_test.cc index 502cb4985e..f8dc0ddd92 100644 --- a/hpb_generator/tests/metadata_test.cc +++ b/hpb_generator/tests/metadata_test.cc @@ -166,6 +166,35 @@ TEST_F(HpbMetadataTest, AnnotatesStringSemantics) { }); } +constexpr absl::string_view kExtensionTestFile = R"schema( + syntax = "proto2"; + package foo; + message Message { + extensions 100 to 199; + } + extend Message { + optional string ext_field = 101; + } +)schema"; + +TEST_F(HpbMetadataTest, AnnotatesExtensionSemantics) { + FileDescriptorProto file; + GeneratedCodeInfo info; + std::string hpb_h; + atu::AddFile("test.proto", kExtensionTestFile); + EXPECT_TRUE(CaptureMetadata("test.proto", file, hpb_h, info)); + + // Check annotations for `ext_field`. + std::vector field_path{ + FileDescriptorProto::kExtensionFieldNumber, + 0, + }; + ExpectAnnotationsForPathContain(info, "test.proto", hpb_h, field_path, + { + {"ext_field", Annotation::NONE}, + }); +} + TEST_F(HpbMetadataTest, GeneratesMetadataPragma) { FileDescriptorProto file; GeneratedCodeInfo info;