From 635ecd2a0348238dfe3a5f814377b9fc467f6617 Mon Sep 17 00:00:00 2001 From: Manu Sridharan Date: Tue, 4 Mar 2025 10:17:54 -0800 Subject: [PATCH] Add more bailouts for raw types (#1153) Fixes #1151 The extra check in `CheckIdenticalNullabilityVisitor` is not needed to fix this bug but seemed like a prudent addition. --- .../CheckIdenticalNullabilityVisitor.java | 2 +- .../nullaway/generics/GenericsChecks.java | 3 +++ .../uber/nullaway/jspecify/GenericsTests.java | 20 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/nullaway/src/main/java/com/uber/nullaway/generics/CheckIdenticalNullabilityVisitor.java b/nullaway/src/main/java/com/uber/nullaway/generics/CheckIdenticalNullabilityVisitor.java index 66b9451c46..e753cf6034 100644 --- a/nullaway/src/main/java/com/uber/nullaway/generics/CheckIdenticalNullabilityVisitor.java +++ b/nullaway/src/main/java/com/uber/nullaway/generics/CheckIdenticalNullabilityVisitor.java @@ -44,7 +44,7 @@ public Boolean visitClassType(Type.ClassType lhsType, Type rhsType) { return true; } // bail out of checking raw types for now - if (rhsTypeAsSuper.isRaw()) { + if (rhsTypeAsSuper.isRaw() || lhsType.isRaw()) { return true; } List lhsTypeArguments = lhsType.getTypeArguments(); 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 3318763a44..fbe70b8ab1 100644 --- a/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java +++ b/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java @@ -504,6 +504,9 @@ private static boolean identicalTypeParameterNullability( */ private static boolean subtypeParameterNullability( Type lhsType, Type rhsType, VisitorState state, Config config) { + if (lhsType.isRaw()) { + return true; + } if (lhsType.getKind().equals(TypeKind.ARRAY) && rhsType.getKind().equals(TypeKind.ARRAY)) { // for array types we must allow covariance, i.e., an array of @NonNull references is a // subtype of an array of @Nullable references; see diff --git a/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericsTests.java b/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericsTests.java index e2c2866e38..0922f9382a 100644 --- a/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericsTests.java +++ b/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericsTests.java @@ -1022,6 +1022,26 @@ public void rawTypes() { .doTest(); } + @Test + public void rawVarargsParam() { + makeHelper() + .addSourceLines( + "Foo.java", + "import org.jspecify.annotations.NullMarked;", + "import org.jspecify.annotations.Nullable;", + "@NullMarked", + "public class Foo {", + " public interface Supplier extends java.util.function.Supplier {", + " }", + " public static void waitForAll(Runnable callback, Supplier... suppliers) {", + " }", + " public static void test(Supplier sup2) {", + " waitForAll(() -> {}, sup2);", + " }", + "}") + .doTest(); + } + @Test public void nestedGenericTypeAssignment() { makeHelper()