diff -r 905e151a185a -r d57378c34fdb src/share/classes/com/sun/tools/javac/code/Types.java --- a/src/share/classes/com/sun/tools/javac/code/Types.java Tue Jan 13 13:27:14 2009 +0000 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java Tue Jan 13 13:28:20 2009 +0000 @@ -880,12 +880,12 @@ if (warn != warnStack.head) { try { warnStack = warnStack.prepend(warn); - return isCastable.visit(t, s); + return isCastable.visit(t,s); } finally { warnStack = warnStack.tail; } } else { - return isCastable.visit(t, s); + return isCastable.visit(t,s); } } // where @@ -983,10 +983,10 @@ if (highSub != null) { assert a.tsym == highSub.tsym && a.tsym == lowSub.tsym : a.tsym + " != " + highSub.tsym + " != " + lowSub.tsym; - if (!disjointTypes(aHigh.getTypeArguments(), highSub.getTypeArguments()) - && !disjointTypes(aHigh.getTypeArguments(), lowSub.getTypeArguments()) - && !disjointTypes(aLow.getTypeArguments(), highSub.getTypeArguments()) - && !disjointTypes(aLow.getTypeArguments(), lowSub.getTypeArguments())) { + if (!disjointTypes(aHigh.allparams(), highSub.allparams()) + && !disjointTypes(aHigh.allparams(), lowSub.allparams()) + && !disjointTypes(aLow.allparams(), highSub.allparams()) + && !disjointTypes(aLow.allparams(), lowSub.allparams())) { if (upcast ? giveWarning(a, highSub) || giveWarning(a, lowSub) : giveWarning(highSub, a) || giveWarning(lowSub, a)) warnStack.head.warnUnchecked(); @@ -1197,6 +1197,7 @@ s = upperBound(s); if (s.tag == TYPEVAR) s = s.getUpperBound(); + return !isSubtype(t, s); } // @@ -3189,7 +3190,7 @@ private boolean giveWarning(Type from, Type to) { // To and from are (possibly different) parameterizations // of the same class or interface - return to.isParameterized() && !containsType(to.getTypeArguments(), from.getTypeArguments()); + return to.isParameterized() && !containsType(to.allparams(), from.allparams()); } private List superClosure(Type t, Type s) {