File: GenericsBounds2.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (29 lines) | stat: -rw-r--r-- 936 bytes parent folder | download | duplicates (3)
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.*;

/*
 * Illustrate a problem with annotations on type variables.
 */
public class GenericsBounds2<X extends @Nullable Object> {
    void m1(X @NonNull [] a1, @Nullable X @NonNull [] a2) {
        // :: error: (assignment.type.incompatible)
        a1 = null;
        // :: error: (assignment.type.incompatible)
        a1[0] = null;

        // :: error: (assignment.type.incompatible)
        a2 = null;
        a2[0] = null;

        // This error is expected when arrays are invariant.
        // Currently, this error is not raised.
        // TODOINVARR:: error: (assignment.type.incompatible)
        a2 = a1;
        a2[0] = null;
    }

    void aaa(@Nullable Object[] p1, @NonNull Object[] p2) {
        // This one is only expected when we switch the default for arrays to be invariant.
        // TODOINVARR:: error: (assignment.type.incompatible)
        p1 = p2;
    }
}