import java.io.*;
import java.util.HashMap;
import java.util.Map;
import org.checkerframework.checker.nullness.qual.*;
class Cell<T extends @Nullable Object> {
void add(T arg) {}
}
class GenericArgs2 {
static <F extends Object> void test1(Cell<F> collection) {
//:: error: (argument.type.incompatible)
collection.add(null); // should fail
}
static <F extends @Nullable Object> void test2(Cell<F> collection) {
//:: error: (argument.type.incompatible)
collection.add(null); // should fail
}
static void test3(Cell<@Nullable Object> collection) {
collection.add(null); // valid
}
// No "<F super Object>" version of the above, as that is illegal in Java.
static class InvariantFilter {}
static class Invariant {}
HashMap<Class<? extends InvariantFilter>, Map<Class<? extends Invariant>, Integer>> filter_map1;
MyMap<@Nullable Class<? extends InvariantFilter>, Map<Class<? extends Invariant>, Integer>>
filter_map2;
public GenericArgs2(
HashMap<Class<? extends InvariantFilter>, Map<Class<? extends Invariant>, Integer>>
filter_map1,
MyMap<
@Nullable Class<? extends InvariantFilter>,
Map<Class<? extends Invariant>, Integer>>
filter_map2) {
this.filter_map1 = filter_map1;
this.filter_map2 = filter_map2;
}
class MyMap<K extends @Nullable Object, V extends @Nullable Object> {}
}