blob: 3c563a65d4e96d5c890e0a5e99d39f5044abb3c3 [file] [log] [blame]
// simple subtyping test for the MustCall annotation
import org.checkerframework.checker.mustcall.qual.*;
class Subtyping {
Object unannotatedObj;
void test_act(@Owning @MustCallUnknown Object o) {
@MustCallUnknown Object act = o;
// :: error: assignment
@MustCall("close") Object file = o;
// :: error: assignment
@MustCall({"close", "read"}) Object f2 = o;
// :: error: assignment
@MustCall({}) Object notAfile = o;
// :: error: assignment
unannotatedObj = o;
}
void test_close(@Owning @MustCall("close") Object o) {
@MustCallUnknown Object act = o;
@MustCall("close") Object file = o;
@MustCall({"close", "read"}) Object f2 = o;
// :: error: assignment
@MustCall({}) Object notAfile = o;
// :: error: assignment
unannotatedObj = o;
}
void test_close_read(@Owning @MustCall({"close", "read"}) Object o) {
@MustCallUnknown Object act = o;
// :: error: assignment
@MustCall("close") Object file = o;
@MustCall({"close", "read"}) Object f2 = o;
// :: error: assignment
@MustCall({}) Object notAfile = o;
// :: error: assignment
unannotatedObj = o;
}
void test_blank(@Owning @MustCall({}) Object o) {
@MustCallUnknown Object act = o;
@MustCall("close") Object file = o;
@MustCall({"close", "read"}) Object f2 = o;
@MustCall({}) Object notAfile = o;
unannotatedObj = o;
}
void test_unannotated(@Owning Object o) {
@MustCallUnknown Object act = o;
@MustCall("close") Object file = o;
@MustCall({"close", "read"}) Object f2 = o;
@MustCall({}) Object notAfile = o;
unannotatedObj = o;
}
}