aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManu Sridharan <msridhar@gmail.com>2024-01-25 09:58:48 -0800
committerGitHub <noreply@github.com>2024-01-25 17:58:48 +0000
commit091ac38fb8b410c6483022c03ffbee2bb169bee3 (patch)
treef4f41fcf783cf2632583aa4fe83c33b2d2bfc1af
parentb94597a826d28dd36364f4dff903541910465d28 (diff)
downloadnullaway-091ac38fb8b410c6483022c03ffbee2bb169bee3.tar.gz
Fix crash with raw types in overrides in JSpecify mode (#899)
We should skip checking for errors here instead of crashing
-rw-r--r--nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java8
-rw-r--r--nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java25
2 files changed, 28 insertions, 5 deletions
diff --git a/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java b/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java
index 77f185e..4754ed9 100644
--- a/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java
+++ b/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java
@@ -3,7 +3,6 @@ package com.uber.nullaway.generics;
import static com.google.common.base.Verify.verify;
import static com.uber.nullaway.NullabilityUtil.castToNonNull;
-import com.google.common.base.Preconditions;
import com.google.errorprone.VisitorState;
import com.google.errorprone.suppliers.Supplier;
import com.google.errorprone.suppliers.Suppliers;
@@ -772,7 +771,7 @@ public final class GenericsChecks {
List<Type> overriddenMethodParameterTypes = overriddenMethodType.getParameterTypes();
// TODO handle varargs; they are not handled for now
for (int i = 0; i < methodParameters.size(); i++) {
- Type overridingMethodParameterType = ASTHelpers.getType(methodParameters.get(i));
+ Type overridingMethodParameterType = getTreeType(methodParameters.get(i), state);
Type overriddenMethodParameterType = overriddenMethodParameterTypes.get(i);
if (overriddenMethodParameterType != null && overridingMethodParameterType != null) {
if (!compareNullabilityAnnotations(
@@ -801,11 +800,10 @@ public final class GenericsChecks {
private static void checkTypeParameterNullnessForOverridingMethodReturnType(
MethodTree tree, Type overriddenMethodType, NullAway analysis, VisitorState state) {
Type overriddenMethodReturnType = overriddenMethodType.getReturnType();
- Type overridingMethodReturnType = ASTHelpers.getType(tree.getReturnType());
- if (overriddenMethodReturnType == null) {
+ Type overridingMethodReturnType = getTreeType(tree.getReturnType(), state);
+ if (overriddenMethodReturnType == null || overridingMethodReturnType == null) {
return;
}
- Preconditions.checkArgument(overridingMethodReturnType != null);
if (!compareNullabilityAnnotations(
overriddenMethodReturnType, overridingMethodReturnType, state)) {
reportInvalidOverridingMethodReturnTypeError(
diff --git a/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java b/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
index 8e3452e..d146442 100644
--- a/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
+++ b/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
@@ -1615,6 +1615,31 @@ public class NullAwayJSpecifyGenericsTests extends NullAwayTestsBase {
.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(