File: NotOnlyInitializedTest.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 22,840 kB
  • sloc: java: 145,910; xml: 839; sh: 518; makefile: 401; perl: 26
file content (34 lines) | stat: -rw-r--r-- 1,112 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
30
31
32
33
34
import org.checkerframework.checker.initialization.qual.NotOnlyInitialized;
import org.checkerframework.checker.initialization.qual.UnderInitialization;

public class NotOnlyInitializedTest {

    @NotOnlyInitialized NotOnlyInitializedTest f;
    NotOnlyInitializedTest g;

    public NotOnlyInitializedTest() {
        f = new NotOnlyInitializedTest();
        g = new NotOnlyInitializedTest();
    }

    public NotOnlyInitializedTest(char i) {
        // we can store something that is under initialization (like this) in f, but not in g
        f = this;
        // :: error: (assignment.type.incompatible)
        g = this;
    }

    static void testDeref(NotOnlyInitializedTest o) {
        // o is fully iniatlized, so we can dereference its fields
        o.f.toString();
        o.g.toString();
    }

    static void testDeref2(@UnderInitialization NotOnlyInitializedTest o) {
        // o is not fully iniatlized, so we cannot dereference its fields
        // :: error: (dereference.of.nullable)
        o.f.toString();
        // :: error: (dereference.of.nullable)
        o.g.toString();
    }
}