diff options
author | Manu Sridharan <msridhar@gmail.com> | 2024-03-04 09:09:27 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-04 09:09:27 -0800 |
commit | 348bb4d997d04b3f86fe6ac629e056c52bfbbb27 (patch) | |
tree | 04e91198a2cb42ffa2fa0aa57743fe6a00d954a0 | |
parent | d7c757f5be547ca298f17625234a8c913adeb099 (diff) | |
download | nullaway-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.java | 5 | ||||
-rw-r--r-- | nullaway/src/test/java/com/uber/nullaway/NullAwayJava8Tests.java | 11 |
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(); } |