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.type.incompatible)
g = null;
//:: error: (monotonic.type.incompatible)
g = g2;
}
void _test3() {
//:: error: (dereference.of.nullable)
_g.toLowerCase();
}
void _test4() {
//:: error: (assignment.type.incompatible)
_g = null;
//:: error: (monotonic.type.incompatible)
_g = _g2;
}
}