langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java
changeset 25435 928866794984
parent 25279 a665d5cbb8c3
child 25443 9187d77f2c64
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Fri Jul 04 10:52:22 2014 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Fri Jul 04 16:34:44 2014 +0100
@@ -95,7 +95,7 @@
     public final boolean varargsEnabled;
     public final boolean allowMethodHandles;
     public final boolean allowFunctionalInterfaceMostSpecific;
-    public final boolean checkVarargsAccessDuringResolution;
+    public final boolean checkVarargsAccessAfterResolution;
     private final boolean debugResolve;
     private final boolean compactMethodDiags;
     final EnumSet<VerboseResolutionMode> verboseResolutionMode;
@@ -137,7 +137,7 @@
         Target target = Target.instance(context);
         allowMethodHandles = target.hasMethodHandles();
         allowFunctionalInterfaceMostSpecific = source.allowFunctionalInterfaceMostSpecific();
-        checkVarargsAccessDuringResolution =
+        checkVarargsAccessAfterResolution =
                 source.allowPostApplicabilityVarargsAccessCheck();
         polymorphicSignatureScope = new Scope(syms.noSymbol);
 
@@ -836,13 +836,16 @@
                                     Warner warn) {
             super.argumentsAcceptable(env, deferredAttrContext, argtypes, formals, warn);
             //should we expand formals?
-            if ((!checkVarargsAccessDuringResolution ||
-                (checkVarargsAccessDuringResolution &&
-                 deferredAttrContext.mode == AttrMode.CHECK)) &&
-                deferredAttrContext.phase.isVarargsRequired()) {
-                //check varargs element type accessibility
-                varargsAccessible(env, types.elemtype(formals.last()),
-                        deferredAttrContext.inferenceContext);
+            if (deferredAttrContext.phase.isVarargsRequired()) {
+                Type typeToCheck = null;
+                if (!checkVarargsAccessAfterResolution) {
+                    typeToCheck = types.elemtype(formals.last());
+                } else if (deferredAttrContext.mode == AttrMode.CHECK) {
+                    typeToCheck = types.erasure(types.elemtype(formals.last()));
+                }
+                if (typeToCheck != null) {
+                    varargsAccessible(env, typeToCheck, deferredAttrContext.inferenceContext);
+                }
             }
         }