aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/com/sun/tools/javac/comp/Resolve.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/classes/com/sun/tools/javac/comp/Resolve.java')
-rw-r--r--src/share/classes/com/sun/tools/javac/comp/Resolve.java21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/share/classes/com/sun/tools/javac/comp/Resolve.java
index 043833e5..39faf362 100644
--- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java
+++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java
@@ -96,7 +96,7 @@ public class Resolve {
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;
@@ -138,7 +138,7 @@ public class Resolve {
Target target = Target.instance(context);
allowMethodHandles = target.hasMethodHandles();
allowFunctionalInterfaceMostSpecific = source.allowFunctionalInterfaceMostSpecific();
- checkVarargsAccessDuringResolution =
+ checkVarargsAccessAfterResolution =
source.allowPostApplicabilityVarargsAccessCheck();
polymorphicSignatureScope = new Scope(syms.noSymbol);
@@ -837,13 +837,16 @@ public class Resolve {
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);
+ }
}
}