src/share/classes/com/sun/tools/javac/parser/JavacParser.java

Print this page




1170                 nextToken();
1171                 if (token.kind == LT) typeArgs = typeArguments(false);
1172                 t = creator(pos, typeArgs);
1173                 typeArgs = null;
1174             } else return illegal();
1175             break;
1176         case MONKEYS_AT:
1177             // Only annotated cast types and method references are valid
1178             List<JCAnnotation> typeAnnos = typeAnnotationsOpt();
1179             if (typeAnnos.isEmpty()) {
1180                 // else there would be no '@'
1181                 throw new AssertionError("Expected type annotations, but found none!");
1182             }
1183 
1184             JCExpression expr = term3();
1185 
1186             if ((mode & TYPE) == 0) {
1187                 // Type annotations on class literals no longer legal
1188                 switch (expr.getTag()) {
1189                 case REFERENCE: {
1190                     JCMemberReference mref = (JCMemberReference) expr;
1191                     mref.expr = toP(F.at(pos).AnnotatedType(typeAnnos, mref.expr));
1192                     t = mref;
1193                     break;
1194                 }
1195                 case SELECT: {
1196                     JCFieldAccess sel = (JCFieldAccess) expr;
1197 
1198                     if (sel.name != names._class) {
1199                         return illegal();
1200                     } else {
1201                         log.error(token.pos, "no.annotations.on.dot.class");
1202                         return expr;
1203                     }
1204                 }
1205                 default:
1206                     return illegal(typeAnnos.head.pos);
1207                 }
1208 
1209             } else {
1210                 // Type annotations targeting a cast




1170                 nextToken();
1171                 if (token.kind == LT) typeArgs = typeArguments(false);
1172                 t = creator(pos, typeArgs);
1173                 typeArgs = null;
1174             } else return illegal();
1175             break;
1176         case MONKEYS_AT:
1177             // Only annotated cast types and method references are valid
1178             List<JCAnnotation> typeAnnos = typeAnnotationsOpt();
1179             if (typeAnnos.isEmpty()) {
1180                 // else there would be no '@'
1181                 throw new AssertionError("Expected type annotations, but found none!");
1182             }
1183 
1184             JCExpression expr = term3();
1185 
1186             if ((mode & TYPE) == 0) {
1187                 // Type annotations on class literals no longer legal
1188                 switch (expr.getTag()) {
1189                 case REFERENCE: {
1190                     JCMemberReference mref = (JCMemberReference) expr.setPos(pos);
1191                     mref.expr = toP(F.at(pos).AnnotatedType(typeAnnos, mref.expr));
1192                     t = mref;
1193                     break;
1194                 }
1195                 case SELECT: {
1196                     JCFieldAccess sel = (JCFieldAccess) expr;
1197 
1198                     if (sel.name != names._class) {
1199                         return illegal();
1200                     } else {
1201                         log.error(token.pos, "no.annotations.on.dot.class");
1202                         return expr;
1203                     }
1204                 }
1205                 default:
1206                     return illegal(typeAnnos.head.pos);
1207                 }
1208 
1209             } else {
1210                 // Type annotations targeting a cast