Add nullability annotations to io.reactivex.annotations interfaces. #5023
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
(Addresses #4876)
This pull request annotates everything in the
io.reactivex.annotations
package with a new@NonNull
annotation defined in RxJava. This doesn’t annotate everything, but I think it’s a good start.In particular, when migrating a large codebase of RxJava 1.x code to 2.x, catching null returns in these interfaces was very difficult. At best, it’s noticed while migrating, otherwise it’s up to unit tests or a production crash to catch these.
With these new annotations, you get much better IDE support (once you tell IntelliJ about the new annotation):
^ in this example,
getPhoneNumber()
is marked as@Nullable
In addition, support for this annotation can easily be added to static analysis tools like Infer, checker, or any other popular tool.
Open Questions
@NonNull
annotation needs JavaDoc - I’m planning on following up with whatever is in existing NonNull annotations floating around unless anyone thinks otherwise.