-
Notifications
You must be signed in to change notification settings - Fork 299
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
@NonNull method type param for a @Nullable class type param confusion #1094
Comments
This may be the same underlying issue as #1091. When we are substituting type variables, we don't have the logic to preserve the annotations in the type we are substituting into. For this case, we are substituting |
Good news. I was able to fully enable the null analysis on the project (main, tests, benchmarks), with only a few of these undesirable suppressions needed. That exercise found a couple small mistakes in the test logic thanks to the stricter null checks required. |
Fantastic! And thanks for all the reports! We'll work on getting them fixed soon. |
This is a bit unrelated and not worth opening a new issue for. I was spot checking that jitpack.io worked after I added sigstore artifact signing, but it fails first with a nullaway error that I cannot reproduce. The warning makes sense, but I am unsure why it does not happen elsewhere. Jitpack is good for temporary hot patches and their build environment can be quirky, so I keep it working best-effort if others need to patch the library. I think this is a legitimate warning so I am unsure why it was not reproducible. https://jitpack.io/com/github/ben-manes/caffeine/-ddd12106c6-1/build.log I tried to force both github actions and jitpack to use the same version of zulu, disabled caching, etc. but they give different results.
Here's a buildscan. |
Hrm, that's weird. My first guess would be somehow this is related to #1005. JSpecify mode does not yet support reading all relevant annotations from bytecodes, so there may be weird issues unless the version of javac used is JDK 23+. But I don't really understand why this issue would only get reported on jitpack; maybe I'm way off on the root cause. This example also seems to involve wildcards so those could be involved somehow. It's concerning that the jitpack error looks valid, but given we have hardly tested any support for wildcards, that could just be NullAway getting lucky. |
I couldn't figure out how to reproduce it, but that warning seemed valid to me and so I fixed it as part of making the jitpack build pass again. |
I think that I am getting contradictory warnings for this complex scenario. I am trying to annotate a test adapter where a Guava cache implements Caffeine's interfaces so that parameterized tests can assert against both implementations. This allows Guava's to be a golden reference for regression testing, compatibility, and intentional deviations.
The Caffeine cache was annotated where a nullable value is allowed for
Map.compute
style behaviors, even though null cannot be stored in the cache.As the adapter may return null, I tried adding the annotations
but this emits the warning
If I specify that as
@Nullable
then it is happy and warns at the implementation's return logic. However, I don't believe this is correct given the interface makes it explicitly non-null. I can suppress these or use@NullUnmarked
on the implementation. I'm unsure if this is a declaration or analysis mistake (cc @cpovirk).The text was updated successfully, but these errors were encountered: