@@ -77,6 +77,7 @@ extension JavaTranslator {
7777 package static let defaultTranslatedClasses : [ String : ( swiftType: String , swiftModule: String ? , isOptional: Bool ) ] = [
7878 " java.lang.Class " : ( " JavaClass " , " JavaKit " , true ) ,
7979 " java.lang.String " : ( " String " , " JavaKit " , false ) ,
80+ " java.lang.Object " : ( " JavaObject " , " JavaKit " , true )
8081 ]
8182}
8283
@@ -234,17 +235,17 @@ extension JavaTranslator {
234235
235236 // Fields
236237 var staticFields : [ Field ] = [ ]
238+ var enumConstants : [ Field ] = [ ]
237239 members. append (
238240 contentsOf: javaClass. getFields ( ) . compactMap {
239241 $0. flatMap { field in
240242 if field. isStatic {
241243 staticFields. append ( field)
242244
243245 if field. isEnumConstant ( ) {
244- return " public static let \( raw: field. getName ( ) ) = try! JavaClass<Self>(in: JavaVirtualMachine.shared().environment()). \( raw: field. getName ( ) ) ! "
245- } else {
246- return nil
246+ enumConstants. append ( field)
247247 }
248+ return nil
248249 }
249250
250251 do {
@@ -257,6 +258,13 @@ extension JavaTranslator {
257258 }
258259 )
259260
261+ if !enumConstants. isEmpty {
262+ let enumName = " \( swiftTypeName) Cases "
263+ members. append (
264+ contentsOf: translateToEnumValue ( name: enumName, enumFields: enumConstants)
265+ )
266+ }
267+
260268 // Constructors
261269 members. append (
262270 contentsOf: javaClass. getConstructors ( ) . compactMap {
@@ -453,6 +461,31 @@ extension JavaTranslator {
453461 """
454462 }
455463
464+ package func translateToEnumValue( name: String , enumFields: [ Field ] ) -> [ DeclSyntax ] {
465+ let extensionSyntax : DeclSyntax = """
466+ public enum \( raw: name) : Equatable {
467+ \( raw: enumFields. map { " case \( $0. getName ( ) ) " } . joined ( separator: " \n " ) )
468+ }
469+ """
470+
471+ let mappingSyntax : DeclSyntax = """
472+ public var enumValue: \( raw: name) ? {
473+ \( raw: enumFields. map {
474+ // The equals method takes a java object, so we need to cast it here
475+ """
476+ if self.equals(self.javaClass. \( $0. getName ( ) ) ?.as(JavaObject.self)) {
477+ return \( name) . \( $0. getName ( ) )
478+ }
479+ """
480+ } . joined ( separator: " else " ) ) else {
481+ return nil
482+ }
483+ }
484+ """
485+
486+ return [ extensionSyntax, mappingSyntax]
487+ }
488+
456489 // Translate a Java parameter list into Swift parameters.
457490 private func translateParameters( _ parameters: [ Parameter ? ] ) throws -> [ FunctionParameterSyntax ] {
458491 return try parameters. compactMap { javaParameter in
0 commit comments