--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Thu Apr 07 11:03:13 2016 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Fri Apr 08 10:52:26 2016 +0100
@@ -716,6 +716,8 @@
this.t = t;
}
+ public abstract IncorporationAction dup(UndetVar that);
+
/**
* Incorporation action entry-point. Subclasses should define the logic associated with
* this incorporation action.
@@ -765,6 +767,11 @@
}
@Override
+ public IncorporationAction dup(UndetVar that) {
+ return new CheckBounds(that, t, typeFunc, optFilter, from);
+ }
+
+ @Override
void apply(InferenceContext inferenceContext, Warner warn) {
t = typeFunc.apply(inferenceContext, t);
if (optFilter != null && optFilter.test(inferenceContext, t)) return;
@@ -832,6 +839,11 @@
}
@Override
+ public IncorporationAction dup(UndetVar that) {
+ return new EqCheckLegacy(that, t, from);
+ }
+
+ @Override
EnumSet<InferenceBound> boundsToCheck() {
return (from == InferenceBound.EQ) ?
EnumSet.allOf(InferenceBound.class) :
@@ -847,8 +859,17 @@
EnumSet<InferenceBound> to;
CheckInst(UndetVar uv, InferenceBound ib, InferenceBound... rest) {
+ this(uv, EnumSet.of(ib, rest));
+ }
+
+ CheckInst(UndetVar uv, EnumSet<InferenceBound> to) {
super(uv, uv.getInst(), InferenceBound.EQ);
- this.to = EnumSet.of(ib, rest);
+ this.to = to;
+ }
+
+ @Override
+ public IncorporationAction dup(UndetVar that) {
+ return new CheckInst(that, to);
}
@Override
@@ -871,6 +892,11 @@
}
@Override
+ public IncorporationAction dup(UndetVar that) {
+ return new SubstBounds(that);
+ }
+
+ @Override
void apply(InferenceContext inferenceContext, Warner warn) {
for (Type undet : inferenceContext.undetvars) {
//we could filter out variables not mentioning uv2...
@@ -910,6 +936,11 @@
}
@Override
+ public IncorporationAction dup(UndetVar that) {
+ return new CheckUpperBounds(that, t);
+ }
+
+ @Override
void apply(InferenceContext inferenceContext, Warner warn) {
List<Type> boundList = uv.getBounds(InferenceBound.UPPER).stream()
.collect(types.closureCollector(true, types::isSameType));
@@ -958,6 +989,11 @@
this.ib = ib;
}
+ @Override
+ public IncorporationAction dup(UndetVar that) {
+ return new PropagateBounds(that, t, ib);
+ }
+
void apply(InferenceContext inferenceContext, Warner warner) {
Type undetT = inferenceContext.asUndetVar(t);
if (undetT.hasTag(UNDETVAR) && !((UndetVar)undetT).isCaptured()) {