// Test case for Issue 887
// https://github.com/typetools/checker-framework/issues/887
// Additional test case in framework/tests/all-systems/Issue887.java

import java.util.List;
import org.checkerframework.checker.nullness.qual.*;

public abstract class Issue887 {
  void test() {
    // :: error: (argument) :: error: (type.argument)
    method(foo(null).get(0));
    methodNullable(fooNullable(null).get(0));
  }

  void method(Number o) {}

  void methodNullable(@Nullable Number o) {}

  abstract <T extends Number> List<? extends T> foo(T t);

  abstract <T extends @Nullable Number> List<? extends T> fooNullable(T t);
}
