Skip to content

Commit f338ce3

Browse files
committed
PR feedback
1 parent 3de3079 commit f338ce3

File tree

7 files changed

+60
-51
lines changed

7 files changed

+60
-51
lines changed

Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -59,48 +59,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin {
5959
let outputJavaDirectory = context.outputJavaDirectory
6060
let outputSwiftDirectory = context.outputSwiftDirectory
6161

62-
/// Find the manifest files from other swift-java executions in any targets
63-
/// this target depends on.
64-
var dependentConfigFiles: [(String, URL)] = []
65-
func searchForConfigFiles(in target: any Target) {
66-
// log("Search for config files in target: \(target.name)")
67-
let dependencyURL = URL(filePath: target.directory.string)
68-
69-
// Look for a config file within this target.
70-
let dependencyConfigURL = dependencyURL
71-
.appending(path: SwiftJavaConfigFileName)
72-
let dependencyConfigString = dependencyConfigURL
73-
.path(percentEncoded: false)
74-
75-
if FileManager.default.fileExists(atPath: dependencyConfigString) {
76-
dependentConfigFiles.append((target.name, dependencyConfigURL))
77-
}
78-
}
79-
80-
// Process direct dependencies of this target.
81-
for dependency in target.dependencies {
82-
switch dependency {
83-
case .target(let target):
84-
// log("Dependency target: \(target.name)")
85-
searchForConfigFiles(in: target)
86-
87-
case .product(let product):
88-
// log("Dependency product: \(product.name)")
89-
for target in product.targets {
90-
// log("Dependency product: \(product.name), target: \(target.name)")
91-
searchForConfigFiles(in: target)
92-
}
93-
94-
@unknown default:
95-
break
96-
}
97-
}
98-
99-
// Process indirect target dependencies.
100-
for dependency in target.recursiveTargetDependencies {
101-
// log("Recursive dependency target: \(dependency.name)")
102-
searchForConfigFiles(in: dependency)
103-
}
62+
let dependentConfigFiles = searchForDependentConfigFiles(in: target)
10463

10564
var arguments: [String] = [
10665
/*subcommand=*/"jextract",
@@ -172,5 +131,53 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin {
172131
)
173132
]
174133
}
134+
135+
/// Find the manifest files from other swift-java executions in any targets
136+
/// this target depends on.
137+
func searchForDependentConfigFiles(in target: any Target) -> [(String, URL)] {
138+
var dependentConfigFiles = [(String, URL)]()
139+
140+
func _searchForConfigFiles(in target: any Target) {
141+
// log("Search for config files in target: \(target.name)")
142+
let dependencyURL = URL(filePath: target.directory.string)
143+
144+
// Look for a config file within this target.
145+
let dependencyConfigURL = dependencyURL
146+
.appending(path: SwiftJavaConfigFileName)
147+
let dependencyConfigString = dependencyConfigURL
148+
.path(percentEncoded: false)
149+
150+
if FileManager.default.fileExists(atPath: dependencyConfigString) {
151+
dependentConfigFiles.append((target.name, dependencyConfigURL))
152+
}
153+
}
154+
155+
// Process direct dependencies of this target.
156+
for dependency in target.dependencies {
157+
switch dependency {
158+
case .target(let target):
159+
// log("Dependency target: \(target.name)")
160+
_searchForConfigFiles(in: target)
161+
162+
case .product(let product):
163+
// log("Dependency product: \(product.name)")
164+
for target in product.targets {
165+
// log("Dependency product: \(product.name), target: \(target.name)")
166+
_searchForConfigFiles(in: target)
167+
}
168+
169+
@unknown default:
170+
break
171+
}
172+
}
173+
174+
// Process indirect target dependencies.
175+
for dependency in target.recursiveTargetDependencies {
176+
// log("Recursive dependency target: \(dependency.name)")
177+
_searchForConfigFiles(in: dependency)
178+
}
179+
180+
return dependentConfigFiles
181+
}
175182
}
176183

Samples/JExtractJNISampleApp/src/test/java/com/example/swift/MySwiftClassTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ void copy() {
144144
void addXWithJavaLong() {
145145
try (var arena = new ConfinedSwiftMemorySession()) {
146146
MySwiftClass c1 = MySwiftClass.init(20, 10, arena);
147-
Long javaLong = new Long(50);
147+
Long javaLong = 50L;
148148
assertEquals(70, c1.addXWithJavaLong(javaLong));
149149
}
150150
}

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ extension JNISwift2JavaGenerator {
4242
struct JavaTranslation {
4343
let swiftModuleName: String
4444
let javaPackage: String
45-
let javaClassLookupTable: [String: String]
45+
let javaClassLookupTable: JavaClassLookupTable
4646

4747
func translate(_ decl: ImportedFunc) throws -> TranslatedFunctionDecl {
4848
let nativeTranslation = NativeJavaTranslation(

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ extension JNISwift2JavaGenerator {
1818

1919
struct NativeJavaTranslation {
2020
let javaPackage: String
21-
let javaClassLookupTable: [String: String]
21+
let javaClassLookupTable: JavaClassLookupTable
2222

2323
/// Translates a Swift function into the native JNI method signature.
2424
func translate(

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414

1515
import JavaTypes
1616

17+
/// A table that where keys are Swift class names and the values are
18+
/// the fully qualified canoical names.
19+
package typealias JavaClassLookupTable = [String: String]
20+
1721
package class JNISwift2JavaGenerator: Swift2JavaGenerator {
1822
let analysis: AnalysisResult
1923
let swiftModuleName: String
@@ -22,9 +26,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator {
2226
let swiftOutputDirectory: String
2327
let javaOutputDirectory: String
2428

25-
/// A lookup table for any JavaKit generated Swift types
26-
/// that wrap Java classes.
27-
let javaClassLookupTable: [String: String]
29+
let javaClassLookupTable: JavaClassLookupTable
2830

2931
var javaPackagePath: String {
3032
javaPackage.replacingOccurrences(of: ".", with: "/")
@@ -44,7 +46,7 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator {
4446
javaPackage: String,
4547
swiftOutputDirectory: String,
4648
javaOutputDirectory: String,
47-
javaClassLookupTable: [String: String]
49+
javaClassLookupTable: JavaClassLookupTable
4850
) {
4951
self.logger = Logger(label: "jni-generator", logLevel: translator.log.logLevel)
5052
self.analysis = translator.result

Sources/JExtractSwiftLib/Swift2Java.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public struct SwiftToJava {
8585
fatalError("Missing --output-java directory!")
8686
}
8787

88-
let wrappedJavaClassesLookupTable: [String: String] = dependentConfigs.compactMap(\.classes).reduce(into: [:]) {
88+
let wrappedJavaClassesLookupTable: JavaClassLookupTable = dependentConfigs.compactMap(\.classes).reduce(into: [:]) {
8989
for (canonicalName, javaClass) in $1 {
9090
$0[javaClass] = canonicalName
9191
}

Sources/JExtractSwiftLib/Swift2JavaTranslator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public final class Swift2JavaTranslator {
3939

4040
var inputs: [Input] = []
4141

42-
/// A list of used Swift class names that live in dependencies
42+
/// A list of used Swift class names that live in dependencies, e.g. `JavaInteger`
4343
package var dependenciesClasses: [String] = []
4444

4545
// ==== Output state

0 commit comments

Comments
 (0)