From 8a7fe220590354ec1facc46d80ef06ee7d970d84 Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Mon, 13 Apr 2026 16:30:31 +0200 Subject: [PATCH 01/13] Add dependent Java package mapping Pass dependency module-to-package metadata through the Swift-to-Java pipeline and use it when translating nominal Java types. This preserves package names for classes coming from dependent modules instead of emitting them without a package. --- .../JNISwift2JavaGenerator+JavaTranslation.swift | 9 ++++++--- .../JNI/JNISwift2JavaGenerator.swift | 3 +++ Sources/JExtractSwiftLib/Swift2Java.swift | 16 ++++++++++++---- .../SwiftJavaTool/Commands/JExtractCommand.swift | 4 ++-- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index 06c43062..eda26461 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -23,6 +23,7 @@ extension JNISwift2JavaGenerator { swiftModuleName: swiftModuleName, javaPackage: self.javaPackage, javaClassLookupTable: self.javaClassLookupTable, + dependentJavaPackages: self.dependentJavaPackages, knownTypes: SwiftKnownTypes(symbolTable: lookupContext.symbolTable), protocolWrappers: self.interfaceProtocolWrappers, logger: self.logger, @@ -64,6 +65,7 @@ extension JNISwift2JavaGenerator { swiftModuleName: swiftModuleName, javaPackage: self.javaPackage, javaClassLookupTable: self.javaClassLookupTable, + dependentJavaPackages: self.dependentJavaPackages, knownTypes: SwiftKnownTypes(symbolTable: lookupContext.symbolTable), protocolWrappers: self.interfaceProtocolWrappers, logger: self.logger, @@ -85,6 +87,7 @@ extension JNISwift2JavaGenerator { let swiftModuleName: String let javaPackage: String let javaClassLookupTable: JavaClassLookupTable + let dependentJavaPackages: [String: String] var knownTypes: SwiftKnownTypes let protocolWrappers: [ImportedNominalType: JavaInterfaceSwiftWrapper] let logger: Logger @@ -546,7 +549,7 @@ extension JNISwift2JavaGenerator { } let javaType = JavaType.class( - package: nil, + package: dependentJavaPackages[nominalType.nominalTypeDecl.moduleName], name: nominalTypeName, typeParameters: try nominalType.genericArguments?.map { swiftType in try translateGenericTypeParameter( @@ -982,7 +985,7 @@ extension JNISwift2JavaGenerator { } let javaType = JavaType.class( - package: nil, + package: dependentJavaPackages[nominalType.nominalTypeDecl.moduleName], name: nominalType.nominalTypeDecl.qualifiedName, typeParameters: try nominalType.genericArguments?.map { swiftType in try translateGenericTypeParameter( @@ -1131,7 +1134,7 @@ extension JNISwift2JavaGenerator { } ?? [] return .class( - package: nil, + package: dependentJavaPackages[nominalType.nominalTypeDecl.moduleName], name: nominalTypeName, typeParameters: typeParameters, ) diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift index 731b30ad..8eb933d7 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift @@ -32,6 +32,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { let lookupContext: SwiftTypeLookupContext let javaClassLookupTable: JavaClassLookupTable + let dependentJavaPackages: [String: String] var javaPackagePath: String { javaPackage.replacingOccurrences(of: ".", with: "/") @@ -75,6 +76,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { swiftOutputDirectory: String, javaOutputDirectory: String, javaClassLookupTable: JavaClassLookupTable, + dependentJavaPackages: [String: String], ) { self.config = config self.logger = Logger(label: "jni-generator", logLevel: translator.log.logLevel) @@ -84,6 +86,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { self.swiftOutputDirectory = swiftOutputDirectory self.javaOutputDirectory = javaOutputDirectory self.javaClassLookupTable = javaClassLookupTable + self.dependentJavaPackages = dependentJavaPackages self.lookupContext = translator.lookupContext // If we are forced to write empty files, construct the expected outputs. diff --git a/Sources/JExtractSwiftLib/Swift2Java.swift b/Sources/JExtractSwiftLib/Swift2Java.swift index 4db5ea22..3d4cd5f7 100644 --- a/Sources/JExtractSwiftLib/Swift2Java.swift +++ b/Sources/JExtractSwiftLib/Swift2Java.swift @@ -21,9 +21,9 @@ import SwiftSyntaxBuilder public struct SwiftToJava { let config: Configuration - let dependentConfigs: [Configuration] + let dependentConfigs: [(String?, Configuration)] - public init(config: Configuration, dependentConfigs: [Configuration]) { + public init(config: Configuration, dependentConfigs: [(String?, Configuration)]) { self.config = config self.dependentConfigs = dependentConfigs } @@ -95,12 +95,19 @@ public struct SwiftToJava { fatalError("Missing --output-java directory!") } - let wrappedJavaClassesLookupTable: JavaClassLookupTable = dependentConfigs.compactMap(\.classes).reduce(into: [:]) { + let wrappedJavaClassesLookupTable: JavaClassLookupTable = dependentConfigs.compactMap(\.1.classes).reduce(into: [:]) { for (canonicalName, javaClass) in $1 { $0[javaClass] = canonicalName } } + let dependentJavaPackages = dependentConfigs.reduce(into: [String: String]()) { partialResult, dependency in + guard let moduleName = dependency.0, let javaPackage = dependency.1.javaPackage, !javaPackage.isEmpty else { + return + } + partialResult[moduleName] = javaPackage + } + translator.dependenciesClasses = Array(wrappedJavaClassesLookupTable.keys) try translator.analyze() @@ -124,7 +131,8 @@ public struct SwiftToJava { javaPackage: config.javaPackage ?? "", swiftOutputDirectory: outputSwiftDirectory, javaOutputDirectory: outputJavaDirectory, - javaClassLookupTable: wrappedJavaClassesLookupTable + javaClassLookupTable: wrappedJavaClassesLookupTable, + dependentJavaPackages: dependentJavaPackages ) try generator.generate() diff --git a/Sources/SwiftJavaTool/Commands/JExtractCommand.swift b/Sources/SwiftJavaTool/Commands/JExtractCommand.swift index b1789cc3..dca0f8fa 100644 --- a/Sources/SwiftJavaTool/Commands/JExtractCommand.swift +++ b/Sources/SwiftJavaTool/Commands/JExtractCommand.swift @@ -178,7 +178,7 @@ extension SwiftJava.JExtractCommand { let dependentConfigs = try loadDependentConfigs(dependsOn: self.dependsOn) print("[debug][swift-java] Dependent configs: \(dependentConfigs.count)") - try jextractSwift(config: config, dependentConfigs: dependentConfigs.map(\.1)) + try jextractSwift(config: config, dependentConfigs: dependentConfigs) } /// Check if the configured modes are compatible, and fail if not @@ -207,7 +207,7 @@ struct IncompatibleModeError: Error { extension SwiftJava.JExtractCommand { func jextractSwift( config: Configuration, - dependentConfigs: [Configuration], + dependentConfigs: [(String?, Configuration)], ) throws { try SwiftToJava(config: config, dependentConfigs: dependentConfigs).run() } From 1f685e80394ce1554e414c66c3816bdaf66b66b3 Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Mon, 13 Apr 2026 18:44:15 +0200 Subject: [PATCH 02/13] chore: replaced tuple-based handling with proper structs --- .../JExtractSwiftPlugin.swift | 17 +++++++----- Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift | 17 +++++++----- Sources/JExtractSwiftLib/Swift2Java.swift | 12 ++++++--- .../Configuration.swift | 18 ++++++++++--- .../Commands/JExtractCommand.swift | 2 +- .../Commands/WrapJavaCommand.swift | 26 +++++++++++-------- 6 files changed, 60 insertions(+), 32 deletions(-) diff --git a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift index dd5d2f2b..ad74cb60 100644 --- a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift +++ b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift @@ -19,6 +19,10 @@ private let SwiftJavaConfigFileName = "swift-java.config" @main struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { + struct DependentConfigFile { + let swiftModuleName: String + let configURL: URL + } var pluginName: String = "swift-java" var verbose: Bool = getEnvironmentBool("SWIFT_JAVA_VERBOSE") @@ -78,11 +82,10 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { arguments += ["--static-build-config", resolvedURL.absoluteURL.path(percentEncoded: false)] } - let dependentConfigFilesArguments = dependentConfigFiles.flatMap { moduleAndConfigFile in - let (moduleName, configFile) = moduleAndConfigFile + let dependentConfigFilesArguments = dependentConfigFiles.flatMap { dependentConfigFile in return [ "--depends-on", - "\(moduleName)=\(configFile.path(percentEncoded: false))", + "\(dependentConfigFile.swiftModuleName)=\(dependentConfigFile.configURL.path(percentEncoded: false))", ] } arguments += dependentConfigFilesArguments @@ -270,8 +273,8 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { /// Find the manifest files from other swift-java executions in any targets /// this target depends on. - func searchForDependentConfigFiles(in target: any Target) -> [(String, URL)] { - var dependentConfigFiles = [(String, URL)]() + func searchForDependentConfigFiles(in target: any Target) -> [DependentConfigFile] { + var dependentConfigFiles: [DependentConfigFile] = [] func _searchForConfigFiles(in target: any Target) { // log("Search for config files in target: \(target.name)") @@ -286,7 +289,9 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { .path(percentEncoded: false) if FileManager.default.fileExists(atPath: dependencyConfigString) { - dependentConfigFiles.append((target.name, dependencyConfigURL)) + dependentConfigFiles.append( + DependentConfigFile(swiftModuleName: target.name, configURL: dependencyConfigURL) + ) } } diff --git a/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift b/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift index cc25cdd7..bc18f0fa 100644 --- a/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift +++ b/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift @@ -19,6 +19,10 @@ private let SwiftJavaConfigFileName = "swift-java.config" @main struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { + struct DependentConfigFile { + let swiftModuleName: String + let configURL: URL + } var pluginName: String = "swift-java" var verbose: Bool = getEnvironmentBool("SWIFT_JAVA_VERBOSE") @@ -46,7 +50,7 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { /// Find the manifest files from other swift-java executions in any targets /// this target depends on. - var dependentConfigFiles: [(String, URL)] = [] + var dependentConfigFiles: [DependentConfigFile] = [] func searchForConfigFiles(in target: any Target) { // log("Search for config files in target: \(target.name)") let dependencyURL = target.directoryURL @@ -60,7 +64,9 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { .path(percentEncoded: false) if FileManager.default.fileExists(atPath: dependencyConfigString) { - dependentConfigFiles.append((target.name, dependencyConfigURL)) + dependentConfigFiles.append( + DependentConfigFile(swiftModuleName: target.name, configURL: dependencyConfigURL) + ) } } @@ -223,12 +229,11 @@ extension SwiftJavaBuildToolPlugin { ] } - func argumentsDependedOnConfigs(_ dependentConfigFiles: [(String, URL)]) -> [String] { - dependentConfigFiles.flatMap { moduleAndConfigFile in - let (moduleName, configFile) = moduleAndConfigFile + func argumentsDependedOnConfigs(_ dependentConfigFiles: [DependentConfigFile]) -> [String] { + dependentConfigFiles.flatMap { dependentConfigFile in return [ "--depends-on", - "\(moduleName)=\(configFile.path(percentEncoded: false))", + "\(dependentConfigFile.swiftModuleName)=\(dependentConfigFile.configURL.path(percentEncoded: false))", ] } } diff --git a/Sources/JExtractSwiftLib/Swift2Java.swift b/Sources/JExtractSwiftLib/Swift2Java.swift index 3d4cd5f7..7389dace 100644 --- a/Sources/JExtractSwiftLib/Swift2Java.swift +++ b/Sources/JExtractSwiftLib/Swift2Java.swift @@ -21,9 +21,9 @@ import SwiftSyntaxBuilder public struct SwiftToJava { let config: Configuration - let dependentConfigs: [(String?, Configuration)] + let dependentConfigs: [DependentConfig] - public init(config: Configuration, dependentConfigs: [(String?, Configuration)]) { + public init(config: Configuration, dependentConfigs: [DependentConfig]) { self.config = config self.dependentConfigs = dependentConfigs } @@ -95,14 +95,18 @@ public struct SwiftToJava { fatalError("Missing --output-java directory!") } - let wrappedJavaClassesLookupTable: JavaClassLookupTable = dependentConfigs.compactMap(\.1.classes).reduce(into: [:]) { + let wrappedJavaClassesLookupTable: JavaClassLookupTable = dependentConfigs.compactMap(\.configuration.classes).reduce(into: [:]) { for (canonicalName, javaClass) in $1 { $0[javaClass] = canonicalName } } let dependentJavaPackages = dependentConfigs.reduce(into: [String: String]()) { partialResult, dependency in - guard let moduleName = dependency.0, let javaPackage = dependency.1.javaPackage, !javaPackage.isEmpty else { + guard + let moduleName = dependency.swiftModuleName, + let javaPackage = dependency.configuration.javaPackage, + !javaPackage.isEmpty + else { return } partialResult[moduleName] = javaPackage diff --git a/Sources/SwiftJavaConfigurationShared/Configuration.swift b/Sources/SwiftJavaConfigurationShared/Configuration.swift index 43ab445e..ea59eb4c 100644 --- a/Sources/SwiftJavaConfigurationShared/Configuration.swift +++ b/Sources/SwiftJavaConfigurationShared/Configuration.swift @@ -390,9 +390,19 @@ public func readConfiguration( } } -/// Load all dependent configs configured with `--depends-on` and return a list of -/// `(SwiftModuleName, Configuration)` tuples. -public func loadDependentConfigs(dependsOn: [String]) throws -> [(String?, Configuration)] { +/// Parsed dependent configuration provided via `--depends-on`. +public struct DependentConfig { + public let swiftModuleName: String? + public let configuration: Configuration + + public init(swiftModuleName: String?, configuration: Configuration) { + self.swiftModuleName = swiftModuleName + self.configuration = configuration + } +} + +/// Load all dependent configs configured with `--depends-on`. +public func loadDependentConfigs(dependsOn: [String]) throws -> [DependentConfig] { try dependsOn.map { dependentConfig in let equalLoc = dependentConfig.firstIndex(of: "=") @@ -406,7 +416,7 @@ public func loadDependentConfigs(dependsOn: [String]) throws -> [(String?, Confi let config = try readConfiguration(configPath: URL(fileURLWithPath: configFileName)) ?? Configuration() - return (swiftModuleName, config) + return DependentConfig(swiftModuleName: swiftModuleName, configuration: config) } } diff --git a/Sources/SwiftJavaTool/Commands/JExtractCommand.swift b/Sources/SwiftJavaTool/Commands/JExtractCommand.swift index dca0f8fa..cd58d1f1 100644 --- a/Sources/SwiftJavaTool/Commands/JExtractCommand.swift +++ b/Sources/SwiftJavaTool/Commands/JExtractCommand.swift @@ -207,7 +207,7 @@ struct IncompatibleModeError: Error { extension SwiftJava.JExtractCommand { func jextractSwift( config: Configuration, - dependentConfigs: [(String?, Configuration)], + dependentConfigs: [DependentConfig], ) throws { try SwiftToJava(config: config, dependentConfigs: dependentConfigs).run() } diff --git a/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift b/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift index 63c2fcb0..d9f25bb5 100644 --- a/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift +++ b/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift @@ -78,6 +78,10 @@ extension SwiftJava { } extension SwiftJava.WrapJavaCommand { + struct NamedDependentConfig { + let swiftModuleName: String + let configuration: Configuration + } mutating func runSwiftJavaCommand(config: inout Configuration) async throws { print("self.filterInclude = \(self.filterInclude)") @@ -101,23 +105,23 @@ extension SwiftJava.WrapJavaCommand { ) // Load all of the dependent configurations and associate them with Swift modules. - let dependentConfigs = try loadDependentConfigs(dependsOn: self.dependsOn).map { moduleName, config in - guard let moduleName else { + let dependentConfigs = try loadDependentConfigs(dependsOn: self.dependsOn).map { dependentConfig in + guard let moduleName = dependentConfig.swiftModuleName else { throw JavaToSwiftError.badConfigOption(self.dependsOn.joined(separator: " ")) } - return (moduleName, config) + return NamedDependentConfig(swiftModuleName: moduleName, configuration: dependentConfig.configuration) } print("[debug][swift-java] Dependent configs: \(dependentConfigs.count)") // Include classpath entries which libs we depend on require... - for (fromModule, config) in dependentConfigs { + for dependentConfig in dependentConfigs { print( - "[trace][swift-java] Add dependent config (\(fromModule)) classpath elements: \(config.classpathEntries.count)" + "[trace][swift-java] Add dependent config (\(dependentConfig.swiftModuleName)) classpath elements: \(dependentConfig.configuration.classpathEntries.count)" ) // TODO: may need to resolve the dependent configs rather than just get their configs // TODO: We should cache the resolved classpaths as well so we don't do it many times - for entry in config.classpathEntries { - print("[trace][swift-java] Add dependent config (\(fromModule)) classpath element: \(entry)") + for entry in dependentConfig.configuration.classpathEntries { + print("[trace][swift-java] Add dependent config (\(dependentConfig.swiftModuleName)) classpath element: \(entry)") classpathEntries.append(entry) } } @@ -137,7 +141,7 @@ extension SwiftJava.WrapJavaCommand { mutating func generateWrappers( config: Configuration, - dependentConfigs: [(String, Configuration)], + dependentConfigs: [NamedDependentConfig], environment: JNIEnvironment ) throws { let translator = JavaTranslator( @@ -163,10 +167,10 @@ extension SwiftJava.WrapJavaCommand { } // Note all of the dependent configurations. - for (swiftModuleName, dependentConfig) in dependentConfigs { + for dependentConfig in dependentConfigs { translator.addConfiguration( - dependentConfig, - forSwiftModule: swiftModuleName + dependentConfig.configuration, + forSwiftModule: dependentConfig.swiftModuleName ) } From 3f41bf705fe5f1ae4b95b6b87dedd164da0eeedf Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Mon, 13 Apr 2026 18:44:24 +0200 Subject: [PATCH 03/13] chore: replaced tuple-based handling with proper structs --- Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift index ad74cb60..28251aaf 100644 --- a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift +++ b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift @@ -19,6 +19,7 @@ private let SwiftJavaConfigFileName = "swift-java.config" @main struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { + struct DependentConfigFile { let swiftModuleName: String let configURL: URL From 20c9583ce558d27b60b0ddb92945ce860bde9a5f Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Mon, 13 Apr 2026 18:44:57 +0200 Subject: [PATCH 04/13] chore: fixed build test --- Tests/JExtractSwiftTests/Asserts/TextAssertions.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift b/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift index 1f10b2aa..a24ecc63 100644 --- a/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift +++ b/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift @@ -73,7 +73,8 @@ func assertOutput( javaPackage: "com.example.swift", swiftOutputDirectory: "/fake", javaOutputDirectory: "/fake", - javaClassLookupTable: javaClassLookupTable + javaClassLookupTable: javaClassLookupTable, + dependentJavaPackages: [:] ) switch renderKind { From 33c58c46f936c332f3161a5fa214fd73479f5bb7 Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Mon, 13 Apr 2026 21:58:26 +0200 Subject: [PATCH 05/13] Fix generated JNI code to use raw Java class references --- .../Convenience/JavaType+Extensions.swift | 13 +++++++++++++ .../JNISwift2JavaGenerator+JavaTranslation.swift | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift index 68ff5a6a..efa42c14 100644 --- a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift @@ -15,6 +15,19 @@ import SwiftJavaJNICore extension JavaType { + var rawClassReference: String { + switch self { + case .class(let package, let name, _): + if let package, !package.isEmpty { + return "\(package).\(name)" + } else { + return name + } + default: + return description + } + } + var jniTypeSignature: String { switch self { case .boolean: return "Z" diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index eda26461..8998699c 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -1515,7 +1515,7 @@ extension JNISwift2JavaGenerator { ], ), function: "toArray", - arguments: [.constant("\(javaType.className!)[]::new")] + arguments: [.constant("\(javaType.rawClassReference)[]::new")] ) ) @@ -1926,7 +1926,7 @@ extension JNISwift2JavaGenerator { } else { "" } - return "\(className).\(genericClause)wrapMemoryAddressUnsafe(\(inner), swiftArena)" + return "\(javaType.rawClassReference).\(genericClause)wrapMemoryAddressUnsafe(\(inner), swiftArena)" case .constructJavaClass(let inner, let javaType): let inner = inner.render(&printer, placeholder) From 3e6b6c8d68b1e03bb8fb73956ed600060280ea97 Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Tue, 14 Apr 2026 09:07:47 +0200 Subject: [PATCH 06/13] renamed dependentJavaPackages to ModuleJavaPackages --- .../JNI/JNISwift2JavaGenerator+JavaTranslation.swift | 12 ++++++------ .../JNI/JNISwift2JavaGenerator.swift | 9 ++++++--- Sources/JExtractSwiftLib/Swift2Java.swift | 4 ++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index 8998699c..582010fc 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -23,7 +23,7 @@ extension JNISwift2JavaGenerator { swiftModuleName: swiftModuleName, javaPackage: self.javaPackage, javaClassLookupTable: self.javaClassLookupTable, - dependentJavaPackages: self.dependentJavaPackages, + moduleJavaPackages: self.moduleJavaPackages, knownTypes: SwiftKnownTypes(symbolTable: lookupContext.symbolTable), protocolWrappers: self.interfaceProtocolWrappers, logger: self.logger, @@ -65,7 +65,7 @@ extension JNISwift2JavaGenerator { swiftModuleName: swiftModuleName, javaPackage: self.javaPackage, javaClassLookupTable: self.javaClassLookupTable, - dependentJavaPackages: self.dependentJavaPackages, + moduleJavaPackages: self.moduleJavaPackages, knownTypes: SwiftKnownTypes(symbolTable: lookupContext.symbolTable), protocolWrappers: self.interfaceProtocolWrappers, logger: self.logger, @@ -87,7 +87,7 @@ extension JNISwift2JavaGenerator { let swiftModuleName: String let javaPackage: String let javaClassLookupTable: JavaClassLookupTable - let dependentJavaPackages: [String: String] + let moduleJavaPackages: ModuleJavaPackages var knownTypes: SwiftKnownTypes let protocolWrappers: [ImportedNominalType: JavaInterfaceSwiftWrapper] let logger: Logger @@ -549,7 +549,7 @@ extension JNISwift2JavaGenerator { } let javaType = JavaType.class( - package: dependentJavaPackages[nominalType.nominalTypeDecl.moduleName], + package: moduleJavaPackages[nominalType.nominalTypeDecl.moduleName], name: nominalTypeName, typeParameters: try nominalType.genericArguments?.map { swiftType in try translateGenericTypeParameter( @@ -985,7 +985,7 @@ extension JNISwift2JavaGenerator { } let javaType = JavaType.class( - package: dependentJavaPackages[nominalType.nominalTypeDecl.moduleName], + package: moduleJavaPackages[nominalType.nominalTypeDecl.moduleName], name: nominalType.nominalTypeDecl.qualifiedName, typeParameters: try nominalType.genericArguments?.map { swiftType in try translateGenericTypeParameter( @@ -1134,7 +1134,7 @@ extension JNISwift2JavaGenerator { } ?? [] return .class( - package: dependentJavaPackages[nominalType.nominalTypeDecl.moduleName], + package: moduleJavaPackages[nominalType.nominalTypeDecl.moduleName], name: nominalTypeName, typeParameters: typeParameters, ) diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift index 8eb933d7..e1006a8c 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift @@ -20,6 +20,9 @@ import SwiftJavaJNICore /// the fully qualified canoical names. package typealias JavaClassLookupTable = [String: String] +/// A table where keys are Swift module names and the values are Java package names. +package typealias ModuleJavaPackages = [String: String] + package class JNISwift2JavaGenerator: Swift2JavaGenerator { let logger: Logger @@ -32,7 +35,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { let lookupContext: SwiftTypeLookupContext let javaClassLookupTable: JavaClassLookupTable - let dependentJavaPackages: [String: String] + let moduleJavaPackages: ModuleJavaPackages var javaPackagePath: String { javaPackage.replacingOccurrences(of: ".", with: "/") @@ -76,7 +79,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { swiftOutputDirectory: String, javaOutputDirectory: String, javaClassLookupTable: JavaClassLookupTable, - dependentJavaPackages: [String: String], + moduleJavaPackages: ModuleJavaPackages, ) { self.config = config self.logger = Logger(label: "jni-generator", logLevel: translator.log.logLevel) @@ -86,7 +89,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { self.swiftOutputDirectory = swiftOutputDirectory self.javaOutputDirectory = javaOutputDirectory self.javaClassLookupTable = javaClassLookupTable - self.dependentJavaPackages = dependentJavaPackages + self.moduleJavaPackages = moduleJavaPackages self.lookupContext = translator.lookupContext // If we are forced to write empty files, construct the expected outputs. diff --git a/Sources/JExtractSwiftLib/Swift2Java.swift b/Sources/JExtractSwiftLib/Swift2Java.swift index 7389dace..25084632 100644 --- a/Sources/JExtractSwiftLib/Swift2Java.swift +++ b/Sources/JExtractSwiftLib/Swift2Java.swift @@ -101,7 +101,7 @@ public struct SwiftToJava { } } - let dependentJavaPackages = dependentConfigs.reduce(into: [String: String]()) { partialResult, dependency in + let moduleJavaPackages = dependentConfigs.reduce(into: [String: String]()) { partialResult, dependency in guard let moduleName = dependency.swiftModuleName, let javaPackage = dependency.configuration.javaPackage, @@ -136,7 +136,7 @@ public struct SwiftToJava { swiftOutputDirectory: outputSwiftDirectory, javaOutputDirectory: outputJavaDirectory, javaClassLookupTable: wrappedJavaClassesLookupTable, - dependentJavaPackages: dependentJavaPackages + moduleJavaPackages: moduleJavaPackages ) try generator.generate() From 6d8fbf113c99551f6e538be9ec308ea847fb924c Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Tue, 14 Apr 2026 09:09:36 +0200 Subject: [PATCH 07/13] chore: renamed rawClassReference to fullyQualifiedName --- .../JExtractSwiftLib/Convenience/JavaType+Extensions.swift | 3 ++- .../JNI/JNISwift2JavaGenerator+JavaTranslation.swift | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift index efa42c14..3f79659a 100644 --- a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift @@ -15,7 +15,8 @@ import SwiftJavaJNICore extension JavaType { - var rawClassReference: String { + + var fullyQualifiedName: String { switch self { case .class(let package, let name, _): if let package, !package.isEmpty { diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index 582010fc..bf13ad71 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -1515,7 +1515,7 @@ extension JNISwift2JavaGenerator { ], ), function: "toArray", - arguments: [.constant("\(javaType.rawClassReference)[]::new")] + arguments: [.constant("\(javaType.fullyQualifiedName)[]::new")] ) ) @@ -1926,7 +1926,7 @@ extension JNISwift2JavaGenerator { } else { "" } - return "\(javaType.rawClassReference).\(genericClause)wrapMemoryAddressUnsafe(\(inner), swiftArena)" + return "\(javaType.fullyQualifiedName).\(genericClause)wrapMemoryAddressUnsafe(\(inner), swiftArena)" case .constructJavaClass(let inner, let javaType): let inner = inner.render(&printer, placeholder) From 385065468fc79f27298c560e68b0c51f74d808ff Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Tue, 14 Apr 2026 09:13:19 +0200 Subject: [PATCH 08/13] fix tests --- Tests/JExtractSwiftTests/Asserts/TextAssertions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift b/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift index a24ecc63..51d48d7c 100644 --- a/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift +++ b/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift @@ -74,7 +74,7 @@ func assertOutput( swiftOutputDirectory: "/fake", javaOutputDirectory: "/fake", javaClassLookupTable: javaClassLookupTable, - dependentJavaPackages: [:] + moduleJavaPackages: [:] ) switch renderKind { From c557a26709148df377e89ba40b7a94ab29f4e91e Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Tue, 14 Apr 2026 09:15:16 +0200 Subject: [PATCH 09/13] Resolved genereted chunks --- Tests/JExtractSwiftTests/JNI/JNISetTest.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Tests/JExtractSwiftTests/JNI/JNISetTest.swift b/Tests/JExtractSwiftTests/JNI/JNISetTest.swift index e654344d..8adec8d5 100644 --- a/Tests/JExtractSwiftTests/JNI/JNISetTest.swift +++ b/Tests/JExtractSwiftTests/JNI/JNISetTest.swift @@ -28,7 +28,7 @@ struct JNISetTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftSet f(SwiftArena swiftArena) { - return SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """, """ @@ -104,7 +104,7 @@ struct JNISetTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftSet f(org.swift.swiftkit.core.collections.SwiftSet set, SwiftArena swiftArena) { - return SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(set, "set must not be null").$memoryAddress()), swiftArena); + return org.swift.swiftkit.core.collections.SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(set, "set must not be null").$memoryAddress()), swiftArena); } """, """ @@ -145,7 +145,7 @@ struct JNISetTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftSet f(SwiftArena swiftArena) { - return SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -162,7 +162,7 @@ struct JNISetTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftSet f(SwiftArena swiftArena) { - return SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -179,7 +179,7 @@ struct JNISetTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftSet f(SwiftArena swiftArena) { - return SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -240,7 +240,7 @@ struct JNISetTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftSet f(org.swift.swiftkit.core.collections.SwiftSet set, java.lang.String element, SwiftArena swiftArena) { - return SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(set, "set must not be null").$memoryAddress(), element), swiftArena); + return org.swift.swiftkit.core.collections.SwiftSet.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(set, "set must not be null").$memoryAddress(), element), swiftArena); } """, """ From 664e2ca2d60a3579723293a084a322b9cd9f458e Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Tue, 14 Apr 2026 09:16:49 +0200 Subject: [PATCH 10/13] Resolved genereted chunks --- .../JNI/JNIDictionaryTest.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Tests/JExtractSwiftTests/JNI/JNIDictionaryTest.swift b/Tests/JExtractSwiftTests/JNI/JNIDictionaryTest.swift index 0690ee01..ebb8ed16 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIDictionaryTest.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIDictionaryTest.swift @@ -28,7 +28,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """, """ @@ -104,7 +104,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(org.swift.swiftkit.core.collections.SwiftDictionaryMap dict, SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(dict, "dict must not be null").$memoryAddress()), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(dict, "dict must not be null").$memoryAddress()), swiftArena); } """, """ @@ -142,7 +142,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(org.swift.swiftkit.core.collections.SwiftDictionaryMap dict, SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(dict, "dict must not be null").$memoryAddress()), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(dict, "dict must not be null").$memoryAddress()), swiftArena); } """, """ @@ -183,7 +183,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -200,7 +200,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -217,7 +217,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -234,7 +234,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena); } """ ] @@ -295,7 +295,7 @@ struct JNIDictionaryTest { expectedChunks: [ """ public static org.swift.swiftkit.core.collections.SwiftDictionaryMap f(org.swift.swiftkit.core.collections.SwiftDictionaryMap dict, java.lang.String key, long value, SwiftArena swiftArena) { - return SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(dict, "dict must not be null").$memoryAddress(), key, value), swiftArena); + return org.swift.swiftkit.core.collections.SwiftDictionaryMap.wrapMemoryAddressUnsafe(SwiftModule.$f(Objects.requireNonNull(dict, "dict must not be null").$memoryAddress(), key, value), swiftArena); } """, """ From 90870a0e3e76f51584e69765060c633b9ee834d4 Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Wed, 15 Apr 2026 12:04:49 +0200 Subject: [PATCH 11/13] chore: replaced fullyQualifiedName with the already available fullyQualifiedClassName! --- .../Convenience/JavaType+Extensions.swift | 13 ------------- .../JNISwift2JavaGenerator+JavaTranslation.swift | 4 ++-- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift index 3f79659a..53844559 100644 --- a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift @@ -16,19 +16,6 @@ import SwiftJavaJNICore extension JavaType { - var fullyQualifiedName: String { - switch self { - case .class(let package, let name, _): - if let package, !package.isEmpty { - return "\(package).\(name)" - } else { - return name - } - default: - return description - } - } - var jniTypeSignature: String { switch self { case .boolean: return "Z" diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index bf13ad71..41936ae7 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -1515,7 +1515,7 @@ extension JNISwift2JavaGenerator { ], ), function: "toArray", - arguments: [.constant("\(javaType.fullyQualifiedName)[]::new")] + arguments: [.constant("\(javaType.fullyQualifiedClassName!)[]::new")] ) ) @@ -1926,7 +1926,7 @@ extension JNISwift2JavaGenerator { } else { "" } - return "\(javaType.fullyQualifiedName).\(genericClause)wrapMemoryAddressUnsafe(\(inner), swiftArena)" + return "\(javaType.fullyQualifiedClassName!).\(genericClause)wrapMemoryAddressUnsafe(\(inner), swiftArena)" case .constructJavaClass(let inner, let javaType): let inner = inner.render(&printer, placeholder) From eb21a1fd3ec7af139561889da82823039bd555c5 Mon Sep 17 00:00:00 2001 From: Davide Sibilio Date: Wed, 15 Apr 2026 12:06:27 +0200 Subject: [PATCH 12/13] chore: removed let className --- .../JNI/JNISwift2JavaGenerator+JavaTranslation.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index 41936ae7..2ff2aa47 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -1917,7 +1917,7 @@ extension JNISwift2JavaGenerator { case .wrapMemoryAddressUnsafe(let inner, let javaType): let inner = inner.render(&printer, placeholder) - guard case .class(_, let className, let typeParameters) = javaType else { + guard case .class(_, _, let typeParameters) = javaType else { fatalError("\(javaType) is not class.") } let genericClause = From 7623c6e5efa67c649c644a3158c1aba36517c8f6 Mon Sep 17 00:00:00 2001 From: Konrad Malawski Date: Thu, 16 Apr 2026 12:19:58 +0900 Subject: [PATCH 13/13] fix formatting --- Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift | 2 +- Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift index 28251aaf..3fbfb231 100644 --- a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift +++ b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift @@ -84,7 +84,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { } let dependentConfigFilesArguments = dependentConfigFiles.flatMap { dependentConfigFile in - return [ + [ "--depends-on", "\(dependentConfigFile.swiftModuleName)=\(dependentConfigFile.configURL.path(percentEncoded: false))", ] diff --git a/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift b/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift index bc18f0fa..fb1f2251 100644 --- a/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift +++ b/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift @@ -231,7 +231,7 @@ extension SwiftJavaBuildToolPlugin { func argumentsDependedOnConfigs(_ dependentConfigFiles: [DependentConfigFile]) -> [String] { dependentConfigFiles.flatMap { dependentConfigFile in - return [ + [ "--depends-on", "\(dependentConfigFile.swiftModuleName)=\(dependentConfigFile.configURL.path(percentEncoded: false))", ]