@@ -360,7 +360,6 @@ extension JavaTranslator {
360360 contentsOf: staticFields. compactMap { field in
361361 // Translate each static field.
362362 do {
363- // Enum constants are guaranteed to not be optional
364363 return try translateField ( field)
365364 } catch {
366365 logUntranslated ( " Unable to translate ' \( fullName) ' field ' \( field. getName ( ) ) ': \( error) " )
@@ -470,10 +469,11 @@ extension JavaTranslator {
470469
471470 let mappingSyntax : DeclSyntax = """
472471 public var enumValue: \( raw: name) ? {
472+ let classObj = self.javaClass
473473 \( raw: enumFields. map {
474474 // The equals method takes a java object, so we need to cast it here
475475 """
476- if self.equals(self.javaClass . \( $0. getName ( ) ) ?.as(JavaObject.self)) {
476+ if self.equals(classObj . \( $0. getName ( ) ) ?.as(JavaObject.self)) {
477477 return \( name) . \( $0. getName ( ) )
478478 }
479479 """
@@ -483,7 +483,26 @@ extension JavaTranslator {
483483 }
484484 """
485485
486- return [ extensionSyntax, mappingSyntax]
486+ let initSyntax : DeclSyntax = """
487+ public init?(_ enumValue: \( raw: name) , environment: JNIEnvironment) throws {
488+ let classObj = try JavaClass<Self>(in: environment)
489+ switch enumValue {
490+ \( raw: enumFields. map {
491+ let caseName = $0. getName ( )
492+ return """
493+ case . \( caseName) :
494+ if let \( caseName) = classObj. \( caseName) {
495+ self = \( caseName)
496+ } else {
497+ return nil
498+ }
499+ """
500+ } . joined ( separator: " \n " ) )
501+ }
502+ }
503+ """
504+
505+ return [ extensionSyntax, mappingSyntax, initSyntax]
487506 }
488507
489508 // Translate a Java parameter list into Swift parameters.
0 commit comments