blob: 85176758fb635e1a2d4a33a3b9ba726993f6969d [file] [log] [blame]
import org.checkerframework.checker.testchecker.wholeprograminference.qual.Parent;
import org.checkerframework.checker.testchecker.wholeprograminference.qual.Sibling1;
import org.checkerframework.checker.testchecker.wholeprograminference.qual.Sibling2;
public class TypeVariablesTest<T1 extends @Parent Object, T2 extends @Parent Object> {
// This method's parameter type should not be updated by the whole-program inference.
// Even though there is only one call to foo with argument of type @WholeProgramInferenceBottom,
// the method has in its signature that the parameter is a subtype of @Parent,
// therefore no annotation should be added.
public static <A extends @Parent Object, B extends @Parent Object> TypeVariablesTest<A, B> foo(
A a, B b) {
return null;
}
public static <A extends @Parent Object, B extends A> void typeVarWithTypeVarUB(A a, B b) {}
void test1() {
@SuppressWarnings("cast.unsafe")
@Parent String s = (@Parent String) "";
foo(getSibling1(), getSibling2());
typeVarWithTypeVarUB(getSibling1(), getSibling2());
}
static @Sibling1 int getSibling1() {
return 0;
}
static @Sibling2 int getSibling2() {
return 0;
}
}