File: ThreadLocalTest2.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 (71 lines) | stat: -rw-r--r-- 2,165 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
// Test case for issue #1572 and issue #1330
// https://github.com/typetools/checker-framework/issues/1572
// https://github.com/typetools/checker-framework/issues/1330

// @skip-test until the issues are fixed

import org.checkerframework.checker.nullness.qual.*;

public class ThreadLocalTest2 {

    private static int unwrap(final ThreadLocal<Integer> tl) {
        return tl.get().intValue();
    }

    private static void wrap(final ThreadLocal<Integer> tl, final int value) {
        tl.set(Integer.valueOf(value));
    }

    private static ThreadLocal<Integer> consumed_chars =
            new ThreadLocal<Integer>() {

                @Override
                protected Integer initialValue() {
                    return Integer.valueOf(0);
                }
            };

    class MyThreadLocalNN extends ThreadLocal<@NonNull Integer> {
        @Override
        protected Integer initialValue() {
            return new Integer(0);
        }
    }

    class MyThreadLocalNnIncorrectOverride extends ThreadLocal<@NonNull Integer> {
        @Override
        // :: error: (override.return.invalid)
        protected @Nullable Integer initialValue() {
            return null;
        }
    }

    // :: error: (method.not.overridden)
    class MyThreadLocalNnNoOverride extends ThreadLocal<@NonNull Integer> {}

    class MyThreadLocalNble extends ThreadLocal<@Nullable Integer> {
        @Override
        protected @Nullable Integer initialValue() {
            return null;
        }
    }

    class MyThreadLocalNbleStrongerOverride extends ThreadLocal<@Nullable Integer> {
        @Override
        protected @NonNull Integer initialValue() {
            return new Integer(0);
        }
    }

    class MyThreadLocalNbleNoOverride extends ThreadLocal<@Nullable Integer> {}

    void foo() {
        // :: error: (type.argument.type.incompatible)
        new ThreadLocal<@NonNull Object>();
        // :: error: (type.argument.type.incompatible)
        new InheritableThreadLocal<@NonNull Object>();
        new ThreadLocal<@Nullable Object>();
        new InheritableThreadLocal<@Nullable Object>();
        new MyThreadLocalNN();
    }
}