From ac866861128b1f32c23e25566d06751b1f396adc Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Mon, 8 Jun 2026 06:04:16 -0400 Subject: [PATCH 1/3] Add regression coverage - overloaded initializer names --- .../MethodImportTests.swift | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/Tests/JExtractSwiftTests/MethodImportTests.swift b/Tests/JExtractSwiftTests/MethodImportTests.swift index 298ef0738..fb333a69d 100644 --- a/Tests/JExtractSwiftTests/MethodImportTests.swift +++ b/Tests/JExtractSwiftTests/MethodImportTests.swift @@ -668,6 +668,44 @@ final class MethodImportTests { ) } + let overloadedInitializers_interfaceFile = + """ + import Swift + + public class OverloadedInitializerClass { + public init(throwing: Swift.Bool) throws + public init?(doInit: Swift.Bool) + } + """ + + let overloadedFFMInitializers_interfaceFile = + """ + import Swift + + public class OverloadedFFMInitializerClass { + public init(throwing: Swift.Bool) throws + public init(doInit: Swift.Bool) + } + """ + + @Test("FFM: Overloaded initializers with same Java signature get suffixed Java names") + func ffm_overloaded_initializers_suffixed() throws { + try assertOutput( + input: overloadedFFMInitializers_interfaceFile, + .ffm, + .java, + swiftModuleName: "OverloadModule", + expectedChunks: [ + "public static OverloadedFFMInitializerClass initThrowing(boolean throwing, AllocatingSwiftArena swiftArena)", + "public static OverloadedFFMInitializerClass initDoInit(boolean doInit, AllocatingSwiftArena swiftArena)", + ], + notExpectedChunks: [ + "public static OverloadedFFMInitializerClass init(boolean throwing, AllocatingSwiftArena swiftArena)", + "public static OverloadedFFMInitializerClass init(boolean doInit, AllocatingSwiftArena swiftArena)", + ] + ) + } + // ==== ------------------------------------------------------------------- // MARK: JNI overloaded method disambiguation @@ -776,4 +814,22 @@ final class MethodImportTests { ] ) } + + @Test("JNI: Overloaded initializers with same Java signature get suffixed Java names") + func jni_overloaded_initializers_suffixed() throws { + try assertOutput( + input: overloadedInitializers_interfaceFile, + .jni, + .java, + swiftModuleName: "OverloadModule", + expectedChunks: [ + "public static OverloadedInitializerClass initThrowing(boolean throwing, SwiftArena swiftArena) throws Exception", + "public static java.util.Optional initDoInit(boolean doInit, SwiftArena swiftArena)", + ], + notExpectedChunks: [ + "public static OverloadedInitializerClass init(boolean throwing, SwiftArena swiftArena)", + "public static java.util.Optional init(boolean doInit, SwiftArena swiftArena)", + ] + ) + } } From 7a9f09cfd69af427c2371cfa6c0f3c4ceb73d401 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Tue, 9 Jun 2026 08:44:08 -0400 Subject: [PATCH 2/3] parameterize overloaded initializer regression test --- .../MethodImportTests.swift | 69 +++++++++---------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/Tests/JExtractSwiftTests/MethodImportTests.swift b/Tests/JExtractSwiftTests/MethodImportTests.swift index fb333a69d..8a70a676f 100644 --- a/Tests/JExtractSwiftTests/MethodImportTests.swift +++ b/Tests/JExtractSwiftTests/MethodImportTests.swift @@ -674,35 +674,45 @@ final class MethodImportTests { public class OverloadedInitializerClass { public init(throwing: Swift.Bool) throws - public init?(doInit: Swift.Bool) + public init(doInit: Swift.Bool) } """ - let overloadedFFMInitializers_interfaceFile = - """ - import Swift - - public class OverloadedFFMInitializerClass { - public init(throwing: Swift.Bool) throws - public init(doInit: Swift.Bool) + @Test("Overloaded initializers with same Java signature get suffixed Java names", arguments: [ + JExtractGenerationMode.jni, .ffm + ]) + func overloaded_initializers_suffixed(mode: JExtractGenerationMode) throws { + let expectedChunks: [String] + let notExpectedChunks: [String] + + switch mode { + case .ffm: + expectedChunks = [ + "public static OverloadedInitializerClass initThrowing(boolean throwing, AllocatingSwiftArena swiftArena)", + "public static OverloadedInitializerClass initDoInit(boolean doInit, AllocatingSwiftArena swiftArena)", + ] + notExpectedChunks = [ + "public static OverloadedInitializerClass init(boolean throwing, AllocatingSwiftArena swiftArena)", + "public static OverloadedInitializerClass init(boolean doInit, AllocatingSwiftArena swiftArena)", + ] + case .jni: + expectedChunks = [ + "public static OverloadedInitializerClass initThrowing(boolean throwing, SwiftArena swiftArena) throws Exception", + "public static OverloadedInitializerClass initDoInit(boolean doInit, SwiftArena swiftArena)", + ] + notExpectedChunks = [ + "public static OverloadedInitializerClass init(boolean throwing, SwiftArena swiftArena)", + "public static OverloadedInitializerClass init(boolean doInit, SwiftArena swiftArena)", + ] } - """ - @Test("FFM: Overloaded initializers with same Java signature get suffixed Java names") - func ffm_overloaded_initializers_suffixed() throws { try assertOutput( - input: overloadedFFMInitializers_interfaceFile, - .ffm, + input: overloadedInitializers_interfaceFile, + mode, .java, swiftModuleName: "OverloadModule", - expectedChunks: [ - "public static OverloadedFFMInitializerClass initThrowing(boolean throwing, AllocatingSwiftArena swiftArena)", - "public static OverloadedFFMInitializerClass initDoInit(boolean doInit, AllocatingSwiftArena swiftArena)", - ], - notExpectedChunks: [ - "public static OverloadedFFMInitializerClass init(boolean throwing, AllocatingSwiftArena swiftArena)", - "public static OverloadedFFMInitializerClass init(boolean doInit, AllocatingSwiftArena swiftArena)", - ] + expectedChunks: expectedChunks, + notExpectedChunks: notExpectedChunks ) } @@ -815,21 +825,4 @@ final class MethodImportTests { ) } - @Test("JNI: Overloaded initializers with same Java signature get suffixed Java names") - func jni_overloaded_initializers_suffixed() throws { - try assertOutput( - input: overloadedInitializers_interfaceFile, - .jni, - .java, - swiftModuleName: "OverloadModule", - expectedChunks: [ - "public static OverloadedInitializerClass initThrowing(boolean throwing, SwiftArena swiftArena) throws Exception", - "public static java.util.Optional initDoInit(boolean doInit, SwiftArena swiftArena)", - ], - notExpectedChunks: [ - "public static OverloadedInitializerClass init(boolean throwing, SwiftArena swiftArena)", - "public static java.util.Optional init(boolean doInit, SwiftArena swiftArena)", - ] - ) - } } From 1373899b78ca0e3ea7849a25386a7034b66c8e1f Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 10 Jun 2026 04:30:53 -0400 Subject: [PATCH 3/3] fix format --- Tests/JExtractSwiftTests/MethodImportTests.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Tests/JExtractSwiftTests/MethodImportTests.swift b/Tests/JExtractSwiftTests/MethodImportTests.swift index 8a70a676f..678693d00 100644 --- a/Tests/JExtractSwiftTests/MethodImportTests.swift +++ b/Tests/JExtractSwiftTests/MethodImportTests.swift @@ -678,9 +678,12 @@ final class MethodImportTests { } """ - @Test("Overloaded initializers with same Java signature get suffixed Java names", arguments: [ - JExtractGenerationMode.jni, .ffm - ]) + @Test( + "Overloaded initializers with same Java signature get suffixed Java names", + arguments: [ + JExtractGenerationMode.jni, .ffm, + ] + ) func overloaded_initializers_suffixed(mode: JExtractGenerationMode) throws { let expectedChunks: [String] let notExpectedChunks: [String]