You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@iceberg.apache.org by "XN137 (via GitHub)" <gi...@apache.org> on 2023/01/25 09:50:09 UTC

[GitHub] [iceberg] XN137 commented on issue #6625: Improve nullability check in Iceberg codebase

XN137 commented on issue #6625:
URL: https://github.com/apache/iceberg/issues/6625#issuecomment-1403346772

   since the build is already using errorprone i think NullAway would be something to consider:
   https://github.com/uber/NullAway/
   https://www.uber.com/en-US/blog/nullaway/
   
   newer versions of the gradle-baseline plugins support configuring it more conveniently:
   https://github.com/palantir/gradle-baseline/tree/develop/baseline-null-away
   
   the basic idea is that (below a certain package) all reference types are assumed to be non-null unless they are annotated with `@Nullable`
   
   (which means that `@NonNull` is not needed, since it is the default)
   
   so these things become compile time errors:
   - returning `null` (or a nullable type) from a method that is not annotated
   - passing `null` (or a nullable type) into a method whose parameter is not annotated
   - assigning `null` (or a nullable type) to a field that is not annotated
   - leaving an unannotated field uninitialized after all constructor/initializer paths
   - (... others, you get the idea...)
   - most importantly: unconditionally de-referencing a `@Nullable` reference type
   
   inside an `if (x != null)` block, x of course is no longer considered to have a nullable type
   
   once these initial errors are fixed, you will see transitive errors and iterate on fixing them until you reach a stable state, where the use of null is "consistent" according to these rules.
   
   one could start with iceberg api, then do it for core and later all other downstream iceberg modules.
   
   there is a convenient way of getting started with these "1st level" rules by using the following errorprone checks:
   https://errorprone.info/bugpattern/ReturnMissingNullable
   https://errorprone.info/bugpattern/FieldMissingNullable
   https://errorprone.info/bugpattern/ParameterMissingNullable
   https://errorprone.info/bugpattern/EqualsMissingNullable
   
   note: you can run errorprone in a way so all these missing `@Nullable` annotations are added automatically
   
   so even if NullAway would not be used eventually, applying + enforcing those "1st level" errorprone checks, would help documenting (a subset of) the APIs in terms of nullability.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org