File: RawTypeTest.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 (102 lines) | stat: -rw-r--r-- 2,492 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.ref.WeakReference;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.List;
import org.checkerframework.checker.regex.qual.*;

class RawTypeTest {

    public void m1(Class<?> c) {
        Class<? extends I2> x = c.asSubclass(I2.class);

        new WeakReference<Object>(x);
        new WeakReference<Class>(x);
        new WeakReference<Class<? extends I2>>(x);

        new WeakReference<Object>(c.asSubclass(I2.class));
        new WeakReference<Class>(c.asSubclass(I2.class));
        new WeakReference<Class<? extends I2>>(c.asSubclass(I2.class));
    }

    /* It would be desirable to optionally check the following code without
     * warnings. See issue 119:
     *
     * https://github.com/typetools/checker-framework/issues/119
     *
    class Raw {
        public void m2(Class<Object> c) {}

        public void m3(Class c) {
            m2(c);
        }

        public void m4() {
            AccessController.doPrivileged(new PrivilegedAction() {
                public Object run() {
                    return null;
                }});
        }

        public void m5(List list, C4 c) {
            list.add(c);
        }

        public void m6(List list, long l) {
            list.add(l);
        }
    }*/

    class NonRaw {
        public void m2(Class<Object> c) {}

        public void m3(Class<Object> c) {
            m2(c);
        }

        public void m4() {
            AccessController.doPrivileged(
                    new PrivilegedAction<Object>() {
                        public Object run() {
                            return null;
                        }
                    });
        }

        public void m5(List<C4> list, C4 c) {
            list.add(c);
        }

        public void m6(List<Long> list, long l) {
            list.add(l);
        }
    }

    class MyList<X extends @Regex String> {
        X f;
    }

    interface I1 {
        public void m(MyList<? extends @Regex String> l);
    }

    class C1 implements I1 {
        public void m(MyList par) {
            @Regex String xxx = par.f;
        }
    }

    interface I2 {
        public void m(MyList<@Regex String> l);
    }

    class C2 implements I2 {
        public void m(MyList<@Regex String> l) {}
    }

    class C3 implements I2 {
        // :: error: (override.param.invalid) :: error: (type.argument.type.incompatible)
        public void m(MyList<String> l) {}
    }

    class C4 {}
}