1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
import org.checkerframework.checker.nullness.qual.*;
public class InvariantTypes {
// The RHS is @NonNull [], but context decides to make it @Nullable
@Nullable Object[] noa = {"non-null!"};
// Type for array creation is propagated from LHS
@MonotonicNonNull Object[] f = new Object[5];
void testAsLocal() {
@MonotonicNonNull Object[] lo;
lo = new Object[5];
// :: error: (assignment.type.incompatible)
lo[0] = null;
lo[0] = new Object();
// :: error: (dereference.of.nullable)
lo[1].toString();
}
// Type for array creation is propagated from LHS
@PolyNull Object[] po = new Object[5];
void testDecl(@MonotonicNonNull Object[] p) {}
void testCall() {
// Type for array creation is propaged from parameter type
testDecl(new Object[5]);
}
}
|