527 * @param c The class symbol of the enum |
527 * @param c The class symbol of the enum |
528 */ |
528 */ |
529 protected JCExpression enumBase(int pos, ClassSymbol c) { |
529 protected JCExpression enumBase(int pos, ClassSymbol c) { |
530 JCExpression result = make.at(pos). |
530 JCExpression result = make.at(pos). |
531 TypeApply(make.QualIdent(syms.enumSym), |
531 TypeApply(make.QualIdent(syms.enumSym), |
532 List.<JCExpression>of(make.Type(c.type))); |
532 List.of(make.Type(c.type))); |
533 return result; |
533 return result; |
534 } |
534 } |
535 |
535 |
536 protected Type modelMissingTypes(Env<AttrContext> env, Type t, final JCExpression tree, final boolean interfaceExpected) { |
536 protected Type modelMissingTypes(Env<AttrContext> env, Type t, final JCExpression tree, final boolean interfaceExpected) { |
537 if (!t.hasTag(ERROR)) |
537 if (!t.hasTag(ERROR)) |
958 // public static T[] values() { return ???; } |
958 // public static T[] values() { return ???; } |
959 JCMethodDecl values = make. |
959 JCMethodDecl values = make. |
960 MethodDef(make.Modifiers(Flags.PUBLIC|Flags.STATIC), |
960 MethodDef(make.Modifiers(Flags.PUBLIC|Flags.STATIC), |
961 names.values, |
961 names.values, |
962 valuesType, |
962 valuesType, |
963 List.<JCTypeParameter>nil(), |
963 List.nil(), |
964 List.<JCVariableDecl>nil(), |
964 List.nil(), |
965 List.<JCExpression>nil(), // thrown |
965 List.nil(), // thrown |
966 null, //make.Block(0, Tree.emptyList.prepend(make.Return(make.Ident(names._null)))), |
966 null, //make.Block(0, Tree.emptyList.prepend(make.Return(make.Ident(names._null)))), |
967 null); |
967 null); |
968 memberEnter.memberEnter(values, env); |
968 memberEnter.memberEnter(values, env); |
969 |
969 |
970 // public static T valueOf(String name) { return ???; } |
970 // public static T valueOf(String name) { return ???; } |
971 JCMethodDecl valueOf = make. |
971 JCMethodDecl valueOf = make. |
972 MethodDef(make.Modifiers(Flags.PUBLIC|Flags.STATIC), |
972 MethodDef(make.Modifiers(Flags.PUBLIC|Flags.STATIC), |
973 names.valueOf, |
973 names.valueOf, |
974 make.Type(tree.sym.type), |
974 make.Type(tree.sym.type), |
975 List.<JCTypeParameter>nil(), |
975 List.nil(), |
976 List.of(make.VarDef(make.Modifiers(Flags.PARAMETER | |
976 List.of(make.VarDef(make.Modifiers(Flags.PARAMETER | |
977 Flags.MANDATED), |
977 Flags.MANDATED), |
978 names.fromString("name"), |
978 names.fromString("name"), |
979 make.Type(syms.stringType), null)), |
979 make.Type(syms.stringType), null)), |
980 List.<JCExpression>nil(), // thrown |
980 List.nil(), // thrown |
981 null, //make.Block(0, Tree.emptyList.prepend(make.Return(make.Ident(names._null)))), |
981 null, //make.Block(0, Tree.emptyList.prepend(make.Return(make.Ident(names._null)))), |
982 null); |
982 null); |
983 memberEnter.memberEnter(valueOf, env); |
983 memberEnter.memberEnter(valueOf, env); |
984 } |
984 } |
985 |
985 |
1067 initParams = initParams.append(param); |
1067 initParams = initParams.append(param); |
1068 argTypesList = argTypesList.tail; |
1068 argTypesList = argTypesList.tail; |
1069 } |
1069 } |
1070 if (baseInit != null && baseInit.params != null && |
1070 if (baseInit != null && baseInit.params != null && |
1071 baseInit.params.nonEmpty() && argTypesList.nonEmpty()) { |
1071 baseInit.params.nonEmpty() && argTypesList.nonEmpty()) { |
1072 initParams = (initParams == null) ? List.<VarSymbol>nil() : initParams; |
1072 initParams = (initParams == null) ? List.nil() : initParams; |
1073 List<VarSymbol> baseInitParams = baseInit.params; |
1073 List<VarSymbol> baseInitParams = baseInit.params; |
1074 while (baseInitParams.nonEmpty() && argTypesList.nonEmpty()) { |
1074 while (baseInitParams.nonEmpty() && argTypesList.nonEmpty()) { |
1075 VarSymbol param = new VarSymbol(baseInitParams.head.flags() | PARAMETER, |
1075 VarSymbol param = new VarSymbol(baseInitParams.head.flags() | PARAMETER, |
1076 baseInitParams.head.name, argTypesList.head, init); |
1076 baseInitParams.head.name, argTypesList.head, init); |
1077 initParams = initParams.append(param); |
1077 initParams = initParams.append(param); |