| import org.checkerframework.checker.nullness.qual.Nullable; |
| |
| class Generic<G extends @Nullable Object> {} |
| |
| class MyClass extends Generic<MyClass> {} |
| |
| class BoundedGeneric<B extends @Nullable CharSequence> {} |
| |
| class RawTypesNullness { |
| Generic rawReturn() { |
| return new Generic(); |
| } |
| |
| Generic rawField = new Generic(); |
| |
| void use() { |
| Generic rawLocal = new Generic<>(); |
| Generic<?> generic1 = rawReturn(); |
| Generic<?> generic2 = rawField; |
| Generic<?> generic3 = rawLocal; |
| } |
| } |
| |
| class TestBounded { |
| BoundedGeneric rawReturn() { |
| return new BoundedGeneric<>(); |
| } |
| |
| BoundedGeneric rawField = new BoundedGeneric(); |
| |
| void useWildCard() { |
| BoundedGeneric rawLocal = new BoundedGeneric<String>(); |
| BoundedGeneric<?> generic1 = rawReturn(); |
| BoundedGeneric<?> generic2 = rawField; |
| BoundedGeneric<?> generic3 = rawLocal; |
| } |
| |
| void useBoundedWildCard() { |
| BoundedGeneric rawLocal = new BoundedGeneric<String>(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<? extends Object> generic1 = rawReturn(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<? extends Object> generic2 = rawField; |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<? extends Object> generic3 = rawLocal; |
| } |
| |
| void useBoundedWildCard2() { |
| BoundedGeneric rawLocal = new BoundedGeneric<String>(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<? extends CharSequence> generic1 = rawReturn(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<? extends CharSequence> generic2 = rawField; |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<? extends CharSequence> generic3 = rawLocal; |
| } |
| |
| void useTypeArg() { |
| BoundedGeneric rawLocal = new BoundedGeneric<String>(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<String> generic1 = rawReturn(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<String> generic2 = rawField; |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<String> generic3 = rawLocal; |
| } |
| |
| void useAnnotatedTypeArg() { |
| BoundedGeneric rawLocal = new BoundedGeneric<String>(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<@Nullable String> generic1 = rawReturn(); |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<@Nullable String> generic2 = rawField; |
| // :: warning: [unchecked] unchecked conversion |
| BoundedGeneric<@Nullable String> generic3 = rawLocal; |
| } |
| } |