blob: 4b0bcfb38894ac5e4e30f6a7965ccf0e9a3a4820 [file] [log] [blame]
import org.checkerframework.checker.testchecker.wholeprograminference.qual.Sibling1;
import org.checkerframework.checker.testchecker.wholeprograminference.qual.Sibling2;
class OverriddenMethodsTestParent {
public void foo(@Sibling1 Object obj, @Sibling2 Object obj2) {}
public void bar(@Sibling1 OverriddenMethodsTestParent this, @Sibling2 Object obj) {}
public void barz(@Sibling1 OverriddenMethodsTestParent this, @Sibling2 Object obj) {}
public void qux(Object obj1, Object obj2) {
// :: warning: argument
foo(obj1, obj2);
}
public void thud(Object obj1, Object obj2) {
// :: warning: argument
foo(obj1, obj2);
}
}
class OverriddenMethodsTestChild extends OverriddenMethodsTestParent {
@Override
public void foo(Object obj, Object obj2) {
// :: warning: (assignment)
@Sibling1 Object o = obj;
// :: warning: (assignment)
@Sibling2 Object o2 = obj2;
}
@Override
public void bar(Object obj) {
// :: warning: (assignment)
@Sibling1 OverriddenMethodsTestChild child = this;
// :: warning: (assignment)
@Sibling2 Object o = obj;
}
@SuppressWarnings("all")
@Override
public void barz(Object obj) {}
public void callbarz(Object obj) {
// If the @SuppressWarnings("all") on the overridden version of barz above is not
// respected, and the annotations on the receiver and parameter of barz are
// inferred, then the following call to barz will result in a method.invocation
// and an argument type checking errors.
barz(obj);
}
public void callqux(@Sibling1 Object obj1, @Sibling2 Object obj2) {
qux(obj1, obj2);
}
}