blob: 27483da944606156deaaa7cbcf4e5ead2df44efa [file] [log] [blame]
import org.checkerframework.checker.initialization.qual.*;
import org.checkerframework.checker.nullness.qual.*;
public class Lazy {
@NonNull String f;
@MonotonicNonNull String g;
@MonotonicNonNull String g2;
@org.checkerframework.checker.nullness.qual.MonotonicNonNull String _g;
@org.checkerframework.checker.nullness.qual.MonotonicNonNull String _g2;
// Initialization with null is allowed for legacy reasons.
@MonotonicNonNull String init = null;
public Lazy() {
f = "";
// does not have to initialize g
}
void test() {
g = "";
test2(); // retain non-null property across method calls
g.toLowerCase();
}
void _test() {
_g = "";
test2(); // retain non-null property across method calls
_g.toLowerCase();
}
void test2() {}
void test3() {
// :: error: (dereference.of.nullable)
g.toLowerCase();
}
void test4() {
// :: error: (assignment)
g = null;
// :: error: (monotonic)
g = g2;
}
void _test3() {
// :: error: (dereference.of.nullable)
_g.toLowerCase();
}
void _test4() {
// :: error: (assignment)
_g = null;
// :: error: (monotonic)
_g = _g2;
}
}