diff options
author | Abhijit Kulkarni <akulk022@ucr.edu> | 2023-11-13 10:30:30 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-13 18:30:30 +0000 |
commit | 4af912ddd49f6c674b6853fb395e0d4b8974e3d7 (patch) | |
tree | b41f64d05ecfea7bfab203f904bf82cd8023f7d0 | |
parent | 0141aca22138e479dfcbc4acdb56211ca4e17d73 (diff) | |
download | nullaway-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.java | 11 | ||||
-rw-r--r-- | nullaway/src/test/java/com/uber/nullaway/NullAwayJSpecifyGenericsTests.java | 18 |
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( |