From ec0f65e45c9838ce14bba968b7d3075832b969c1 Mon Sep 17 00:00:00 2001 From: Manu Sridharan Date: Fri, 31 Jan 2025 09:31:10 -0800 Subject: [PATCH] fix ClassCastException --- .../uber/nullaway/generics/GenericsChecks.java | 12 +++++++++++- .../nullaway/jspecify/GenericMethodTests.java | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 2205c66854..43dd7f15b6 100644 --- a/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java +++ b/nullaway/src/main/java/com/uber/nullaway/generics/GenericsChecks.java @@ -160,7 +160,17 @@ private static boolean[] getTypeParamsWithNullableUpperBound( */ public static void checkGenericMethodCallTypeArguments( Tree tree, VisitorState state, NullAway analysis, Config config, Handler handler) { - List typeArguments = ((MethodInvocationTree) tree).getTypeArguments(); + List typeArguments; + switch (tree.getKind()) { + case METHOD_INVOCATION: + typeArguments = ((MethodInvocationTree) tree).getTypeArguments(); + break; + case NEW_CLASS: + typeArguments = ((NewClassTree) tree).getTypeArguments(); + break; + default: + throw new RuntimeException("Unexpected tree kind: " + tree.getKind()); + } if (typeArguments.isEmpty()) { return; } diff --git a/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericMethodTests.java b/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericMethodTests.java index 7bbe2c4ddf..b8b2753046 100644 --- a/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericMethodTests.java +++ b/nullaway/src/test/java/com/uber/nullaway/jspecify/GenericMethodTests.java @@ -190,6 +190,24 @@ public void issue1035() { .doTest(); } + @Test + public void issue1138() { + makeHelper() + .addSourceLines( + "Test.java", + "package com.uber;", + "import org.jspecify.annotations.NullMarked;", + "@NullMarked", + "class Foo {", + " Foo(T source) {", + " }", + " static Foo create(T in) {", + " return new Foo(in);", + " }", + "}") + .doTest(); + } + private CompilationTestHelper makeHelper() { return makeTestHelperWithArgs( Arrays.asList(