File: MethodValSubtypingTest.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 (69 lines) | stat: -rw-r--r-- 1,987 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
import org.checkerframework.common.reflection.qual.MethodVal;

public class MethodValSubtypingTest {
    @MethodVal(className = "class", methodName = "method", params = 0) Object classMethod0 = null;

    @MethodVal(className = "class", methodName = "method", params = 0) Object classMethod0Dup = null;

    @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;

    Object unknown = null;

    void methodValSubtyping() {
        classMethod0 = classMethod0Dup;
        // :: error: (assignment.type.incompatible)
        classMethod0 = classClass2Method0;
        // :: error: (assignment.type.incompatible)
        classClass2Method0 = class2classMethod0;
        classClass2Method0 = classMethod0;
    }

    void bottomMethodVal() {
        classMethod0 = null;
        classClass2Method0 = null;
    }

    void unknownMethodVal1() {
        unknown = class2classMethod0;
    }

    void unknownMethodVal2() {
        // :: error: (assignment.type.incompatible)
        class2classMethod0 = unknown;
    }

    @MethodVal(
            className = {"aclass", "aclass", "aclass"},
            methodName = {"amethod", "amethod", "amethod"},
            params = {0, 1, 2})
    Object triple = null;

    @MethodVal(
            className = {"aclass", "aclass", "aclass"},
            methodName = {"amethod", "amethod", "amethod"},
            params = {2, 1, 0})
    Object tripleAgain = null;

    @MethodVal(
            className = {"aclass"},
            methodName = {"amethod"},
            params = {2})
    Object one = null;

    void test() {
        tripleAgain = triple;
        // :: error: (assignment.type.incompatible)
        one = triple;
        triple = one;
    }
}