diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift index 252b938a..e2b2633f 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 b006ea91..fb506ab3 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 87a5d358..e3f3a696 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 347d2024..61740fe6 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,