diff --git a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift index fe737275..40cab064 100644 --- a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift +++ b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift @@ -71,6 +71,7 @@ extension FFMSwift2JavaGenerator { // === All types // We have to write all types to their corresponding output file that matches the file they were declared in, // because otherwise SwiftPM plugins will not pick up files apropriately -- we expect 1 output +SwiftJava.swift file for every input. + let filteredTypes: [String: ImportedNominalType] if let singleType = config.singleType { filteredTypes = self.analysis.importedTypes.filter { $0.key == singleType } diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift index e6b3c71b..05d4b5b9 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift @@ -42,13 +42,21 @@ extension JNISwift2JavaGenerator { } package func writeExportedJavaSources(_ printer: inout CodePrinter) throws { - let importedTypes = analysis.importedTypes.sorted(by: { (lhs, rhs) in lhs.key < rhs.key }) + let typesToExport: [(key: String, value: ImportedNominalType)] + if let singleType = config.singleType { + typesToExport = analysis.importedTypes + .filter { $0.key == singleType } + .sorted(by: { $0.key < $1.key }) + } else { + typesToExport = analysis.importedTypes + .sorted(by: { $0.key < $1.key }) + } var exportedFileNames: OrderedSet = [] // Each parent type goes into its own file // any nested types are printed inside the body as `static class` - for (_, ty) in importedTypes.filter({ _, type in type.parent == nil }) { + for (_, ty) in typesToExport.filter({ _, type in type.parent == nil }) { let filename = "\(ty.effectiveJavaSimpleName).java" logger.debug("Printing contents: \(filename)") printImportedNominal(&printer, ty) @@ -63,17 +71,20 @@ extension JNISwift2JavaGenerator { } } - let filename = "\(self.swiftModuleName).java" - logger.trace("Printing module class: \(filename)") - printModule(&printer) + // Skip the module-level .swift file when generating for a single type + if config.singleType == nil { + let filename = "\(self.swiftModuleName).java" + logger.trace("Printing module class: \(filename)") + printModule(&printer) - if let outputFile = try printer.writeContents( - outputDirectory: javaOutputDirectory, - javaPackagePath: javaPackagePath, - filename: filename, - ) { - exportedFileNames.append(outputFile.path(percentEncoded: false)) - logger.info("[swift-java] Generated: \(self.swiftModuleName).java (at \(outputFile))") + if let outputFile = try printer.writeContents( + outputDirectory: javaOutputDirectory, + javaPackagePath: javaPackagePath, + filename: filename, + ) { + exportedFileNames.append(outputFile.path(percentEncoded: false)) + logger.info("[swift-java] Generated: \(self.swiftModuleName).java (at \(outputFile))") + } } // Write java sources list file diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift index 544b1b5a..233a95df 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift @@ -57,24 +57,35 @@ extension JNISwift2JavaGenerator { let moduleFilename = "\(moduleFilenameBase).swift" do { - logger.trace("Printing swift module class: \(moduleFilename)") - - try printGlobalSwiftThunkSources(&printer) - - if let outputFile = try printer.writeContents( - outputDirectory: self.swiftOutputDirectory, - javaPackagePath: nil, - filename: moduleFilename, - ) { - logger.info("Generated: \(moduleFilenameBase.bold).swift (at \(outputFile.absoluteString))") - self.expectedOutputSwiftFileNames.remove(moduleFilename) + // Skip the module-level .swift file when generating for a single type + if config.singleType == nil { + logger.trace("Printing swift module class: \(moduleFilename)") + + try printGlobalSwiftThunkSources(&printer) + + if let outputFile = try printer.writeContents( + outputDirectory: self.swiftOutputDirectory, + javaPackagePath: nil, + filename: moduleFilename, + ) { + logger.info("Generated: \(moduleFilenameBase.bold).swift (at \(outputFile.absoluteString))") + self.expectedOutputSwiftFileNames.remove(moduleFilename) + } } // === All types // We have to write all types to their corresponding output file that matches the file they were declared in, // because otherwise SwiftPM plugins will not pick up files apropriately -- we expect 1 output +SwiftJava.swift file for every input. + + let filteredTypes: [String: ImportedNominalType] + if let singleType = config.singleType { + filteredTypes = self.analysis.importedTypes.filter { $0.key == singleType } + } else { + filteredTypes = self.analysis.importedTypes + } + for group: (key: String, value: [Dictionary.Element]) in Dictionary( - grouping: self.analysis.importedTypes, + grouping: filteredTypes, by: { $0.value.sourceFilePath }, ) { logger.warning("Writing types in file group: \(group.key): \(group.value.map(\.key))")