@@ -234,11 +234,16 @@ extension JavaTranslator {
234
234
235
235
// Fields
236
236
var staticFields : [ Field ] = [ ]
237
+ var enumConstants : [ Field ] = [ ]
237
238
members. append (
238
239
contentsOf: javaClass. getFields ( ) . compactMap {
239
240
$0. flatMap { field in
240
241
if field. isStatic {
241
242
staticFields. append ( field)
243
+
244
+ if field. isEnumConstant ( ) {
245
+ enumConstants. append ( field)
246
+ }
242
247
return nil
243
248
}
244
249
@@ -252,6 +257,13 @@ extension JavaTranslator {
252
257
}
253
258
)
254
259
260
+ if !enumConstants. isEmpty {
261
+ let enumName = " \( swiftTypeName) Cases "
262
+ members. append (
263
+ contentsOf: translateToEnumValue ( name: enumName, enumFields: enumConstants)
264
+ )
265
+ }
266
+
255
267
// Constructors
256
268
members. append (
257
269
contentsOf: javaClass. getConstructors ( ) . compactMap {
@@ -447,6 +459,50 @@ extension JavaTranslator {
447
459
"""
448
460
}
449
461
462
+ package func translateToEnumValue( name: String , enumFields: [ Field ] ) -> [ DeclSyntax ] {
463
+ let extensionSyntax : DeclSyntax = """
464
+ public enum \( raw: name) : Equatable {
465
+ \( raw: enumFields. map { " case \( $0. getName ( ) ) " } . joined ( separator: " \n " ) )
466
+ }
467
+ """
468
+
469
+ let mappingSyntax : DeclSyntax = """
470
+ public var enumValue: \( raw: name) ? {
471
+ let classObj = self.javaClass
472
+ \( raw: enumFields. map {
473
+ // The equals method takes a java object, so we need to cast it here
474
+ """
475
+ if self.equals(classObj. \( $0. getName ( ) ) ?.as(JavaObject.self)) {
476
+ return \( name) . \( $0. getName ( ) )
477
+ }
478
+ """
479
+ } . joined ( separator: " else " ) ) else {
480
+ return nil
481
+ }
482
+ }
483
+ """
484
+
485
+ let initSyntax : DeclSyntax = """
486
+ public init(_ enumValue: \( raw: name) , environment: JNIEnvironment) {
487
+ let classObj = try! JavaClass<Self>(in: environment)
488
+ switch enumValue {
489
+ \( raw: enumFields. map {
490
+ return """
491
+ case . \( $0. getName ( ) ) :
492
+ if let \( $0. getName ( ) ) = classObj. \( $0. getName ( ) ) {
493
+ self = \( $0. getName ( ) )
494
+ } else {
495
+ fatalError( " Enum value \( $0. getName ( ) ) was unexpectedly nil, please re-run Java2Swift on the most updated Java class " )
496
+ }
497
+ """
498
+ } . joined ( separator: " \n " ) )
499
+ }
500
+ }
501
+ """
502
+
503
+ return [ extensionSyntax, mappingSyntax, initSyntax]
504
+ }
505
+
450
506
// Translate a Java parameter list into Swift parameters.
451
507
private func translateParameters( _ parameters: [ Parameter ? ] ) throws -> [ FunctionParameterSyntax ] {
452
508
return try parameters. compactMap { javaParameter in
0 commit comments