File: ClassValSubtypingTest.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 (116 lines) | stat: -rw-r--r-- 2,844 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import org.checkerframework.common.reflection.qual.ClassBound;
import org.checkerframework.common.reflection.qual.ClassVal;

public class ClassValSubtypingTest {
    @ClassVal("a") Object a = null;

    @ClassVal({"a", "b"}) Object ab = null;

    @ClassVal("c") Object c = null;

    @ClassVal({"c", "d"}) Object cd = null;

    Object unknown = null;

    void assignToUnknown() {
        unknown = a;
        unknown = ab;
        unknown = c;
        unknown = cd;
    }

    void assignUnknown() {
        // :: error: (assignment.type.incompatible)
        a = unknown;
        // :: error: (assignment.type.incompatible)
        ab = unknown;
        // :: error: (assignment.type.incompatible)
        c = unknown;
        // :: error: (assignment.type.incompatible)
        cd = unknown;
    }

    void assignments() {
        // :: error: (assignment.type.incompatible)
        a = ab;
        ab = a;
        // :: error: (assignment.type.incompatible)
        a = c;
        // :: error: (assignment.type.incompatible)
        ab = c;
        // :: error: (assignment.type.incompatible)
        ab = cd;
    }
}

class ClassBoundSubtypingTest {
    @ClassBound("a") Object a = null;

    @ClassBound({"a", "b"}) Object ab = null;

    @ClassBound("c") Object c = null;

    @ClassBound({"c", "d"}) Object cd = null;

    Object unknown = null;

    void assignToUnknown() {
        unknown = a;
        unknown = ab;
        unknown = c;
        unknown = cd;
    }

    void assignUnknown() {
        // :: error: (assignment.type.incompatible)
        a = unknown;
        // :: error: (assignment.type.incompatible)
        ab = unknown;
        // :: error: (assignment.type.incompatible)
        c = unknown;
        // :: error: (assignment.type.incompatible)
        cd = unknown;
    }

    void assignments() {
        // :: error: (assignment.type.incompatible)
        a = ab;
        ab = a;
        // :: error: (assignment.type.incompatible)
        a = c;
        // :: error: (assignment.type.incompatible)
        ab = c;
        // :: error: (assignment.type.incompatible)
        ab = cd;
    }
}

class ClassValClassBoundSubtypingTest {
    @ClassVal("a") Object a = null;

    @ClassVal({"a", "b"}) Object ab = null;

    @ClassBound("a") Object aBound = null;

    @ClassBound({"a", "b"}) Object abBound = null;

    void assignments1() {
        // :: error: (assignment.type.incompatible)
        a = aBound;
        // :: error: (assignment.type.incompatible)
        ab = aBound;
        // :: error: (assignment.type.incompatible)
        a = abBound;
        // :: error: (assignment.type.incompatible)
        ab = abBound;
    }

    void assignments2() {
        aBound = a;
        // :: error: (assignment.type.incompatible)
        aBound = ab;

        abBound = a;
        abBound = ab;
    }
}