blob: 21c0f0bc8dc0bd4111de7f669cc31246f4ecb08b [file] [log] [blame]
// Unit tests for the poly annotation.
import org.checkerframework.checker.mustcall.qual.*;
@MustCall("close") class PolyTests {
static @PolyMustCall Object id(@PolyMustCall Object obj) {
return obj;
}
static void test1(@Owning @MustCall("close") Object o) {
@MustCall("close") Object o1 = id(o);
// :: error: assignment
@MustCall({}) Object o2 = id(o);
}
static void test2(@Owning @MustCall({}) Object o) {
@MustCall("close") Object o1 = id(o);
@MustCall({}) Object o2 = id(o);
}
// These sort of constructors will always appear in stub files and are unverifiable for now.
@SuppressWarnings("mustcall:annotations.on.use")
@PolyMustCall PolyTests(@PolyMustCall Object obj) {}
static void test3(@Owning @MustCall({"close"}) Object o) {
@MustCall("close") Object o1 = new PolyTests(o);
// :: error: assignment
@MustCall({}) Object o2 = new PolyTests(o);
}
static void test4(@Owning @MustCall({}) Object o) {
@MustCall("close") Object o1 = new PolyTests(o);
@MustCall({}) Object o2 = new PolyTests(o);
}
static void testArbitary(@Owning PolyTests p) {
@MustCall("close") Object o1 = p;
// :: error: assignment
@MustCall({}) Object o2 = p;
}
}