diff options
Diffstat (limited to 'nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java')
-rw-r--r-- | nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java b/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java index 68f1d11..d146442 100644 --- a/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java +++ b/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java @@ -1021,6 +1021,23 @@ public class NullAwayJSpecifyGenericsTests extends NullAwayTestsBase { } @Test + public void nestedGenericTypeAssignment2() { + makeHelper() + .addSourceLines( + "Test.java", + "package com.uber;", + "import org.jspecify.annotations.Nullable;", + "class Test {", + " static class A<T extends @Nullable Object> { }", + " static void testPositive() {", + " // BUG: Diagnostic contains: Cannot assign from type", + " A<A<String>[]> var2 = new A<A<@Nullable String>[]>();", + " }", + "}") + .doTest(); + } + + @Test public void genericPrimitiveArrayTypeAssignment() { makeHelper() .addSourceLines( @@ -1560,6 +1577,69 @@ public class NullAwayJSpecifyGenericsTests extends NullAwayTestsBase { .doTest(); } + @Test + public void testForNullRhsTypeWhenReturnedForGenericType() { + makeHelper() + .addSourceLines( + "Test.java", + "package com.uber;", + "import org.jspecify.annotations.Nullable;", + "class Test {", + " static class A<T extends @Nullable Object> { }", + " static A<String> testPositive() {", + " // BUG: Diagnostic contains: returning @Nullable expression from method with @NonNull return type", + " return null;", + " }", + " static @Nullable A<String> testNegative() {", + " return null;", + " }", + "}") + .doTest(); + } + + @Test + public void testForNullTypeRhsTypeForArrayType() { + makeHelper() + .addSourceLines( + "Test.java", + "package com.uber;", + "import org.jspecify.annotations.Nullable;", + "import java.util.List;", + "import java.util.ArrayList;", + "class Test {", + " static void testNegative() {", + " List<String> a = new ArrayList<String>();", + " Object[] o = a != null ? a.toArray() : null;", + " }", + "}") + .doTest(); + } + + @Test + public void overrideWithRawType() { + makeHelper() + .addSourceLines( + "Test.java", + "package com.uber;", + "import org.jspecify.annotations.Nullable;", + "class Test {", + " interface Foo<T> {}", + " interface Bar<T> {", + " void add(Foo<T> foo);", + " @Nullable Foo<T> get();", + " }", + " static class Baz<T> implements Bar<T> {", + " @SuppressWarnings(\"rawtypes\")", + " @Override", + " public void add(Foo foo) {}", + " @SuppressWarnings(\"rawtypes\")", + " @Override", + " public @Nullable Foo get() { return null; }", + " }", + "}") + .doTest(); + } + private CompilationTestHelper makeHelper() { return makeTestHelperWithArgs( Arrays.asList( |