1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Tue Jan 15 13:03:11 2013 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jan 16 16:27:01 2013 +0000 1.3 @@ -634,25 +634,40 @@ 1.4 } 1.5 } 1.6 1.7 + Type checkClassOrArrayType(DiagnosticPosition pos, Type t) { 1.8 + if (!t.hasTag(CLASS) && !t.hasTag(ARRAY) && !t.hasTag(ERROR)) { 1.9 + return typeTagError(pos, 1.10 + diags.fragment("type.req.class.array"), 1.11 + asTypeParam(t)); 1.12 + } else { 1.13 + return t; 1.14 + } 1.15 + } 1.16 + 1.17 /** Check that type is a class or interface type. 1.18 * @param pos Position to be used for error reporting. 1.19 * @param t The type to be checked. 1.20 */ 1.21 Type checkClassType(DiagnosticPosition pos, Type t) { 1.22 - if (!t.hasTag(CLASS) && !t.hasTag(ERROR)) 1.23 + if (!t.hasTag(CLASS) && !t.hasTag(ERROR)) { 1.24 return typeTagError(pos, 1.25 diags.fragment("type.req.class"), 1.26 - (t.hasTag(TYPEVAR)) 1.27 - ? diags.fragment("type.parameter", t) 1.28 - : t); 1.29 - else 1.30 + asTypeParam(t)); 1.31 + } else { 1.32 return t; 1.33 + } 1.34 } 1.35 + //where 1.36 + private Object asTypeParam(Type t) { 1.37 + return (t.hasTag(TYPEVAR)) 1.38 + ? diags.fragment("type.parameter", t) 1.39 + : t; 1.40 + } 1.41 1.42 /** Check that type is a valid qualifier for a constructor reference expression 1.43 */ 1.44 Type checkConstructorRefType(DiagnosticPosition pos, Type t) { 1.45 - t = checkClassType(pos, t); 1.46 + t = checkClassOrArrayType(pos, t); 1.47 if (t.hasTag(CLASS)) { 1.48 if ((t.tsym.flags() & (ABSTRACT | INTERFACE)) != 0) { 1.49 log.error(pos, "abstract.cant.be.instantiated"); 1.50 @@ -690,11 +705,8 @@ 1.51 * @param t The type to be checked. 1.52 */ 1.53 Type checkReifiableReferenceType(DiagnosticPosition pos, Type t) { 1.54 - if (!t.hasTag(CLASS) && !t.hasTag(ARRAY) && !t.hasTag(ERROR)) { 1.55 - return typeTagError(pos, 1.56 - diags.fragment("type.req.class.array"), 1.57 - t); 1.58 - } else if (!types.isReifiable(t)) { 1.59 + t = checkClassOrArrayType(pos, t); 1.60 + if (!t.isErroneous() && !types.isReifiable(t)) { 1.61 log.error(pos, "illegal.generic.type.for.instof"); 1.62 return types.createErrorType(t); 1.63 } else {