From 9c574c6e4ac98a837be426d7cebf2ed216cc8113 Mon Sep 17 00:00:00 2001 From: Wei Jun Kong Date: Fri, 24 Jul 2026 11:34:12 -0700 Subject: [PATCH] Align J2ObjC enum Swift naming with J2KT and update call-sites. When using @SwiftName on Java enums, J2ObjC used to swap the Swift names for the typedef NS_ENUM and the class interface compared to J2KT. This change updates J2ObjC to emit NS_SWIFT_NAME(Name_Enum) on typedef NS_ENUM and NS_SWIFT_NAME(Name) on class interface, matching J2KT. PiperOrigin-RevId: 953473715 --- .../devtools/j2objc/gen/TypeDeclarationGenerator.java | 6 +++--- .../devtools/j2objc/gen/ObjectiveCHeaderGeneratorTest.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/translator/src/main/java/com/google/devtools/j2objc/gen/TypeDeclarationGenerator.java b/translator/src/main/java/com/google/devtools/j2objc/gen/TypeDeclarationGenerator.java index 79179710a3..259f247dc2 100644 --- a/translator/src/main/java/com/google/devtools/j2objc/gen/TypeDeclarationGenerator.java +++ b/translator/src/main/java/com/google/devtools/j2objc/gen/TypeDeclarationGenerator.java @@ -224,6 +224,9 @@ private void printNativeEnum() { if (!printPrivateDeclarations()) { String swiftName = nameTable.getSwiftClassNameFromAnnotation(typeElement, true); if (swiftName != null) { + if (typeNode instanceof EnumDeclaration) { + swiftName = swiftName + "_Enum"; + } printf(" NS_SWIFT_NAME(%s)", swiftName); } } @@ -336,9 +339,6 @@ private void printSwiftName() { String swiftName = nameTable.getSwiftClassNameFromAnnotation(typeElement, true); if (swiftName != null) { - if (typeNode instanceof EnumDeclaration) { - swiftName = swiftName + "Class"; - } printf(" NS_SWIFT_NAME(%s)\n", swiftName); } } diff --git a/translator/src/test/java/com/google/devtools/j2objc/gen/ObjectiveCHeaderGeneratorTest.java b/translator/src/test/java/com/google/devtools/j2objc/gen/ObjectiveCHeaderGeneratorTest.java index 63b9fcf37c..f300af7d38 100644 --- a/translator/src/test/java/com/google/devtools/j2objc/gen/ObjectiveCHeaderGeneratorTest.java +++ b/translator/src/test/java/com/google/devtools/j2objc/gen/ObjectiveCHeaderGeneratorTest.java @@ -1789,8 +1789,8 @@ public void testSwiftNameEnumAnnotation() throws IOException { + "@SwiftName " + "public enum Color { RED, WHITE, BLUE }"; String translation = translateSourceFile(sourceContent, "Color", "com/foo/bar/Color.h"); + assertInTranslation(translation, "NS_SWIFT_NAME(Color_Enum)"); assertInTranslation(translation, "NS_SWIFT_NAME(Color)"); - assertInTranslation(translation, "NS_SWIFT_NAME(ColorClass)"); } public void testSwiftNameInterfaceSubtype() throws IOException { @@ -1810,7 +1810,7 @@ public void testSwiftNameInterfaceSubtype() throws IOException { + " public final class NestedBar {}" + "}"; String translation = translateSourceFile(sourceContent, "FooBar", "com/foo/bar/FooBar.h"); - assertInTranslation(translation, "NS_SWIFT_NAME(MyEnumClass)"); + assertInTranslation(translation, "NS_SWIFT_NAME(MyEnum_Enum)"); assertInTranslation(translation, "NS_SWIFT_NAME(MyEnum)"); assertInTranslation(translation, "NS_SWIFT_NAME(NestedBar)"); }