From 77607a1f31ee1efb1799a04bd3853d75bec41e9d Mon Sep 17 00:00:00 2001 From: Iceman Date: Mon, 11 May 2026 15:27:35 +0900 Subject: [PATCH 1/2] Add example of JNI overloads --- .../Sources/MySwiftLibrary/MySwiftLibrary.swift | 12 ++++++++++++ .../java/com/example/swift/MySwiftLibraryTest.java | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift index 260c2649d..fc294b5a0 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift @@ -64,6 +64,18 @@ public func returnLargestUnsignedByte() -> UInt8 { UInt8.max } +public func globalOverloaded(a: Int) -> Int { + a + 1 +} + +public func globalOverloaded(b: Int) -> Int { + b + 2 +} + +public func globalOverloaded(_ c: Int) -> Int { + c + 3 +} + // ==== Internal helpers func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: String = #function) { diff --git a/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/MySwiftLibraryTest.java b/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/MySwiftLibraryTest.java index 27e1aa95f..22232b620 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/MySwiftLibraryTest.java +++ b/Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/MySwiftLibraryTest.java @@ -78,4 +78,11 @@ void returnUnsignedByte_negative() { void returnLargestUnsignedByte() { assertEquals(-1, MySwiftLibrary.returnLargestUnsignedByte()); } -} \ No newline at end of file + + @Test + void labeledOverloads() { + assertEquals(101, MySwiftLibrary.globalOverloadedA(100)); + assertEquals(202, MySwiftLibrary.globalOverloadedB(200)); + assertEquals(303, MySwiftLibrary.globalOverloaded(300)); + } +} From e2a24588ca78d3173d54bc1d61c2c24c62a07408 Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 13 May 2026 15:22:45 +0900 Subject: [PATCH 2/2] Fix labeled overloading not detected --- .../JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift index 23269bc77..9cae321d2 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift @@ -277,6 +277,10 @@ extension JNISwift2JavaGenerator { private func printGlobalSwiftThunkSources(_ printer: inout CodePrinter) throws { printHeader(&printer) + self.currentJavaIdentifiers = JavaIdentifierFactory( + self.analysis.importedGlobalFuncs + self.analysis.importedGlobalVariables + ) + for decl in analysis.importedGlobalFuncs { printSwiftFunctionThunk(&printer, decl) printer.println() @@ -290,9 +294,12 @@ extension JNISwift2JavaGenerator { private func printNominalTypeThunks(_ printer: inout CodePrinter, _ type: ImportedNominalType) throws { printHeader(&printer) - printer.println() + self.currentJavaIdentifiers = JavaIdentifierFactory( + type.initializers + type.variables + type.methods + ) + switch type.swiftNominal.kind { case .actor, .class, .enum, .struct: printConcreteTypeThunks(&printer, type)