aboutsummaryrefslogtreecommitdiff
path: root/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
diff options
context:
space:
mode:
Diffstat (limited to 'nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java')
-rw-r--r--nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java80
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(