diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift index 5e35ac91b..0d547febe 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift @@ -165,6 +165,10 @@ public func globalOverloaded(b: Int) { p("globalOverloaded(b: \(b))") } +public func globalOverloaded(_ c: Int) { + p("globalOverloaded(c: \(c))") +} + // ==== Internal helpers func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: String = #function) { diff --git a/Samples/SwiftJavaExtractFFMSampleApp/src/main/java/com/example/swift/HelloJava2Swift.java b/Samples/SwiftJavaExtractFFMSampleApp/src/main/java/com/example/swift/HelloJava2Swift.java index 62c29482a..8cebd316e 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/src/main/java/com/example/swift/HelloJava2Swift.java +++ b/Samples/SwiftJavaExtractFFMSampleApp/src/main/java/com/example/swift/HelloJava2Swift.java @@ -85,7 +85,7 @@ static void examples() { var origBytes = arena.allocateFrom("foobar"); var origDat = Data.init(origBytes, origBytes.byteSize(), arena); CallTraces.trace("origDat.count = " + origDat.getCount()); - + var retDat = MySwiftLibrary.globalReceiveReturnData(origDat, arena); retDat.withUnsafeBytes((retBytes) -> { var str = retBytes.getString(0); @@ -104,6 +104,7 @@ static void examples() { // Overloaded functions with label-based disambiguation MySwiftLibrary.globalOverloadedA(100); MySwiftLibrary.globalOverloadedB(200); + MySwiftLibrary.globalOverloaded(300); System.out.println("DONE."); } diff --git a/Sources/JExtractSwiftLib/JavaIdentifierFactory.swift b/Sources/JExtractSwiftLib/JavaIdentifierFactory.swift index 266e6bbec..2706d8ff9 100644 --- a/Sources/JExtractSwiftLib/JavaIdentifierFactory.swift +++ b/Sources/JExtractSwiftLib/JavaIdentifierFactory.swift @@ -81,11 +81,12 @@ package struct JavaIdentifierFactory { return "" default: guard needsSuffix(for: baseName) else { return "" } - let labels = decl.functionSignature.parameters - .compactMap { $0.argumentLabel } - // A parameterless function that still conflicts (e.g. with a property - // getter) gets a bare "_" so it compiles as a distinct Java method. - guard !labels.isEmpty else { return "_" } + if decl.functionSignature.parameters.isEmpty { + // A parameterless function that still conflicts (e.g. with a property + // getter) gets a bare "_" so it compiles as a distinct Java method. + return "_" + } + let labels = decl.functionSignature.parameters.compactMap(\.argumentLabel) // Join labels in camelCase: takeValue(a:) → takeValueA return labels.map { $0.prefix(1).uppercased() + $0.dropFirst() }.joined() } diff --git a/Tests/JExtractSwiftTests/MethodImportTests.swift b/Tests/JExtractSwiftTests/MethodImportTests.swift index e45e36426..298ef0738 100644 --- a/Tests/JExtractSwiftTests/MethodImportTests.swift +++ b/Tests/JExtractSwiftTests/MethodImportTests.swift @@ -530,6 +530,7 @@ final class MethodImportTests { public func takeValue(a: Swift.String) -> Swift.Int public func takeValue(b: Swift.String) -> Swift.Int + public func takeValue(_ c: Swift.String) -> Swift.Int public func uniqueFunc(x: Swift.Int) -> Swift.Int public func overloaded(a: Swift.Int) -> Swift.Int public func overloaded(a: Swift.String) -> Swift.Int @@ -551,6 +552,7 @@ final class MethodImportTests { expectedChunks: [ "public static long takeValueA(java.lang.String a)", "public static long takeValueB(java.lang.String b)", + "public static long takeValue(java.lang.String c)", ] ) } @@ -679,6 +681,7 @@ final class MethodImportTests { expectedChunks: [ "public static long takeValueA(java.lang.String a)", "public static long takeValueB(java.lang.String b)", + "public static long takeValue(java.lang.String c)", ] ) }