package org.example; import org.jspecify.annotations.NotNull; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; class DefaultNotNullTypeParameterOverrides { static void callNullable(Lib l) { } static void callNonnull(Lib l) { } static void callSuperNullable(Lib l) { } static void callSuperNonnull(Lib l) { } static void simple(Lib<@Nullable Object> nullable, Lib<@NotNull Object> notnull, Lib extNullable, Lib 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 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 l) { nonNullExpected(l); } } static class Lib { } }