3702 int pos = token.pos;
3703 Name name = ident();
3704 if (isRestrictedLocalVarTypeName(name, pos, true)) {
3705 reportSyntaxError(pos, Errors.VarNotAllowed);
3706 }
3707
3708 if (isRestrictedRecordTypeName(name)) {
3709 reportSyntaxError(pos, Errors.RecordNotAllowed(name));
3710 }
3711 return name;
3712 }
3713
3714 Map<Name, JCVariableDecl> headerFields(JCModifiers recordClassMods) {
3715 accept(LPAREN);
3716 Map<Name, JCVariableDecl> fields = new LinkedHashMap<>();
3717 while (token.kind != RPAREN) {
3718 JCModifiers mods = modifiersOpt();
3719 if (mods.flags != 0) {
3720 log.error(mods.pos, Errors.RecordCantDeclareFieldModifiers);
3721 }
3722 mods.flags |= Flags.RECORD | Flags.FINAL;
3723 mods.flags |= (recordClassMods.flags & Flags.ABSTRACT) != 0 ? Flags.PROTECTED : 0;
3724 JCExpression type = parseType();
3725 int pos = token.pos;
3726 Name id = ident();
3727 if (!fields.containsKey(id)) {
3728 List<Pair<Accessors.Kind, Name>> accessors = List.of(new Pair<>(Accessors.Kind.GET, id));
3729 fields.put(id, toP(F.at(pos).VarDef(mods, id, type, null, accessors)));
3730 } else {
3731 log.error(pos, Errors.RecordCantDeclareDuplicateFields);
3732 }
3733 if (token.kind == COMMA) {
3734 nextToken();
3735 }
3736 }
3737 accept(RPAREN);
3738 return fields;
3739 }
3740
3741 /** InterfaceDeclaration = INTERFACE Ident TypeParametersOpt
3742 * [EXTENDS TypeList] InterfaceBody
|
3702 int pos = token.pos;
3703 Name name = ident();
3704 if (isRestrictedLocalVarTypeName(name, pos, true)) {
3705 reportSyntaxError(pos, Errors.VarNotAllowed);
3706 }
3707
3708 if (isRestrictedRecordTypeName(name)) {
3709 reportSyntaxError(pos, Errors.RecordNotAllowed(name));
3710 }
3711 return name;
3712 }
3713
3714 Map<Name, JCVariableDecl> headerFields(JCModifiers recordClassMods) {
3715 accept(LPAREN);
3716 Map<Name, JCVariableDecl> fields = new LinkedHashMap<>();
3717 while (token.kind != RPAREN) {
3718 JCModifiers mods = modifiersOpt();
3719 if (mods.flags != 0) {
3720 log.error(mods.pos, Errors.RecordCantDeclareFieldModifiers);
3721 }
3722 mods.flags |= Flags.RECORD | Flags.FINAL | Flags.PRIVATE;
3723 mods.flags |= (recordClassMods.flags & Flags.ABSTRACT) != 0 ? Flags.PROTECTED : 0;
3724 JCExpression type = parseType();
3725 int pos = token.pos;
3726 Name id = ident();
3727 if (!fields.containsKey(id)) {
3728 List<Pair<Accessors.Kind, Name>> accessors = List.of(new Pair<>(Accessors.Kind.GET, id));
3729 fields.put(id, toP(F.at(pos).VarDef(mods, id, type, null, accessors)));
3730 } else {
3731 log.error(pos, Errors.RecordCantDeclareDuplicateFields);
3732 }
3733 if (token.kind == COMMA) {
3734 nextToken();
3735 }
3736 }
3737 accept(RPAREN);
3738 return fields;
3739 }
3740
3741 /** InterfaceDeclaration = INTERFACE Ident TypeParametersOpt
3742 * [EXTENDS TypeList] InterfaceBody
|