Skip to content

Commit 53a5e8d

Browse files
committed
Add Support for Enum Cases
1 parent 8b547c3 commit 53a5e8d

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

Sources/Java2SwiftLib/JavaTranslator.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,16 @@ extension JavaTranslator {
239239
$0.flatMap { field in
240240
if field.isStatic {
241241
staticFields.append(field)
242-
return nil
242+
243+
if field.isEnumConstant() {
244+
return "public static let \(raw: field.getName()) = try! JavaClass<Self>(environment: JavaVirtualMachine.environment()).\(raw: field.getName())"
245+
} else {
246+
return nil
247+
}
243248
}
244249

245250
do {
246-
return try translateField(field)
251+
return try translateField(field, isOptional: true)
247252
} catch {
248253
logUntranslated("Unable to translate '\(fullName)' static field '\(field.getName())': \(error)")
249254
return nil
@@ -347,7 +352,8 @@ extension JavaTranslator {
347352
contentsOf: staticFields.compactMap { field in
348353
// Translate each static field.
349354
do {
350-
return try translateField(field)
355+
// Enum constants are guaranteed to not be optional
356+
return try translateField(field, isOptional: !field.isEnumConstant())
351357
} catch {
352358
logUntranslated("Unable to translate '\(fullName)' field '\(field.getName())': \(error)")
353359
return nil
@@ -437,8 +443,8 @@ extension JavaTranslator {
437443
"""
438444
}
439445

440-
package func translateField(_ javaField: Field) throws -> DeclSyntax {
441-
let typeName = try getSwiftTypeNameAsString(javaField.getGenericType()!, outerOptional: true)
446+
package func translateField(_ javaField: Field, isOptional: Bool) throws -> DeclSyntax {
447+
let typeName = try getSwiftTypeNameAsString(javaField.getGenericType()!, outerOptional: isOptional)
442448
let fieldAttribute: AttributeSyntax = javaField.isStatic ? "@JavaStaticField" : "@JavaField";
443449
let swiftFieldName = javaField.getName().escapedSwiftName
444450
return """

Tests/Java2SwiftTests/Java2SwiftTests.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ var jvm: JavaVirtualMachine {
2424
}
2525
}
2626

27+
@JavaClass("java.time.Month")
28+
public struct JavaMonth {
29+
30+
}
31+
2732
class Java2SwiftTests: XCTestCase {
2833
func testJavaLangObjectMapping() throws {
2934
try assertTranslatedClass(
@@ -47,6 +52,20 @@ class Java2SwiftTests: XCTestCase {
4752
)
4853
}
4954

55+
func testEnum() async throws {
56+
try assertTranslatedClass(
57+
JavaMonth.self,
58+
swiftTypeName: "Month",
59+
expectedChunks: [
60+
"import JavaKit",
61+
"public static let APRIL = try! JavaClass<Self>(environment: JavaVirtualMachine.environment()).APRIL",
62+
"""
63+
@JavaStaticField
64+
public var APRIL: Month
65+
"""
66+
])
67+
}
68+
5069
func testGenericCollections() throws {
5170
try assertTranslatedClass(
5271
MyArrayList<JavaObject>.self,

0 commit comments

Comments
 (0)