src/share/classes/com/sun/tools/javac/comp/Check.java

changeset 1496
f785dcac17b7
parent 1492
df694c775e8a
child 1497
7aa2025bbb7b
     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 {

mercurial