Skip to content

Commit fe7b19f

Browse files
authored
Check for proper type
1 parent 97beabc commit fe7b19f

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

framework/src/main/java/org/checkerframework/framework/util/typeinference8/constraint/Expression.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,11 @@ private ReductionResultPair reduceLambda(Java8InferenceContext context) {
280280
AbstractType gi = gs.get(i);
281281
constraintSet.add(new Typing(fi, gi, TypeConstraint.Kind.TYPE_EQUALITY));
282282
}
283-
constraintSet.add(new Typing(tPrime, T, TypeConstraint.Kind.SUBTYPE));
283+
@SuppressWarnings("interning:not.interned") // checking for exact object.
284+
boolean tPrimeNotSameAsT = tPrime != T;
285+
if (tPrimeNotSameAsT) {
286+
constraintSet.add(new Typing(tPrime, T, TypeConstraint.Kind.SUBTYPE));
287+
}
284288
} else {
285289
context.addLambdaParms(lambda.getParameters());
286290
}

framework/src/main/java/org/checkerframework/framework/util/typeinference8/types/VariableBounds.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ public boolean hasWildcardParameterizedLowerOrEqualBound() {
558558
public boolean hasLowerBoundDifferentParam() {
559559
List<AbstractType> parameteredTypes = new ArrayList<>();
560560
for (AbstractType type : bounds.get(BoundKind.LOWER)) {
561-
if (!type.isUseOfVariable() && type.isParameterizedType()) {
561+
if (type.isProper() && type.isParameterizedType()) {
562562
parameteredTypes.add(type);
563563
}
564564
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package typearginfer;
2+
3+
import java.util.Set;
4+
import java.util.concurrent.Callable;
5+
6+
public abstract class Issue6753 {
7+
8+
abstract <E> E call(Callable<E> task);
9+
10+
abstract <T> Set<T> list();
11+
12+
void method(int length) {
13+
Set<String> resources =
14+
call(
15+
() -> {
16+
if (length > 1) {
17+
return list();
18+
} else {
19+
return list();
20+
}
21+
});
22+
}
23+
}

0 commit comments

Comments
 (0)