Skip to content

Commit 08aa68d

Browse files
committed
fix tests
1 parent bf481da commit 08aa68d

21 files changed

+173
-111
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
struct AnalysisResult {
22
let importedTypes: [String: ImportedNominalType]
3+
let importedGlobalVariables: [ImportedFunc]
34
let importedGlobalFuncs: [ImportedFunc]
45
}

Sources/JExtractSwift/CDeclLowering/Swift2JavaTranslator+FunctionLowering.swift renamed to Sources/JExtractSwift/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import JavaTypes
1616
import SwiftSyntax
1717

18-
extension Swift2JavaTranslator {
18+
extension FFMSwift2JavaGenerator {
1919
/// Lower the given function declaration to a C-compatible entrypoint,
2020
/// providing all of the mappings between the parameter and result types
2121
/// of the original function and its `@_cdecl` counterpart.

Sources/JExtractSwift/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ extension FFMSwift2JavaGenerator {
3333
}
3434

3535
/// Print FFM Java binding descriptors for the imported Swift API.
36-
func printJavaBindingDescriptorClass(
36+
package func printJavaBindingDescriptorClass(
3737
_ printer: inout CodePrinter,
3838
_ decl: ImportedFunc
3939
) {

Sources/JExtractSwift/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import JavaTypes
1616

17-
extension Swift2JavaTranslator {
17+
extension FFMSwift2JavaGenerator {
1818
func translatedSignature(
1919
for decl: ImportedFunc
2020
) -> TranslatedFunctionSignature? {

Sources/JExtractSwift/Swift2JavaTranslator+SwiftThunkPrinting.swift renamed to Sources/JExtractSwift/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@
1515
import SwiftSyntax
1616
import SwiftSyntaxBuilder
1717

18-
extension Swift2JavaTranslator {
19-
public func writeSwiftThunkSources(outputDirectory: String) throws {
18+
extension FFMSwift2JavaGenerator {
19+
package func writeSwiftThunkSources() throws {
2020
var printer = CodePrinter()
21-
22-
try writeSwiftThunkSources(outputDirectory: outputDirectory, printer: &printer)
21+
try writeSwiftThunkSources(printer: &printer)
2322
}
2423

25-
public func writeSwiftThunkSources(outputDirectory: String, printer: inout CodePrinter) throws {
24+
package func writeSwiftThunkSources(printer: inout CodePrinter) throws {
2625
let moduleFilenameBase = "\(self.swiftModuleName)Module+SwiftJava"
2726
let moduleFilename = "\(moduleFilenameBase).swift"
2827
do {
@@ -31,7 +30,7 @@ extension Swift2JavaTranslator {
3130
try printGlobalSwiftThunkSources(&printer)
3231

3332
if let outputFile = try printer.writeContents(
34-
outputDirectory: outputDirectory,
33+
outputDirectory: self.swiftOutputDirectory,
3534
javaPackagePath: nil,
3635
filename: moduleFilename)
3736
{
@@ -42,7 +41,7 @@ extension Swift2JavaTranslator {
4241
}
4342

4443
// === All types
45-
for (_, ty) in importedTypes.sorted(by: { (lhs, rhs) in lhs.key < rhs.key }) {
44+
for (_, ty) in self.analysis.importedTypes.sorted(by: { (lhs, rhs) in lhs.key < rhs.key }) {
4645
let fileNameBase = "\(ty.swiftNominal.qualifiedName)+SwiftJava"
4746
let filename = "\(fileNameBase).swift"
4847
log.info("Printing contents: \(filename)")
@@ -51,7 +50,7 @@ extension Swift2JavaTranslator {
5150
try printSwiftThunkSources(&printer, ty: ty)
5251

5352
if let outputFile = try printer.writeContents(
54-
outputDirectory: outputDirectory,
53+
outputDirectory: self.swiftOutputDirectory,
5554
javaPackagePath: nil,
5655
filename: filename)
5756
{
@@ -110,23 +109,23 @@ extension Swift2JavaTranslator {
110109

111110
struct SwiftThunkTranslator {
112111

113-
let st: Swift2JavaTranslator
112+
let st: FFMSwift2JavaGenerator
114113

115-
init(_ st: Swift2JavaTranslator) {
114+
init(_ st: FFMSwift2JavaGenerator) {
116115
self.st = st
117116
}
118117

119118
func renderGlobalThunks() -> [DeclSyntax] {
120119
var decls: [DeclSyntax] = []
121120
decls.reserveCapacity(
122-
st.importedGlobalVariables.count + st.importedGlobalFuncs.count
121+
st.analysis.importedGlobalVariables.count + st.analysis.importedGlobalFuncs.count
123122
)
124123

125-
for decl in st.importedGlobalVariables {
124+
for decl in st.analysis.importedGlobalVariables {
126125
decls.append(contentsOf: render(forFunc: decl))
127126
}
128127

129-
for decl in st.importedGlobalFuncs {
128+
for decl in st.analysis.importedGlobalFuncs {
130129
decls.append(contentsOf: render(forFunc: decl))
131130
}
132131

Sources/JExtractSwift/FFM/FFMSwift2JavaGenerator.swift

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,44 @@ import JavaTypes
1616
import SwiftSyntax
1717
import SwiftSyntaxBuilder
1818

19-
class FFMSwift2JavaGenerator: Swift2JavaGenerator {
20-
private let log = Logger(label: "ffm-generator", logLevel: .info)
19+
package class FFMSwift2JavaGenerator: Swift2JavaGenerator {
20+
let log = Logger(label: "ffm-generator", logLevel: .info)
2121

2222
let analysis: AnalysisResult
2323
let swiftModuleName: String
2424
let javaPackage: String
2525
let swiftOutputDirectory: String
2626
let javaOutputDirectory: String
2727
let swiftStdlibTypes: SwiftStandardLibraryTypes
28+
let symbolTable: SwiftSymbolTable
2829

2930
var javaPackagePath: String {
3031
javaPackage.replacingOccurrences(of: ".", with: "/")
3132
}
3233

3334
var thunkNameRegistry: ThunkNameRegistry = ThunkNameRegistry()
3435

35-
init(
36-
analysis: AnalysisResult,
37-
swiftModuleName: String,
36+
/// Cached Java translation result. 'nil' indicates failed translation.
37+
var translatedSignatures: [ImportedFunc: TranslatedFunctionSignature?] = [:]
38+
39+
package init(
40+
translator: Swift2JavaTranslator,
3841
javaPackage: String,
3942
swiftOutputDirectory: String,
40-
javaOutputDirectory: String
43+
javaOutputDirectory: String,
4144
) {
42-
self.analysis = analysis
43-
self.swiftModuleName = swiftModuleName
45+
self.analysis = translator.result
46+
self.swiftModuleName = translator.swiftModuleName
4447
self.javaPackage = javaPackage
4548
self.swiftOutputDirectory = swiftOutputDirectory
4649
self.javaOutputDirectory = javaOutputDirectory
47-
48-
var parsedSwiftModule = SwiftParsedModuleSymbolTable(moduleName: "Swift")
49-
self.swiftStdlibTypes = SwiftStandardLibraryTypes(into: &parsedSwiftModule)
50+
self.symbolTable = translator.symbolTable
51+
self.swiftStdlibTypes = translator.swiftStdlibTypes
5052
}
5153

5254
func generate() throws {
5355
try writeExportedJavaSources()
56+
try writeSwiftThunkSources()
5457
}
5558
}
5659

@@ -80,10 +83,13 @@ extension FFMSwift2JavaGenerator {
8083

8184

8285
extension FFMSwift2JavaGenerator {
86+
package func writeExportedJavaSources() throws {
87+
var printer = CodePrinter()
88+
try writeExportedJavaSources(printer: &printer)
89+
}
8390

8491
/// Every imported public type becomes a public class in its own file in Java.
85-
func writeExportedJavaSources() throws {
86-
var printer = CodePrinter()
92+
package func writeExportedJavaSources(printer: inout CodePrinter) throws {
8793
for (_, ty) in analysis.importedTypes.sorted(by: { (lhs, rhs) in lhs.key < rhs.key }) {
8894
let filename = "\(ty.swiftNominal.name).java"
8995
log.info("Printing contents: \(filename)")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import ArgumentParser
2+
3+
public enum GenerationMode: String, ExpressibleByArgument {
4+
/// Foreign Value and Memory API
5+
case ffm
6+
}

Sources/JExtractSwift/Swift2Java.swift

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,18 @@ public struct SwiftToJava: ParsableCommand {
4545
@Option(name: .shortAndLong, help: "Configure the level of lots that should be printed")
4646
var logLevel: Logger.Level = .info
4747

48+
@Option(
49+
name: .long,
50+
help: "The mode of generation to use for the output files.")
51+
var mode: GenerationMode = .ffm
52+
4853
@Argument(help: "The Swift files or directories to recursively export to Java.")
4954
var input: [String]
5055

5156
public func run() throws {
5257
let inputPaths = self.input.dropFirst().map { URL(string: $0)! }
5358

5459
let translator = Swift2JavaTranslator(
55-
javaPackage: packageName,
5660
swiftModuleName: swiftModule
5761
)
5862
translator.log.logLevel = logLevel
@@ -90,18 +94,18 @@ public struct SwiftToJava: ParsableCommand {
9094

9195
try translator.analyze()
9296

93-
let generator = FFMSwift2JavaGenerator(
94-
analysis: translator.result,
95-
swiftModuleName: self.swiftModule,
96-
javaPackage: self.packageName,
97-
swiftOutputDirectory: outputDirectorySwift,
98-
javaOutputDirectory: outputDirectoryJava
99-
)
97+
switch mode {
98+
case .ffm:
99+
let generator = FFMSwift2JavaGenerator(
100+
translator: translator,
101+
javaPackage: self.packageName,
102+
swiftOutputDirectory: outputDirectorySwift,
103+
javaOutputDirectory: outputDirectoryJava
104+
)
100105

101-
try generator.generate()
106+
try generator.generate()
107+
}
102108

103-
// try translator.writeSwiftThunkSources(outputDirectory: outputDirectorySwift)
104-
// try translator.writeExportedJavaSources(outputDirectory: outputDirectoryJava)
105109
print("[swift-java] Generated Java sources (\(packageName)) in: \(outputDirectoryJava)/")
106110
print("[swift-java] Imported Swift module '\(swiftModule)': " + "done.".green)
107111
}

0 commit comments

Comments
 (0)