void translate ( ) { make . at ( pos . getStartPosition ( ) ) ; JCClassDecl owner = classDef ( ( ClassSymbol ) mapVar . owner ) ; // synthetic static final int[] $SwitchMap$Color = new int[Color.values().length]; MethodSymbol valuesMethod = lookupMethod ( pos , names . values , forEnum . type , List . nil ( ) ) ; JCExpression size = make // Color.values().length . Select ( make . App ( make . QualIdent ( valuesMethod ) ) , syms . lengthVar ) ; JCExpression mapVarInit = make . NewArray ( make . Type ( syms . intType ) , List . of ( size ) , null ) . setType ( new ArrayType ( syms . intType , syms . arrayClass ) ) ; // try { $SwitchMap$Color[red.ordinal()] = 1; } catch (java.lang.NoSuchFieldError ex) {} ListBuffer < JCStatement > stmts = new ListBuffer <> ( ) ; Symbol ordinalMethod = lookupMethod ( pos , names . ordinal , forEnum . type , List . nil ( ) ) ; List < JCCatch > catcher = List . < JCCatch > nil ( ) . prepend ( make . Catch ( make . VarDef ( new VarSymbol ( PARAMETER , names . ex , syms . noSuchFieldErrorType , syms . noSymbol ) , null ) , make . Block ( 0 , List . nil ( ) ) ) ) ; for ( Map . Entry < VarSymbol , Integer > e : values . entrySet ( ) ) { VarSymbol enumerator = e . getKey ( ) ; Integer mappedValue = e . getValue ( ) ; JCExpression assign = make . Assign ( make . Indexed ( mapVar , make . App ( make . Select ( make . QualIdent ( enumerator ) , ordinalMethod ) ) ) , make . Literal ( mappedValue ) ) . setType ( syms . intType ) ; JCStatement exec = make . Exec ( assign ) ; JCStatement _try = make . Try ( make . Block ( 0 , List . of ( exec ) ) , catcher , null ) ; stmts . append ( _try ) ; } owner . defs = owner . defs . prepend ( make . Block ( STATIC , stmts . toList ( ) ) ) . prepend ( make . VarDef ( mapVar , mapVarInit ) ) ; }
generate the field initializer for the map