langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java
changeset 11149 ee702a4f9c5f
parent 11147 20770e90d993
child 11322 6ee85f80967a
equal deleted inserted replaced
11148:cb6d891ce911 11149:ee702a4f9c5f
  1141                             }
  1141                             }
  1142                         }
  1142                         }
  1143                         // typeArgs saved for next loop iteration.
  1143                         // typeArgs saved for next loop iteration.
  1144                         t = toP(F.at(pos).Select(t, ident()));
  1144                         t = toP(F.at(pos).Select(t, ident()));
  1145                         break;
  1145                         break;
  1146                     case LT:
  1146 //                    case LT:
  1147                         if ((mode & (TYPE | NOPARAMS)) == 0) {
  1147 //                        if ((mode & (TYPE | NOPARAMS)) == 0) {
  1148                             //could be an unbound method reference whose qualifier
  1148 //                            //could be an unbound method reference whose qualifier
  1149                             //is a generic type i.e. A<S>#m
  1149 //                            //is a generic type i.e. A<S>#m
  1150                             mode = EXPR | TYPE;
  1150 //                            mode = EXPR | TYPE;
  1151                             JCTree.Tag op = JCTree.Tag.LT;
  1151 //                            JCTree.Tag op = JCTree.Tag.LT;
  1152                             int pos1 = token.pos;
  1152 //                            int pos1 = token.pos;
  1153                             nextToken();
  1153 //                            nextToken();
  1154                             mode |= EXPR | TYPE | TYPEARG;
  1154 //                            mode |= EXPR | TYPE | TYPEARG;
  1155                             JCExpression t1 = term3();
  1155 //                            JCExpression t1 = term3();
  1156                             if ((mode & TYPE) != 0 &&
  1156 //                            if ((mode & TYPE) != 0 &&
  1157                                 (token.kind == COMMA || token.kind == GT)) {
  1157 //                                (token.kind == COMMA || token.kind == GT)) {
  1158                                 mode = TYPE;
  1158 //                                mode = TYPE;
  1159                                 ListBuffer<JCExpression> args = new ListBuffer<JCExpression>();
  1159 //                                ListBuffer<JCExpression> args = new ListBuffer<JCExpression>();
  1160                                 args.append(t1);
  1160 //                                args.append(t1);
  1161                                 while (token.kind == COMMA) {
  1161 //                                while (token.kind == COMMA) {
  1162                                     nextToken();
  1162 //                                    nextToken();
  1163                                     args.append(typeArgument());
  1163 //                                    args.append(typeArgument());
  1164                                 }
  1164 //                                }
  1165                                 accept(GT);
  1165 //                                accept(GT);
  1166                                 t = toP(F.at(pos1).TypeApply(t, args.toList()));
  1166 //                                t = toP(F.at(pos1).TypeApply(t, args.toList()));
  1167                                 checkGenerics();
  1167 //                                checkGenerics();
  1168                                 while (token.kind == DOT) {
  1168 //                                while (token.kind == DOT) {
  1169                                     nextToken();
  1169 //                                    nextToken();
  1170                                     mode = TYPE;
  1170 //                                    mode = TYPE;
  1171                                     t = toP(F.at(token.pos).Select(t, ident()));
  1171 //                                    t = toP(F.at(token.pos).Select(t, ident()));
  1172                                     t = typeArgumentsOpt(t);
  1172 //                                    t = typeArgumentsOpt(t);
  1173                                 }
  1173 //                                }
  1174                                 if (token.kind != HASH) {
  1174 //                                if (token.kind != HASH) {
  1175                                     //method reference expected here
  1175 //                                    //method reference expected here
  1176                                     t = illegal();
  1176 //                                    t = illegal();
  1177                                 }
  1177 //                                }
  1178                                 mode = EXPR;
  1178 //                                mode = EXPR;
  1179                                 break;
  1179 //                                break;
  1180                             } else if ((mode & EXPR) != 0) {
  1180 //                            } else if ((mode & EXPR) != 0) {
  1181                                 //rollback - it was a binary expression
  1181 //                                //rollback - it was a binary expression
  1182                                 mode = EXPR;
  1182 //                                mode = EXPR;
  1183                                 JCExpression e = term2Rest(t1, TreeInfo.shiftPrec);
  1183 //                                JCExpression e = term2Rest(t1, TreeInfo.shiftPrec);
  1184                                 t = F.at(pos1).Binary(op, t, e);
  1184 //                                t = F.at(pos1).Binary(op, t, e);
  1185                                 t = termRest(term1Rest(term2Rest(t, TreeInfo.orPrec)));
  1185 //                                t = termRest(term1Rest(term2Rest(t, TreeInfo.orPrec)));
  1186                             }
  1186 //                            }
  1187                         }
  1187 //                        }
  1188                         break loop;
  1188 //                        break loop;
  1189                     default:
  1189                     default:
  1190                         break loop;
  1190                         break loop;
  1191                     }
  1191                     }
  1192                 }
  1192                 }
  1193             }
  1193             }