Skip to content

Commit 9393a3a

Browse files
committed
fix tests
1 parent 91f12b1 commit 9393a3a

21 files changed

+169
-109
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/JExtractSwiftLib/CDeclLowering/Swift2JavaTranslator+FunctionLowering.swift renamed to Sources/JExtractSwiftLib/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/JExtractSwiftLib/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/JExtractSwiftLib/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/JExtractSwiftLib/Swift2JavaTranslator+SwiftThunkPrinting.swift renamed to Sources/JExtractSwiftLib/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/JExtractSwiftLib/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/JExtractSwiftLib/Swift2Java.swift

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,17 @@ public struct SwiftToJava {
8989

9090
try translator.analyze()
9191

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

102104

103105
print("[swift-java] Generated Java sources (\(packageName)) in: \(outputDirectoryJava)/")

0 commit comments

Comments
 (0)