import org.checkerframework.checker.initialization.qual.Initialized;
import org.checkerframework.checker.initialization.qual.NotOnlyInitialized;
import org.checkerframework.checker.initialization.qual.UnknownInitialization;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.dataflow.qual.Pure;
public class Simple {
Simple f;
@NotOnlyInitialized Simple g;
@Pure
int pure() {
return 1;
}
//:: error: (initialization.fields.uninitialized)
public Simple(String arg) {}
void test() {
@NonNull String s = "234";
//:: error: (assignment.type.incompatible)
s = null;
System.out.println(s);
}
void test2(@UnknownInitialization @NonNull Simple t) {
//:: error: (assignment.type.incompatible)
@NonNull Simple a = t.f;
}
// check committed-only semantics for fields
void test3(@UnknownInitialization @NonNull Simple t) {
@Initialized @Nullable Simple a = t.f;
//:: error: (assignment.type.incompatible)
@Initialized @Nullable Simple b = t.g;
}
void simplestTestEver() {
@NonNull String a = "abc";
//:: error: (assignment.type.incompatible)
a = null;
//:: error: (assignment.type.incompatible)
@NonNull String b = null;
}
void anotherMethod() {
@Nullable String s = null;
@Initialized @Nullable String t = s;
}
}