Skip to content

Commit adbd3b9

Browse files
committed
Java2Swift: Small fixes in support of nested classes
1 parent db42f4b commit adbd3b9

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

Sources/Java2SwiftLib/JavaTranslator.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ extension JavaTranslator {
193193
package func translateClass(_ javaClass: JavaClass<JavaObject>) -> [DeclSyntax] {
194194
let fullName = javaClass.getName()
195195
let swiftTypeName = try! getSwiftTypeNameFromJavaClassName(fullName)
196+
let (swiftParentType, swiftInnermostTypeName) = swiftTypeName.splitSwiftTypeName()
196197

197198
// Superclass.
198199
let extends: String
@@ -265,7 +266,7 @@ extension JavaTranslator {
265266
)
266267

267268
if !enumConstants.isEmpty {
268-
let enumName = "\(swiftTypeName)Cases"
269+
let enumName = "\(swiftInnermostTypeName)Cases"
269270
members.append(
270271
contentsOf: translateToEnumValue(name: enumName, enumFields: enumConstants)
271272
)
@@ -357,7 +358,6 @@ extension JavaTranslator {
357358
}
358359

359360
// Emit the struct declaration describing the java class.
360-
let (swiftParentType, swiftInnermostTypeName) = swiftTypeName.splitSwiftTypeName()
361361
let classOrInterface: String = javaClass.isInterface() ? "JavaInterface" : "JavaClass";
362362
var classDecl =
363363
"""

Tests/Java2SwiftTests/Java2SwiftTests.swift

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,51 @@ class Java2SwiftTests: XCTestCase {
136136
]
137137
)
138138
}
139+
140+
func testNestedLogger() throws {
141+
try assertTranslatedClass(
142+
JavaSystem.Logger.self,
143+
swiftTypeName: "JavaSystem.Logger",
144+
translatedClasses: [
145+
"java.lang.Object": ("JavaObject", nil, true),
146+
"java.lang.System": ("JavaSystem", nil, true)
147+
],
148+
expectedChunks: [
149+
"""
150+
extension JavaSystem {
151+
@JavaInterface("java.lang.System$Logger")
152+
public struct Logger {
153+
"""
154+
]
155+
)
156+
}
157+
158+
func testNestedLoggerLevel() throws {
159+
try assertTranslatedClass(
160+
JavaSystem.Logger.Level.self,
161+
swiftTypeName: "JavaSystem.Logger.Level",
162+
translatedClasses: [
163+
"java.lang.Object": ("JavaObject", nil, true),
164+
"java.lang.System": ("JavaSystem", nil, true),
165+
"java.lang.System.Logger": ("JavaSystem.Logger", nil, true),
166+
],
167+
expectedChunks: [
168+
"""
169+
extension JavaSystem.Logger {
170+
@JavaClass("java.lang.System$Logger$Level")
171+
public struct Level {
172+
""",
173+
"""
174+
public enum LevelCases: Equatable {
175+
""",
176+
"""
177+
extension JavaClass<JavaSystem.Logger.Level> {
178+
@JavaStaticField
179+
public var ALL: JavaSystem.Logger.Level?
180+
""",
181+
]
182+
)
183+
}
139184
}
140185

141186
@JavaClass("java.util.ArrayList")
@@ -146,6 +191,22 @@ public struct MyArrayList<E: AnyJavaObject> {
146191
public struct MyLinkedList<E: AnyJavaObject> {
147192
}
148193

194+
@JavaClass("java.lang.System")
195+
public struct JavaSystem {
196+
}
197+
198+
extension JavaSystem {
199+
@JavaClass("java.lang.System$Logger")
200+
public struct Logger {
201+
}
202+
}
203+
204+
extension JavaSystem.Logger {
205+
@JavaClass("java.lang.System$Logger$Level")
206+
public struct Level {
207+
}
208+
}
209+
149210
/// Translate a Java class and assert that the translated output contains
150211
/// each of the expected "chunks" of text.
151212
func assertTranslatedClass<JavaClassType: AnyJavaObject>(

0 commit comments

Comments
 (0)