diff options
author | vromero <none@none> | 2014-07-04 16:34:44 +0100 |
---|---|---|
committer | vromero <none@none> | 2014-07-04 16:34:44 +0100 |
commit | 8a07e32c76d6408447fefa34e8bd974434ae4dda (patch) | |
tree | 82351cb836ba684a2f456b43ed41398eb8ec8cb0 /src/share/classes/com/sun/tools/javac/comp/Resolve.java | |
parent | 202eb3e4f8bc099b2ab5f7c8783b45e931958bf1 (diff) |
8049075: javac, wildcards and generic vararg method invocation not accepted
Reviewed-by: mcimadamore
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.java | 21 |
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); + } } } |