langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
changeset 15374 fb8f6acf09cc
parent 15361 01f1828683e6
child 15377 515846bb6637
equal deleted inserted replaced
15373:2fd24f81bbe8 15374:fb8f6acf09cc
    34 import com.sun.tools.javac.tree.*;
    34 import com.sun.tools.javac.tree.*;
    35 import com.sun.tools.javac.util.*;
    35 import com.sun.tools.javac.util.*;
    36 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
    36 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
    37 import com.sun.tools.javac.util.List;
    37 import com.sun.tools.javac.util.List;
    38 
    38 
    39 import com.sun.tools.javac.tree.JCTree.*;
       
    40 import com.sun.tools.javac.code.Lint;
    39 import com.sun.tools.javac.code.Lint;
    41 import com.sun.tools.javac.code.Lint.LintCategory;
    40 import com.sun.tools.javac.code.Lint.LintCategory;
    42 import com.sun.tools.javac.code.Type.*;
    41 import com.sun.tools.javac.code.Type.*;
    43 import com.sun.tools.javac.code.Symbol.*;
    42 import com.sun.tools.javac.code.Symbol.*;
    44 import com.sun.tools.javac.comp.DeferredAttr.DeferredAttrContext;
    43 import com.sun.tools.javac.comp.DeferredAttr.DeferredAttrContext;
    45 import com.sun.tools.javac.comp.Infer.InferenceContext;
    44 import com.sun.tools.javac.comp.Infer.InferenceContext;
    46 import com.sun.tools.javac.comp.Infer.InferenceContext.FreeTypeListener;
    45 import com.sun.tools.javac.comp.Infer.InferenceContext.FreeTypeListener;
       
    46 import com.sun.tools.javac.tree.JCTree.*;
       
    47 import com.sun.tools.javac.tree.JCTree.JCPolyExpression.*;
    47 
    48 
    48 import static com.sun.tools.javac.code.Flags.*;
    49 import static com.sun.tools.javac.code.Flags.*;
    49 import static com.sun.tools.javac.code.Flags.ANNOTATION;
    50 import static com.sun.tools.javac.code.Flags.ANNOTATION;
    50 import static com.sun.tools.javac.code.Flags.SYNCHRONIZED;
    51 import static com.sun.tools.javac.code.Flags.SYNCHRONIZED;
    51 import static com.sun.tools.javac.code.Kinds.*;
    52 import static com.sun.tools.javac.code.Kinds.*;
   898                    types.erasure(owntype.getReturnType()),
   899                    types.erasure(owntype.getReturnType()),
   899                    types.erasure(owntype.getThrownTypes()),
   900                    types.erasure(owntype.getThrownTypes()),
   900                    syms.methodClass);
   901                    syms.methodClass);
   901         }
   902         }
   902         if (useVarargs) {
   903         if (useVarargs) {
   903             JCTree tree = env.tree;
       
   904             Type argtype = owntype.getParameterTypes().last();
   904             Type argtype = owntype.getParameterTypes().last();
   905             if (!types.isReifiable(argtype) &&
   905             if (!types.isReifiable(argtype) &&
   906                     (!allowSimplifiedVarargs ||
   906                     (!allowSimplifiedVarargs ||
   907                     sym.attribute(syms.trustMeType.tsym) == null ||
   907                     sym.attribute(syms.trustMeType.tsym) == null ||
   908                     !isTrustMeAllowedOnMethod(sym))) {
   908                     !isTrustMeAllowedOnMethod(sym))) {
   909                 warnUnchecked(env.tree.pos(),
   909                 warnUnchecked(env.tree.pos(),
   910                                   "unchecked.generic.array.creation",
   910                                   "unchecked.generic.array.creation",
   911                                   argtype);
   911                                   argtype);
   912             }
   912             }
   913             if (!((MethodSymbol)sym.baseSymbol()).isSignaturePolymorphic(types)) {
   913             if (!((MethodSymbol)sym.baseSymbol()).isSignaturePolymorphic(types)) {
   914                 Type elemtype = types.elemtype(argtype);
   914                 TreeInfo.setVarargsElement(env.tree, types.elemtype(argtype));
   915                 switch (tree.getTag()) {
       
   916                     case APPLY:
       
   917                         ((JCMethodInvocation) tree).varargsElement = elemtype;
       
   918                         break;
       
   919                     case NEWCLASS:
       
   920                         ((JCNewClass) tree).varargsElement = elemtype;
       
   921                         break;
       
   922                     case REFERENCE:
       
   923                         ((JCMemberReference) tree).varargsElement = elemtype;
       
   924                         break;
       
   925                     default:
       
   926                         throw new AssertionError(""+tree);
       
   927                 }
       
   928             }
   915             }
   929          }
   916          }
       
   917          PolyKind pkind = (sym.type.hasTag(FORALL) &&
       
   918                  sym.type.getReturnType().containsAny(((ForAll)sym.type).tvars)) ?
       
   919                  PolyKind.POLY : PolyKind.STANDALONE;
       
   920          TreeInfo.setPolyKind(env.tree, pkind);
   930          return owntype;
   921          return owntype;
   931     }
   922     }
   932     //where
   923     //where
   933         private void assertConvertible(JCTree tree, Type actual, Type formal, Warner warn) {
   924         private void assertConvertible(JCTree tree, Type actual, Type formal, Warner warn) {
   934             if (types.isConvertible(actual, formal, warn))
   925             if (types.isConvertible(actual, formal, warn))