--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Tue Mar 12 16:02:13 2013 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Tue Mar 12 16:02:43 2013 +0000
@@ -641,6 +641,8 @@
if (inferenceContext.inferenceVars().contains(b)) {
UndetVar uv2 = (UndetVar)inferenceContext.asFree(b);
//alpha <: beta
+ //0. set beta :> alpha
+ uv2.addBound(InferenceBound.LOWER, uv.qtype, infer.types);
//1. copy alpha's lower to beta's
for (Type l : uv.getBounds(InferenceBound.LOWER)) {
uv2.addBound(InferenceBound.LOWER, inferenceContext.asInstType(l), infer.types);
@@ -664,6 +666,8 @@
if (inferenceContext.inferenceVars().contains(b)) {
UndetVar uv2 = (UndetVar)inferenceContext.asFree(b);
//alpha :> beta
+ //0. set beta <: alpha
+ uv2.addBound(InferenceBound.UPPER, uv.qtype, infer.types);
//1. copy alpha's upper to beta's
for (Type u : uv.getBounds(InferenceBound.UPPER)) {
uv2.addBound(InferenceBound.UPPER, inferenceContext.asInstType(u), infer.types);
@@ -687,6 +691,8 @@
if (inferenceContext.inferenceVars().contains(b)) {
UndetVar uv2 = (UndetVar)inferenceContext.asFree(b);
//alpha == beta
+ //0. set beta == alpha
+ uv2.addBound(InferenceBound.EQ, uv.qtype, infer.types);
//1. copy all alpha's bounds to beta's
for (InferenceBound ib : InferenceBound.values()) {
for (Type b2 : uv.getBounds(ib)) {
@@ -1228,10 +1234,6 @@
if (Type.containsAny(uv_i.getBounds(InferenceBound.values()), List.of(j))) {
//update i's deps
n_i.deps.add(n_j);
- //update j's deps - only if i's bounds contain _exactly_ j
- if (uv_i.getBounds(InferenceBound.values()).contains(j)) {
- n_j.deps.add(n_i);
- }
}
}
}