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
|
import org.checkerframework.checker.nullness.qual.*;
public class VoidUse {
private Class<?> main_class1 = Void.TYPE;
private Class<? extends @Nullable Object> main_class2 = Void.TYPE;
public Void voidReturn(Void p) {
voidReturn(null);
return null;
}
// Void is treated as Nullable. Is there a value on having it be
// NonNull?
public abstract static class VoidTestNode<T extends Object> {}
public static class VoidTestInvNode extends VoidTestNode<@NonNull Void> {}
class Scanner<P extends Object> {
public void scan(Object tree, P p) {}
}
// :: error: (type.argument.type.incompatible)
class MyScanner extends Scanner<Void> {
void use(MyScanner ms) {
ms.scan(new Object(), null);
}
}
// :: error: (type.argument.type.incompatible)
class MyScanner2 extends Scanner<@Nullable Object> {
void use(MyScanner2 ms) {
ms.scan(new Object(), null);
}
}
// Test case for issue #230
Class<? extends @Nullable Object> voidClass() {
return void.class;
}
Class<? extends @Nullable Object> VoidClass() {
return Void.class;
}
Class<?> intClass() {
return int.class;
}
Class<?> ListClass() {
return java.util.List.class;
}
}
|