--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Fri Feb 27 11:51:53 2015 +0000
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Fri Feb 27 18:20:33 2015 +0000
@@ -1791,8 +1791,7 @@
!t.hasTag(TYPEVAR)) {
return null;
}
- while (t.hasTag(TYPEVAR))
- t = t.getUpperBound();
+ t = types.skipTypeVars(t, false);
if (seen.contains(t.tsym)) {
//degenerate case in which we have a circular
//class hierarchy - because of ill-formed classfiles
@@ -2656,11 +2655,9 @@
InferenceContext inferenceContext,
ReferenceChooser referenceChooser) {
- site = types.capture(site);
+ //step 1 - bound lookup
ReferenceLookupHelper boundLookupHelper = makeReferenceLookupHelper(
referenceTree, site, name, argtypes, typeargtypes, VARARITY);
-
- //step 1 - bound lookup
Env<AttrContext> boundEnv = env.dup(env.tree, env.info.dup());
MethodResolutionContext boundSearchResolveContext = new MethodResolutionContext();
boundSearchResolveContext.methodCheck = methodCheck;
@@ -3044,9 +3041,13 @@
*/
class MethodReferenceLookupHelper extends ReferenceLookupHelper {
+ /** The original method reference lookup site. */
+ Type originalSite;
+
MethodReferenceLookupHelper(JCMemberReference referenceTree, Name name, Type site,
List<Type> argtypes, List<Type> typeargtypes, MethodResolutionPhase maxPhase) {
- super(referenceTree, name, site, argtypes, typeargtypes, maxPhase);
+ super(referenceTree, name, types.skipTypeVars(site, true), argtypes, typeargtypes, maxPhase);
+ this.originalSite = site;
}
@Override
@@ -3062,7 +3063,7 @@
(argtypes.head.hasTag(NONE) ||
types.isSubtypeUnchecked(inferenceContext.asUndetVar(argtypes.head), site))) {
return new UnboundMethodReferenceLookupHelper(referenceTree, name,
- site, argtypes, typeargtypes, maxPhase);
+ originalSite, argtypes, typeargtypes, maxPhase);
} else {
return new ReferenceLookupHelper(referenceTree, name, site, argtypes, typeargtypes, maxPhase) {
@Override
@@ -3114,7 +3115,7 @@
super(referenceTree, name, site, argtypes.tail, typeargtypes, maxPhase);
if (site.isRaw() && !argtypes.head.hasTag(NONE)) {
Type asSuperSite = types.asSuper(argtypes.head, site.tsym);
- this.site = types.capture(asSuperSite);
+ this.site = types.skipTypeVars(asSuperSite, true);
}
}