blob: da9e793ec1936d0236d07bbdaf00f7ef75fe115a [file] [log] [blame]
// Test case for issue #986:
// https://github.com/typetools/checker-framework/issues/986
// @skip-test until the issue is fixed
public class Issue986 {
public static void main(String[] args) {
String array[] = new String[3];
array[0].length(); // NPE here
}
// Flow should refine @MonotonicNonNull component types to @NonNull.
void testArr4(@NonNull Object @NonNull [] nno1, @MonotonicNonNull Object @NonNull [] lnno1) {
@MonotonicNonNull Object[] lnno2;
@NonNull Object[] nno2;
nno2 = nno1;
lnno2 = lnno1;
lnno2 = nno1;
// :: error: (assignment)
nno2 = lnno1;
lnno2 = NullnessUtil.castNonNullDeep(nno1);
nno2 = NullnessUtil.castNonNullDeep(lnno1);
lnno2 = NullnessUtil.castNonNullDeep(nno1);
nno2 = NullnessUtil.castNonNullDeep(lnno1);
}
// Flow should refine @MonotonicNonNull component types to @NonNull.
// This is a prerequisite for issue #986 (or for workarounds to issue #986).
void testArr5(@MonotonicNonNull Object @NonNull [] a) {
@MonotonicNonNull Object[] l5 = NullnessUtil.castNonNullDeep(a);
@NonNull Object[] l6 = l5;
@NonNull Object[] l7 = NullnessUtil.castNonNullDeep(a);
}
}