Skip to content

Commit f18d327

Browse files
committed
Keep going
1 parent de290a9 commit f18d327

File tree

4 files changed

+52
-27
lines changed

4 files changed

+52
-27
lines changed

Sources/Java2Swift/JavaToSwift.swift

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,13 @@ struct JavaToSwift: ParsableCommand {
228228

229229
// Note that we will be translating this Java class, so it is a known class.
230230
translator.translatedClasses[javaClassName] = (translatedSwiftName, nil, true)
231+
232+
for internalClass in javaClass.getClasses() {
233+
if let internalClass {
234+
let (javaName, swiftName) = names(from: internalClass.getCanonicalName())
235+
translator.translatedClasses[internalClass.getCanonicalName()] = (swiftName.replacing("$", with: "."), nil, true)
236+
}
237+
}
231238
}
232239

233240
// Translate all of the Java classes into Swift classes.
@@ -252,6 +259,36 @@ struct JavaToSwift: ParsableCommand {
252259
}
253260
}
254261

262+
private func names(from javaClassNameOpt: String) -> (javaClassName: String, swiftName: String) {
263+
let javaClassName: String
264+
let swiftName: String
265+
if let equalLoc = javaClassNameOpt.firstIndex(of: "=") {
266+
let afterEqual = javaClassNameOpt.index(after: equalLoc)
267+
javaClassName = String(javaClassNameOpt[..<equalLoc])
268+
swiftName = String(javaClassNameOpt[afterEqual...])
269+
} else {
270+
if let dotLoc = javaClassNameOpt.lastIndex(of: ".") {
271+
let afterDot = javaClassNameOpt.index(after: dotLoc)
272+
swiftName = String(javaClassNameOpt[afterDot...])
273+
} else {
274+
swiftName = javaClassNameOpt
275+
}
276+
277+
javaClassName = javaClassNameOpt
278+
}
279+
280+
return (javaClassName, swiftName)
281+
}
282+
283+
/// Return the class path augmented with the Jar file, if there is one.
284+
var classPathWithJarFile: [String] {
285+
if jarFile {
286+
return [input] + classpath
287+
}
288+
289+
return classpath
290+
}
291+
255292
mutating func writeContents(_ contents: String, to filename: String, description: String) throws {
256293
guard let outputDir = actualOutputDirectory else {
257294
print("// \(filename) - \(description)")

Sources/Java2SwiftLib/JavaTranslator.swift

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,6 @@ extension JavaTranslator {
194194
let fullName = javaClass.getCanonicalName()
195195
let swiftTypeName = try! getSwiftTypeNameFromJavaClassName(fullName)
196196

197-
for internalClass in javaClass.getClasses() {
198-
if let internalClass {
199-
print("Translating name \(internalClass.getName())")
200-
let internalJavaClassName = internalClass.getName()
201-
let translatedInternalSwiftName = internalJavaClassName.replacing("$", with: ".")
202-
translatedClasses[translatedInternalSwiftName] = ("\(swiftTypeName).\(internalClass.getSimpleName())", nil, true)
203-
}
204-
}
205-
206197
// Superclass.
207198
let extends: String
208199
if !javaClass.isInterface(),
@@ -248,18 +239,6 @@ extension JavaTranslator {
248239
// Members
249240
var members: [DeclSyntax] = []
250241

251-
members.append(
252-
contentsOf: javaClass.getClasses().compactMap {
253-
$0.flatMap { clazz in
254-
let text = translateClass(clazz)
255-
text.map { t in t.formatted().description }
256-
.forEach { t in print(t) }
257-
print()
258-
return text
259-
}
260-
}.flatMap(\.self)
261-
)
262-
263242
// Fields
264243
var staticFields: [Field] = []
265244
var enumConstants: [Field] = []
@@ -403,6 +382,15 @@ extension JavaTranslator {
403382
classDecl = classDecl.formatted(using: format).cast(DeclSyntax.self)
404383

405384
topLevelDecls.append(classDecl)
385+
let subClassDecls = javaClass.getClasses().compactMap {
386+
$0.flatMap { clazz in
387+
return translateClass(clazz)
388+
}
389+
}.flatMap(\.self)
390+
391+
topLevelDecls.append(
392+
contentsOf: subClassDecls
393+
)
406394

407395
// Translate static members.
408396
var staticMembers: [DeclSyntax] = []

Sources/JavaKitReflection/JavaClass+Reflection.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,4 @@ extension JavaClass {
3737

3838
@JavaMethod
3939
public func getGenericInterfaces() -> [Type?]
40-
41-
@JavaMethod
42-
public func isInterface() -> Bool
43-
44-
@JavaMethod
45-
public func getClasses() -> [JavaClass<JavaObject>?]
4640
}

Tests/Java2SwiftTests/Java2SwiftTests.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ class Java2SwiftTests: XCTestCase {
119119
try assertTranslatedClass(
120120
ProcessBuilder.self,
121121
swiftTypeName: "ProcessBuilder",
122+
translatedClasses: [
123+
"java.lang.ProcessBuilder": ("ProcessBuilder", nil, true),
124+
"java.lang.ProcessBuilder.Redirect": ("ProcessBuilder.Redirect", nil, true),
125+
"java.lang.ProcessBuilder.Redirect.Type": ("ProcessBuilder.Redirect.Type", nil, true),
126+
"java.lang.Enum.EnumDesc": ("Enum.EnumDesc", nil, true)
127+
],
122128
expectedChunks: [
123129
"import JavaKit",
124130
""

0 commit comments

Comments
 (0)