| import org.checkerframework.checker.nullness.qual.*; |
| |
| public class WildcardSubtyping2 { |
| class MyClass {} |
| |
| class MyCloneClass extends MyClass implements Cloneable {} |
| |
| class MyGeneric<@NonNull T extends @Nullable MyClass> {} |
| |
| class UseMyGeneric { |
| MyGeneric<@NonNull MyCloneClass> nonNull = new MyGeneric<>(); |
| MyGeneric<@Nullable MyCloneClass> nullable = new MyGeneric<>(); |
| |
| MyGeneric<? extends @NonNull Cloneable> interfaceNN = nonNull; |
| MyGeneric<? extends @Nullable Cloneable> interfaceNull = nullable; |
| } |
| |
| class MyGenericEB<@NonNull T extends @NonNull MyClass> {} |
| |
| class UseMyGenericEB { |
| MyGenericEB<@NonNull MyCloneClass> nonNull = new MyGenericEB<>(); |
| // :: error: (type.argument) |
| MyGenericEB<@Nullable MyCloneClass> nullable = new MyGenericEB<>(); |
| |
| MyGenericEB<? extends @NonNull Cloneable> interfaceNN = nonNull; |
| MyGenericEB<? extends @Nullable Cloneable> interfaceNull = nullable; |
| } |
| } |