package org.example;
import org.jspecify.annotations.NotNull;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
class DefaultNotNullTypeParameterOverrides {
static void callNullable(Lib extends @Nullable Object> l) {
}
static void callNonnull(Lib extends @NotNull Object> l) {
}
static void callSuperNullable(Lib super @Nullable Object> l) {
}
static void callSuperNonnull(Lib super @NotNull Object> l) {
}
static void simple(Lib<@Nullable Object> nullable,
Lib<@NotNull Object> notnull,
Lib extends @Nullable Object> extNullable,
Lib extends @NotNull Object> extNotNullable) {
callNullable(nullable);
callNullable(notnull);
callNullable(extNullable);
callNullable(extNotNullable);
callNonnull(nullable);
callNonnull(notnull);
callNonnull(extNullable);
callNonnull(extNotNullable);
callSuperNullable(nullable);
callSuperNullable(notnull);
callSuperNonnull(nullable);
callSuperNonnull(notnull);
}
static void callLibNullable(Lib> l) {
}
static void callLibNonnull(Lib> l) {
}
static void nested(Lib> extNullable,
Lib> extNotNullable) {
callLibNullable(extNullable);
callLibNullable(extNotNullable);
callLibNonnull(extNullable);
callLibNonnull(extNotNullable);
}
interface SuperInt {
@NullMarked
void nonNull(Lib extends Object> lib);
Lib<@Nullable T> nullReturn();
}
@NullMarked
interface ChildInt extends
SuperInt {
default void testWildcard() {
nonNull(nullReturn());
}
}
@NullMarked
interface CaptureTest {
void nonNullExpected(Lib l);
default void captured(Lib extends Object> l) {
nonNullExpected(l);
}
}
static class Lib {
}
}