Clarify the public APIs of GeneratorNames helpers.

* FileJavaPackage - matches C++, no ambiguity
* FileClassName - matches C++ and our new style
* BytecodeClassName - returns the fully qualified java names using '$' separators for inner classes.  C++ will be similarly renamed from JavaClassName
* QualifiedClassName - returns the fully qualified java names using '.' sepators for inner classes.  C++ will be similarly renamed from ClassName

PiperOrigin-RevId: 814414729
This commit is contained in:
Mike Kruskal 2025-10-02 15:41:28 -07:00 committed by Copybara-Service
parent 6fe1497e79
commit cdb39db306
2 changed files with 76 additions and 12 deletions

View file

@ -236,22 +236,34 @@ public final class GeneratorNames {
return underscoresToCamelCase(input, /* capitalizeNextLetter= */ true);
}
/** Returns the fully qualified Java class name for the given message descriptor. */
public static String getClassName(Descriptor message) {
/**
* Returns the fully qualified Java bytecode class name for the given message descriptor.
*
* <p>Nested classes will use '$' as the separator, rather than '.'.
*/
public static String getBytecodeClassName(Descriptor message) {
// Replicates the logic for ClassName from immutable/names.h
return getClassFullName(
getClassNameWithoutPackage(message), message.getFile(), !getNestInFileClass(message));
}
/** Returns the fully qualified Java class name for the given enum descriptor. */
public static String getClassName(EnumDescriptor enm) {
/**
* Returns the fully qualified Java bytecode class name for the given enum descriptor.
*
* <p>Nested classes will use '$' as the separator, rather than '.'.
*/
public static String getBytecodeClassName(EnumDescriptor enm) {
// Replicates the logic for ClassName from immutable/names.h
return getClassFullName(
getClassNameWithoutPackage(enm), enm.getFile(), !getNestInFileClass(enm));
}
/** Returns the fully qualified Java class name for the given service descriptor. */
static String getClassName(ServiceDescriptor service) {
/**
* Returns the fully qualified Java bytecode class name for the given service descriptor.
*
* <p>Nested classes will use '$' as the separator, rather than '.'.
*/
static String getBytecodeClassName(ServiceDescriptor service) {
// Replicates the logic for ClassName from immutable/names.h
String suffix = "";
boolean isOwnFile = !getNestInFileClass(service);
@ -259,6 +271,37 @@ public final class GeneratorNames {
+ suffix;
}
static String getQualifiedFromBytecodeClassName(String bytecodeClassName) {
return bytecodeClassName.replace('$', '.');
}
/**
* Returns the fully qualified Java class name for the given message descriptor.
*
* <p>Nested classes will use '.' as the separator, rather than '$'.
*/
public static String getQualifiedClassName(Descriptor message) {
return getQualifiedFromBytecodeClassName(getBytecodeClassName(message));
}
/**
* Returns the fully qualified Java class name for the given enum descriptor.
*
* <p>Nested classes will use '.' as the separator, rather than '$'.
*/
public static String getQualifiedClassName(EnumDescriptor enm) {
return getQualifiedFromBytecodeClassName(getBytecodeClassName(enm));
}
/**
* Returns the fully qualified Java class name for the given service descriptor.
*
* <p>Nested classes will use '.' as the separator, rather than '$'.
*/
public static String getQualifiedClassName(ServiceDescriptor service) {
return getQualifiedFromBytecodeClassName(getBytecodeClassName(service));
}
private static String getClassFullName(
String nameWithoutPackage, FileDescriptor file, boolean isOwnFile) {
// Replicates the logic for ClassNameResolver::GetJavaClassFullName from immutable/names.cc

View file

@ -115,12 +115,19 @@ public final class GeneratorNamesTest {
}
@Test
public void getClassName_message(
public void getBytecodeClassName_message(
@TestParameter(valuesProvider = MessageClassNameProvider.class) MessageParameter parameter) {
assertThat(GeneratorNames.getClassName(parameter.descriptor))
assertThat(GeneratorNames.getBytecodeClassName(parameter.descriptor))
.isEqualTo(parameter.clazz.getName());
}
@Test
public void getQualifiedClassName_message(
@TestParameter(valuesProvider = MessageClassNameProvider.class) MessageParameter parameter) {
assertThat(GeneratorNames.getQualifiedClassName(parameter.descriptor))
.isEqualTo(parameter.clazz.getCanonicalName());
}
private static final class EnumClassNameProvider extends TestParameterValuesProvider {
@Override
public ImmutableList<EnumParameter> provideValues(TestParameterValuesProvider.Context context) {
@ -143,12 +150,19 @@ public final class GeneratorNamesTest {
}
@Test
public void getClassName_enum(
public void getBytecodeClassName_enum(
@TestParameter(valuesProvider = EnumClassNameProvider.class) EnumParameter parameter) {
assertThat(GeneratorNames.getClassName(parameter.descriptor))
assertThat(GeneratorNames.getBytecodeClassName(parameter.descriptor))
.isEqualTo(parameter.clazz.getName());
}
@Test
public void getQualifiedClassName_enum(
@TestParameter(valuesProvider = EnumClassNameProvider.class) EnumParameter parameter) {
assertThat(GeneratorNames.getQualifiedClassName(parameter.descriptor))
.isEqualTo(parameter.clazz.getCanonicalName());
}
private static final class ServiceClassNameProvider extends TestParameterValuesProvider {
@Override
public ImmutableList<ServiceParameter> provideValues(
@ -174,12 +188,19 @@ public final class GeneratorNamesTest {
}
@Test
public void getClassName_service(
public void getBytecodeClassName_service(
@TestParameter(valuesProvider = ServiceClassNameProvider.class) ServiceParameter parameter) {
assertThat(GeneratorNames.getClassName(parameter.descriptor))
assertThat(GeneratorNames.getBytecodeClassName(parameter.descriptor))
.isEqualTo(parameter.clazz.getName());
}
@Test
public void getQualifiedClassName_service(
@TestParameter(valuesProvider = ServiceClassNameProvider.class) ServiceParameter parameter) {
assertThat(GeneratorNames.getQualifiedClassName(parameter.descriptor))
.isEqualTo(parameter.clazz.getCanonicalName());
}
@Test
public void joinPackage() {
assertThat(GeneratorNames.joinPackage("com.google.foo", "Bar")).isEqualTo("com.google.foo.Bar");