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]);
}
}