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();
}
}
|