import testlib.wholeprograminference.qual.*;
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() {
//:: warning: (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;
}
}