checker-framework
checker-framework copied to clipboard
False positive with captured wildcards
Several checkers produce a false positive on the following code.
public class Buggy {
<A extends FooClass<A>> void use(FooClass<A> fooClass1, FooClass<A> fooClass2) {
fooClass1.getThenStore().merge(fooClass2.getThenStore());
}
interface FooInterface<V extends FooInterface<V>> {}
interface BarInterface<S extends BarInterface<S>> {}
static abstract class BarClass<V extends FooClass<V>, S extends BarClass<V, S>> implements
BarInterface<S> {
public <S> void merge(S thenStore) {
}
}
static class FooClass<V extends FooClass<V>> implements FooInterface<V> {
FooInterface<?> a;
void addStores(FooInterface<?> a) {
this.a = a;
}
@SuppressWarnings("unchecked")
public <S extends BarClass<V, S>> S getThenStore() {
return (S) a;
}
}
}
/testcases/src/Buggy.java:4: error: [argument] incompatible argument for parameter thenStore of BarClass.merge.
fooClass1.getThenStore().merge(fooClass2.getThenStore());
^
found : @UnknownInterned BarClass<A[ extends @UnknownInterned FooClass<A[ extends @UnknownInterned FooClass<A> super @InternedDistinct Void]> super @InternedDistinct Void], capture#01[ extends @UnknownInterned BarClass<A[ extends @UnknownInterned FooClass<A[ extends @UnknownInterned FooClass<A> super @InternedDistinct Void]> super @InternedDistinct Void], capture#01> super @InternedDistinct Void]>
required: capture#02[ extends @UnknownInterned Object super @InternedDistinct Void]
1 error