File: MethodValLUBTest.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 (102 lines) | stat: -rw-r--r-- 3,109 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
import java.lang.reflect.Method;
import org.checkerframework.common.reflection.qual.MethodVal;

public class MethodValLUBTest {
    Object unknown = null;
    boolean flag = false;

    @MethodVal(className = "c1", methodName = "m1", params = 0) Object c1m10 = null;

    @MethodVal(className = "c2", methodName = "m2", params = 1) Object c2m21 = null;

    void basicLub() {
        if (flag) {
            unknown = c1m10;
        } else {
            unknown = c2m21;
        }
        @MethodVal(
                className = {"c1", "c2"},
                methodName = {"m1", "m2"},
                params = {0, 1})
        Object lub = unknown;
        // :: error: (assignment.type.incompatible)
        c1m10 = unknown;
        // :: error: (assignment.type.incompatible)
        c2m21 = unknown;
    }

    @MethodVal(className = "c1", methodName = "m1", params = 0) Object c1m10duplicate = null;

    void lubSameType() {
        if (flag) {
            unknown = c1m10;
        } else {
            unknown = c1m10duplicate;
        }
        @MethodVal(className = "c1", methodName = "m1", params = 0) Object lub = unknown;
    }

    @MethodVal(className = "c1", methodName = "m1", params = 1) Object c1m11 = null;

    void simalarSigLub() {
        if (flag) {
            unknown = c1m10;
        } else {
            unknown = c1m11;
        }
        @MethodVal(
                className = {"c1", "c1"},
                methodName = {"m1", "m1"},
                params = {0, 1})
        Object lub = unknown;
        // :: error: (assignment.type.incompatible)
        c1m10 = unknown;
        // :: error: (assignment.type.incompatible)
        c1m11 = unknown;
    }

    @MethodVal(
            className = {"class", "class2"},
            methodName = {"method", "method2"},
            params = {0, 1})
    Object classClass2Method0 = null;

    @MethodVal(
            className = {"class2", "class"},
            methodName = {"method", "method2"},
            params = {0, 1})
    Object class2classMethod0 = null;

    void setsLub() {
        if (flag) {
            unknown = classClass2Method0;
        } else {
            unknown = class2classMethod0;
        }
        @MethodVal(
                className = {"class2", "class", "class", "class2"},
                methodName = {"method", "method2", "method", "method2"},
                params = {0, 1, 0, 1})
        Object lub = unknown;
        // :: error: (assignment.type.incompatible)
        classClass2Method0 = unknown;
        // :: error: (assignment.type.incompatible)
        class2classMethod0 = unknown;
    }

    void inferedlubTest() throws Exception {
        Class<MethodValInferenceTest> c = MethodValInferenceTest.class;
        Method m;
        if (flag) {
            m = c.getMethod("getA", new Class[0]);
        } else {
            m = c.getMethod("getB", new Class[0]);
        }
        @MethodVal(
                className = {"MethodValInferenceTest", "MethodValInferenceTest"},
                methodName = {"getA", "getB"},
                params = {0, 0})
        Method lub = m;
    }
}