Skip to content

Commit de290a9

Browse files
committed
First pass
1 parent c5a3d4d commit de290a9

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

Sources/Java2SwiftLib/JavaTranslator.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,15 @@ 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+
197206
// Superclass.
198207
let extends: String
199208
if !javaClass.isInterface(),
@@ -239,6 +248,18 @@ extension JavaTranslator {
239248
// Members
240249
var members: [DeclSyntax] = []
241250

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+
242263
// Fields
243264
var staticFields: [Field] = []
244265
var enumConstants: [Field] = []

Sources/JavaKitReflection/JavaClass+Reflection.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,10 @@ 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>?]
4046
}

Tests/Java2SwiftTests/Java2SwiftTests.swift

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ var jvm: JavaVirtualMachine {
2424
}
2525

2626
@JavaClass("java.time.Month")
27-
public struct JavaMonth {
28-
29-
}
27+
public struct JavaMonth {}
28+
@JavaClass("java.lang.ProcessBuilder")
29+
struct ProcessBuilder {}
3030

3131
class Java2SwiftTests: XCTestCase {
3232
func testJavaLangObjectMapping() throws {
@@ -114,6 +114,18 @@ class Java2SwiftTests: XCTestCase {
114114
]
115115
)
116116
}
117+
118+
func testNestedSubclasses() async throws {
119+
try assertTranslatedClass(
120+
ProcessBuilder.self,
121+
swiftTypeName: "ProcessBuilder",
122+
expectedChunks: [
123+
"import JavaKit",
124+
""
125+
]
126+
)
127+
}
128+
117129
}
118130

119131
@JavaClass("java.util.ArrayList")
@@ -145,6 +157,7 @@ func assertTranslatedClass<JavaClassType: AnyJavaObject>(
145157
translator.translatedClasses = translatedClasses
146158
translator.translatedClasses[javaType.fullJavaClassName] = (swiftTypeName, nil, true)
147159

160+
148161
translator.startNewFile()
149162
let translatedDecls = translator.translateClass(
150163
try JavaClass<JavaObject>(
@@ -160,6 +173,7 @@ func assertTranslatedClass<JavaClassType: AnyJavaObject>(
160173
"""
161174

162175
for expectedChunk in expectedChunks {
176+
print(swiftFileText)
163177
if swiftFileText.contains(expectedChunk) {
164178
continue
165179
}

0 commit comments

Comments
 (0)