--- 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);
+ }
}
}