aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManu Sridharan <msridhar@gmail.com>2024-03-04 09:09:27 -0800
committerGitHub <noreply@github.com>2024-03-04 09:09:27 -0800
commit348bb4d997d04b3f86fe6ac629e056c52bfbbb27 (patch)
tree04e91198a2cb42ffa2fa0aa57743fe6a00d954a0
parentd7c757f5be547ca298f17625234a8c913adeb099 (diff)
downloadnullaway-348bb4d997d04b3f86fe6ac629e056c52bfbbb27.tar.gz
Fix handling of references to methods of array types and type variables (#926)
After #920 we check the nullability of the qualifier expression of a method reference. We weren't correctly handling the cases where that expression was an array type or a type variable
-rw-r--r--nullaway/src/main/java/com/uber/nullaway/NullAway.java5
-rw-r--r--nullaway/src/test/java/com/uber/nullaway/NullAwayJava8Tests.java11
2 files changed, 13 insertions, 3 deletions
diff --git a/nullaway/src/main/java/com/uber/nullaway/NullAway.java b/nullaway/src/main/java/com/uber/nullaway/NullAway.java
index 1f67a4a..12e7370 100644
--- a/nullaway/src/main/java/com/uber/nullaway/NullAway.java
+++ b/nullaway/src/main/java/com/uber/nullaway/NullAway.java
@@ -2326,7 +2326,7 @@ public class NullAway extends BugChecker
return true;
case NEW_CLASS:
case NEW_ARRAY:
- // for string concatenation, auto-boxing
+ case ARRAY_TYPE:
case LAMBDA_EXPRESSION:
// Lambdas may return null, but the lambda literal itself should not be null
case MEMBER_REFERENCE:
@@ -2485,7 +2485,8 @@ public class NullAway extends BugChecker
if (baseExpressionSymbol != null) {
if (baseExpressionSymbol.type.isPrimitive()
|| baseExpressionSymbol.getKind() == ElementKind.PACKAGE
- || ElementUtils.isTypeElement(baseExpressionSymbol)) {
+ || ElementUtils.isTypeElement(baseExpressionSymbol)
+ || baseExpressionSymbol.getKind() == ElementKind.TYPE_PARAMETER) {
// we know we don't have a null dereference here
return Description.NO_MATCH;
}
diff --git a/nullaway/src/test/java/com/uber/nullaway/NullAwayJava8Tests.java b/nullaway/src/test/java/com/uber/nullaway/NullAwayJava8Tests.java
index 6c37861..72fe2a3 100644
--- a/nullaway/src/test/java/com/uber/nullaway/NullAwayJava8Tests.java
+++ b/nullaway/src/test/java/com/uber/nullaway/NullAwayJava8Tests.java
@@ -30,11 +30,20 @@ public class NullAwayJava8Tests extends NullAwayTestsBase {
"Test.java",
"package com.uber;",
"import org.jspecify.annotations.Nullable;",
+ "import java.util.Arrays;",
+ "import java.util.stream.Collectors;",
"class Test {",
- " public static boolean test(@Nullable String text, java.util.Set<String> s) {",
+ " public static boolean testPositive(@Nullable String text, java.util.Set<String> s) {",
" // BUG: Diagnostic contains: dereferenced expression text is @Nullable",
" return s.stream().anyMatch(text::contains);",
" }",
+ " public static String[] testNegative(Object[] arr) {",
+ " // also tests we don't crash when the qualifier expression of a method reference is a type",
+ " return Arrays.stream(arr).map(Object::toString).toArray(String[]::new);",
+ " }",
+ " public static <T> boolean testNegativeWithTypeVariable(T[] arr) {",
+ " return Arrays.stream(arr).map(T::toString).collect(Collectors.toList()).isEmpty();",
+ " }",
"}")
.doTest();
}