I believe NullAway is a net positive and that we should go forward with the migration.
Positives:
- It will catch possible/rare NPEs earlier (compile-time vs CQ/CI/Production). It's hard to be sure to what extent because we've been converting code that has already been through the latter phases and has stood the test of time, so we didn't find many impactful bugs; However, we still found a good number of potential bugs (which were marked as assumeNonNull() since that's what the code currently does).
- Fails early (ErrorProne-time, so right after compile).
- Seems solid in terms of correctness. It triggered in places you'd expect it to.
- The annotation tool makes it feasible to annotate the whole codebase.
Negatives:
- It's an extra thing to learn that developers writing Clank code need to know.
- @Nullable annotations are ugly sometimes (for arrays and nested classes). Android Studio refactor tools don't handle it properly.
- Even though the annotation tool helps, it's on the order of magnitude of 3 eng*month to annotate the whole codebase.
We probably don't want to be in the middle of this migration for long, so +1 should actively migrate it