@@ -40,6 +40,10 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin {
4040 }
4141
4242 let sourceDir = target. directory. string
43+
44+ // The name of the configuration file JavaKit.config from the target for
45+ // which we are generating Swift wrappers for Java classes.
46+ let configFile = URL ( filePath: sourceDir) . appending ( path: " swift-java.config " )
4347 let configuration = try readConfiguration ( sourceDir: " \( sourceDir) " )
4448
4549 guard let javaPackage = configuration? . javaPackage else {
@@ -65,18 +69,53 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin {
6569 // We'll have to make up some caching inside the tool so we don't re-parse files which have not changed etc.
6670 ]
6771 if !javaPackage. isEmpty {
68- arguments. append ( contentsOf: [ " --java-package " , javaPackage] )
72+ arguments += [ " --java-package " , javaPackage]
73+ }
74+
75+ let swiftFiles = sourceModule. sourceFiles. map { $0. url } . filter {
76+ $0. pathExtension == " swift "
77+ }
78+
79+ let outputSwiftFiles : [ URL ] = swiftFiles. compactMap { sourceFileURL in
80+ guard sourceFileURL. isFileURL else {
81+ return nil as URL ?
82+ }
83+
84+ let sourceFilePath = sourceFileURL. path
85+ guard sourceFilePath. starts ( with: sourceDir) else {
86+ fatalError ( " Could not get relative path for source file \( sourceFilePath) " )
87+ }
88+ var outputURL = outputSwiftDirectory
89+ . appending ( path: String ( sourceFilePath. dropFirst ( sourceDir. count) . dropLast ( sourceFileURL. lastPathComponent. count + 1 ) ) )
90+
91+ let inputFileName = sourceFileURL. deletingPathExtension ( ) . lastPathComponent
92+ print ( " inputFileName = \( inputFileName) " )
93+ let isModuleFile = inputFileName. contains ( " Library " ) // FIXME: this is a hack
94+ print ( " isModuleFile = \( isModuleFile) " )
95+
96+ return if isModuleFile {
97+ outputURL. appending ( path: " \( inputFileName) Module+SwiftJava.swift " )
98+ } else {
99+ outputURL. appending ( path: " \( inputFileName) +SwiftJava.swift " )
100+ }
69101 }
70102
71103 return [
72- . prebuildCommand (
104+ . buildCommand (
73105 displayName: " Generate Java wrappers for Swift types " ,
74106 executable: toolURL,
75107 arguments: arguments,
76- // inputFiles: [ configFile ] + swiftFiles,
77- // outputFiles: outputJavaFiles
78- outputFilesDirectory: outputSwiftDirectory
108+ inputFiles: [ configFile ] + swiftFiles,
109+ outputFiles: outputSwiftFiles
79110 )
111+ // .prebuildCommand(
112+ // displayName: "Generate Java wrappers for Swift types",
113+ // executable: toolURL,
114+ // arguments: arguments,
115+ // // inputFiles: [ configFile ] + swiftFiles,
116+ // // outputFiles: outputJavaFiles
117+ // outputFilesDirectory: outputSwiftDirectory
118+ // )
80119 ]
81120 }
82121}
0 commit comments