From 931dd9f53cc335bffa3ee41a4474efcbf91eb30c Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 25 Feb 2026 16:14:28 +0900 Subject: [PATCH] Skip discriminator generation if enum has no cases --- .../Sources/MySwiftLibrary/NestedTypes.swift | 6 ++++++ .../src/test/java/com/example/swift/NestedTypesTest.java | 9 ++++++++- .../JNISwift2JavaGenerator+JavaBindingsPrinting.swift | 8 ++++++++ .../JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift | 4 ++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift index 252b938aa..e2b2633fb 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift @@ -45,3 +45,9 @@ public enum NestedEnum { public init() {} } } + +public enum NamespaceEnum { + public enum Nested { + public static func something() {} + } +} diff --git a/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/NestedTypesTest.java b/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/NestedTypesTest.java index b006ea914..fb506ab32 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/NestedTypesTest.java +++ b/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/NestedTypesTest.java @@ -42,4 +42,11 @@ void testStructInEnum() { assertTrue(one.isPresent()); } } -} \ No newline at end of file + + @Test + void testNamespaceEnum() { + try (var arena = SwiftArena.ofConfined()) { + NamespaceEnum.Nested.something(); + } + } +} diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift index 87a5d3586..e3f3a6962 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift @@ -360,6 +360,10 @@ extension JNISwift2JavaGenerator { } private func printEnumDiscriminator(_ printer: inout CodePrinter, _ decl: ImportedNominalType) { + if decl.cases.isEmpty { + return + } + printer.printBraceBlock("public enum Discriminator") { printer in printer.print( decl.cases.map { $0.name.uppercased() }.joined(separator: ",\n") @@ -374,6 +378,10 @@ extension JNISwift2JavaGenerator { } private func printEnumCaseInterface(_ printer: inout CodePrinter, _ decl: ImportedNominalType) { + if decl.cases.isEmpty { + return + } + printer.print("public sealed interface Case {}") printer.println() diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift index 347d20245..61740fe62 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift @@ -286,6 +286,10 @@ extension JNISwift2JavaGenerator { } private func printEnumDiscriminator(_ printer: inout CodePrinter, _ type: ImportedNominalType) { + if type.cases.isEmpty { + return + } + let selfPointerParam = JavaParameter(name: "selfPointer", type: .long) printCDecl( &printer,