Skip to content

Commit 527b2ab

Browse files
Add Kotlin class name helpers to names.h
This change exposes helper functions to generate the fully qualified Kotlin factory name for a protobuf message. PiperOrigin-RevId: 780246910
1 parent 25d7981 commit 527b2ab

5 files changed

Lines changed: 65 additions & 0 deletions

File tree

src/google/protobuf/compiler/java/name_resolver.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,19 @@ std::string ClassNameResolver::GetKotlinFactoryName(
354354
return IsForbiddenKotlin(name) ? absl::StrCat(name, "_") : name;
355355
}
356356

357+
std::string ClassNameResolver::GetFullyQualifiedKotlinFactoryName(
358+
const Descriptor* descriptor) {
359+
if (descriptor->containing_type() != nullptr) {
360+
return absl::StrCat(
361+
GetKotlinExtensionsClassName(descriptor->containing_type()), ".",
362+
GetKotlinFactoryName(descriptor));
363+
} else {
364+
return absl::StrCat(
365+
GetFileJavaPackage(descriptor->file(), /*immutable=*/true), ".",
366+
GetKotlinFactoryName(descriptor));
367+
}
368+
}
369+
357370
std::string ClassNameResolver::GetJavaImmutableClassName(
358371
const Descriptor* descriptor) {
359372
return GetJavaClassFullName(ClassNameWithoutPackage(descriptor, true),

src/google/protobuf/compiler/java/name_resolver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class PROTOC_EXPORT ClassNameResolver {
9999
std::string GetJavaImmutableClassName(const EnumDescriptor* descriptor);
100100
std::string GetJavaImmutableClassName(const ServiceDescriptor* descriptor);
101101
std::string GetKotlinFactoryName(const Descriptor* descriptor);
102+
std::string GetFullyQualifiedKotlinFactoryName(const Descriptor* descriptor);
102103
std::string GetKotlinExtensionsClassName(const Descriptor* descriptor);
103104
std::string GetKotlinExtensionsClassNameEscaped(const Descriptor* descriptor);
104105
std::string GetFileJavaPackage(const FileDescriptor* file, bool immutable);

src/google/protobuf/compiler/java/name_resolver_test.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ TEST_F(NameResolverTest, MultipleFilesMessageEdition2023) {
242242
PACKAGE_PREFIX "proto2_unittest.FooMessage");
243243
EXPECT_EQ(resolver.GetJavaImmutableClassName(message_descriptor),
244244
PACKAGE_PREFIX "proto2_unittest.FooMessage");
245+
EXPECT_EQ(resolver.GetFullyQualifiedKotlinFactoryName(message_descriptor),
246+
PACKAGE_PREFIX "proto2_unittest.fooMessage");
245247
}
246248

247249
TEST_F(NameResolverTest, SingleFileMessageEdition2023) {
@@ -262,6 +264,8 @@ TEST_F(NameResolverTest, SingleFileMessageEdition2023) {
262264
PACKAGE_PREFIX "proto2_unittest.Foo.FooMessage");
263265
EXPECT_EQ(resolver.GetJavaImmutableClassName(message_descriptor),
264266
PACKAGE_PREFIX "proto2_unittest.Foo$FooMessage");
267+
EXPECT_EQ(resolver.GetFullyQualifiedKotlinFactoryName(message_descriptor),
268+
PACKAGE_PREFIX "proto2_unittest.fooMessage");
265269
}
266270

267271
TEST_F(NameResolverTest, NestInFileClassMessageEdition2024) {
@@ -307,6 +311,14 @@ TEST_F(NameResolverTest, NestInFileClassMessageEdition2024) {
307311
EXPECT_EQ(resolver.GetJavaImmutableClassName(nested_in_unnested_message),
308312
PACKAGE_PREFIX
309313
"proto2_unittest.UnnestedMessage$NestedInUnnestedMessage");
314+
EXPECT_EQ(resolver.GetFullyQualifiedKotlinFactoryName(unnested_message),
315+
PACKAGE_PREFIX "proto2_unittest.unnestedMessage");
316+
EXPECT_EQ(resolver.GetFullyQualifiedKotlinFactoryName(nested_in_file_message),
317+
PACKAGE_PREFIX "proto2_unittest.nestedInFileClassMessage");
318+
EXPECT_EQ(
319+
resolver.GetFullyQualifiedKotlinFactoryName(nested_in_unnested_message),
320+
PACKAGE_PREFIX
321+
"proto2_unittest.UnnestedMessageKt.nestedInUnnestedMessage");
310322
}
311323

312324
TEST_F(NameResolverTest, MultipleFilesEnumEdition2023) {

src/google/protobuf/compiler/java/names.cc

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,23 @@ std::string UnderscoresToCamelCaseCheckReserved(const FieldDescriptor* field) {
160160
return name;
161161
}
162162

163+
PROTOC_EXPORT std::string KotlinFactoryName(const Descriptor* descriptor) {
164+
ClassNameResolver name_resolver;
165+
return name_resolver.GetKotlinFactoryName(descriptor);
166+
}
167+
168+
PROTOC_EXPORT std::string FullyQualifiedKotlinFactoryName(
169+
const Descriptor* descriptor) {
170+
ClassNameResolver name_resolver;
171+
return name_resolver.GetFullyQualifiedKotlinFactoryName(descriptor);
172+
}
173+
174+
PROTOC_EXPORT std::string KotlinExtensionsClassName(
175+
const Descriptor* descriptor) {
176+
ClassNameResolver name_resolver;
177+
return name_resolver.GetKotlinExtensionsClassName(descriptor);
178+
}
179+
163180

164181
} // namespace java
165182
} // namespace compiler

src/google/protobuf/compiler/java/names.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,28 @@ PROTOC_EXPORT std::string UnderscoresToCamelCaseCheckReserved(
132132
PROTOC_EXPORT std::string UnderscoresToCapitalizedCamelCase(
133133
const FieldDescriptor* field);
134134

135+
// Requires:
136+
// descriptor != NULL
137+
// Returns:
138+
// The unqualified Kotlin factory name.
139+
PROTOC_EXPORT std::string KotlinFactoryName(const Descriptor* descriptor);
140+
141+
// Requires:
142+
// descriptor != NULL
143+
// Returns:
144+
// The fully qualified Kotlin factory name.
145+
PROTOC_EXPORT std::string FullyQualifiedKotlinFactoryName(
146+
const Descriptor* descriptor);
147+
148+
// Requires:
149+
// descriptor != NULL
150+
// Returns:
151+
// The fully qualified Kotlin extensions class name. "Extensions" in this case
152+
// refers to "Extensions" the Kotlin concept, not "Extensions" the Protobuf
153+
// concept
154+
PROTOC_EXPORT std::string KotlinExtensionsClassName(
155+
const Descriptor* descriptor);
156+
135157

136158
} // namespace java
137159
} // namespace compiler

0 commit comments

Comments
 (0)