langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java
changeset 13438 83729994273a
parent 12916 021c069e8e27
child 13439 3025d6ac1401
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java	Wed Jul 05 18:18:18 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java	Thu Aug 02 18:22:41 2012 +0100
@@ -1131,8 +1131,8 @@
         for (JCTree resource : tree.resources) {
             CheckContext twrContext = new Check.NestedCheckContext(resultInfo.checkContext) {
                 @Override
-                public void report(DiagnosticPosition pos, Type found, Type req, JCDiagnostic details) {
-                    chk.basicHandler.report(pos, found, req, diags.fragment("try.not.applicable.to.type", found));
+                public void report(DiagnosticPosition pos, JCDiagnostic details) {
+                    chk.basicHandler.report(pos, diags.fragment("try.not.applicable.to.type", details));
                 }
             };
             ResultInfo twrResult = new ResultInfo(VAL, syms.autoCloseableType, twrContext);
@@ -1865,7 +1865,7 @@
 
     Type attribDiamond(Env<AttrContext> env,
                         final JCNewClass tree,
-                        Type clazztype,
+                        final Type clazztype,
                         List<Type> argtypes,
                         List<Type> typeargtypes) {
         if (clazztype.isErroneous() ||
@@ -1892,27 +1892,26 @@
                     argtypes,
                     typeargtypes);
 
+        Type owntype = types.createErrorType(clazztype);
         if (constructor.kind == MTH) {
-            try {
-                clazztype = rawCheckMethod(site,
-                        constructor,
-                        resultInfo,
-                        localEnv,
-                        tree.args,
-                        argtypes,
-                        typeargtypes,
-                        localEnv.info.varArgs).getReturnType();
-            } catch (Resolve.InapplicableMethodException ex) {
-                //an error occurred while inferring uninstantiated type-variables
-                resultInfo.checkContext.report(tree.clazz.pos(), clazztype, resultInfo.pt,
-                        diags.fragment("cant.apply.diamond.1", diags.fragment("diamond", clazztype.tsym), ex.diagnostic));
-                clazztype = syms.errType;
-            }
-        } else {
-            clazztype = syms.errType;
+            ResultInfo diamondResult = new ResultInfo(VAL, resultInfo.pt, new Check.NestedCheckContext(resultInfo.checkContext) {
+                @Override
+                public void report(DiagnosticPosition pos, JCDiagnostic details) {
+                    enclosingContext.report(tree.clazz.pos(),
+                            diags.fragment("cant.apply.diamond.1", diags.fragment("diamond", clazztype.tsym), details));
+                }
+            });
+            owntype = checkMethod(site,
+                    constructor,
+                    diamondResult,
+                    localEnv,
+                    tree.args,
+                    argtypes,
+                    typeargtypes,
+                    localEnv.info.varArgs).getReturnType();
         }
 
-        return chk.checkClassType(tree.clazz.pos(), clazztype, true);
+        return chk.checkClassType(tree.clazz.pos(), owntype, true);
     }
 
     /** Make an attributed null check tree.
@@ -2687,32 +2686,6 @@
                             List<Type> argtypes,
                             List<Type> typeargtypes,
                             boolean useVarargs) {
-        try {
-            return rawCheckMethod(site, sym, resultInfo, env, argtrees, argtypes, typeargtypes, useVarargs);
-        } catch (Resolve.InapplicableMethodException ex) {
-            String key = ex.getDiagnostic() == null ?
-                    "cant.apply.symbol" :
-                    "cant.apply.symbol.1";
-            log.error(env.tree.pos, key,
-                      Kinds.kindName(sym),
-                      sym.name == names.init ? sym.owner.name : sym.name,
-                      rs.methodArguments(sym.type.getParameterTypes()),
-                      rs.methodArguments(argtypes),
-                      Kinds.kindName(sym.owner),
-                      sym.owner.type,
-                      ex.getDiagnostic());
-            return types.createErrorType(site);
-        }
-    }
-
-    private Type rawCheckMethod(Type site,
-                            Symbol sym,
-                            ResultInfo resultInfo,
-                            Env<AttrContext> env,
-                            final List<JCExpression> argtrees,
-                            List<Type> argtypes,
-                            List<Type> typeargtypes,
-                            boolean useVarargs) {
         // Test (5): if symbol is an instance method of a raw type, issue
         // an unchecked warning if its argument types change under erasure.
         if (allowGenerics &&
@@ -2733,19 +2706,29 @@
         // Resolve.instantiate from the symbol's type as well as
         // any type arguments and value arguments.
         noteWarner.clear();
-        Type owntype = rs.rawInstantiate(env,
-                                          site,
-                                          sym,
-                                          resultInfo,
-                                          argtypes,
-                                          typeargtypes,
-                                          true,
-                                          useVarargs,
-                                          noteWarner);
-
-        boolean unchecked = noteWarner.hasNonSilentLint(LintCategory.UNCHECKED);
-
-        return chk.checkMethod(owntype, sym, env, argtrees, argtypes, useVarargs, unchecked);
+        try {
+            Type owntype = rs.rawInstantiate(
+                    env,
+                    site,
+                    sym,
+                    resultInfo,
+                    argtypes,
+                    typeargtypes,
+                    allowBoxing,
+                    useVarargs,
+                    noteWarner);
+
+            return chk.checkMethod(owntype, sym, env, argtrees, argtypes, useVarargs,
+                    noteWarner.hasNonSilentLint(LintCategory.UNCHECKED));
+        } catch (Infer.InferenceException ex) {
+            //invalid target type - propagate exception outwards or report error
+            //depending on the current check context
+            resultInfo.checkContext.report(env.tree.pos(), ex.getDiagnostic());
+            return types.createErrorType(site);
+        } catch (Resolve.InapplicableMethodException ex) {
+            Assert.error();
+            return null;
+        }
     }
 
     /**