aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhijit Kulkarni <akulk022@ucr.edu>2023-11-13 10:30:30 -0800
committerGitHub <noreply@github.com>2023-11-13 18:30:30 +0000
commit4af912ddd49f6c674b6853fb395e0d4b8974e3d7 (patch)
treeb41f64d05ecfea7bfab203f904bf82cd8023f7d0
parent0141aca22138e479dfcbc4acdb56211ca4e17d73 (diff)
downloadnullaway-4af912ddd49f6c674b6853fb395e0d4b8974e3d7.tar.gz
JSpecify: handling the return of a diamond operator anonymous object method caller (#858)
In reference to the [exception](https://github.com/uber/NullAway/issues/791#issuecomment-1803020173) mentioned in the discussion for #791 . Adding the test case to reproduce the same issue: ```java class Test { static class B<T>{ String build(){return "x";} } static String testNegative() { //We were getting the aforementioned mentioned exception when we tried to do this return new B<>().build(); } } ``` All unit tests have passed for the changes that were made for this. --------- Co-authored-by: Manu Sridharan <msridhar@gmail.com>
-rw-r--r--nullaway/src/main/java/com/uber/nullaway/GenericsChecks.java11
-rw-r--r--nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java18
2 files changed, 25 insertions, 4 deletions
diff --git a/nullaway/src/main/java/com/uber/nullaway/GenericsChecks.java b/nullaway/src/main/java/com/uber/nullaway/GenericsChecks.java
index ef56490..4870366 100644
--- a/nullaway/src/main/java/com/uber/nullaway/GenericsChecks.java
+++ b/nullaway/src/main/java/com/uber/nullaway/GenericsChecks.java
@@ -788,10 +788,13 @@ public final class GenericsChecks {
return Nullness.NONNULL;
}
Type methodReceiverType =
- castToNonNull(
- getTreeType(((MemberSelectTree) tree.getMethodSelect()).getExpression(), state));
- return getGenericMethodReturnTypeNullness(
- invokedMethodSymbol, methodReceiverType, state, config);
+ getTreeType(((MemberSelectTree) tree.getMethodSelect()).getExpression(), state);
+ if (methodReceiverType == null) {
+ return Nullness.NONNULL;
+ } else {
+ return getGenericMethodReturnTypeNullness(
+ invokedMethodSymbol, methodReceiverType, state, config);
+ }
}
/**
diff --git a/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java b/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
index 58f09d1..eb7c02f 100644
--- a/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
+++ b/nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java
@@ -1522,6 +1522,24 @@ public class NullAwayJSpecifyGenericsTests extends NullAwayTestsBase {
.doTest();
}
+ @Test
+ public void testForDiamondOperatorReturnedAsAMethodCaller() {
+ makeHelper()
+ .addSourceLines(
+ "Test.java",
+ "package com.uber;",
+ "import org.jspecify.annotations.Nullable;",
+ "class Test {",
+ " static class B<T>{",
+ " String build(){return \"x\";}",
+ " }",
+ " static String testNegative() {",
+ " return new B<>().build();",
+ " }",
+ "}")
+ .doTest();
+ }
+
private CompilationTestHelper makeHelper() {
return makeTestHelperWithArgs(
Arrays.asList(