blob: f2a47351c57a7557e054ad5b2ab1fae0beefa68b [file] [log] [blame] [view]
Checks if `@NullMarked` annotation is applied to a Java class.
When you apply `@NullMarked` to a module, package, class, or method, it means
that unannotated types in that scope are treated as if they were annotated with
`@NonNull`, with some exceptions for local variables and type variables. In code
covered by `@NullMarked`, `String x` means the same as `@NonNull String x`.
This standardizes the default annotation for all static checkers and compilers
that support JSpecify annotations.
For more information, see https://jspecify.dev/docs/user-guide/#nullmarked.
### Choice of Granularity
Typically, projects should choose only one of the following approaches and not
both:
* **Package-level (`AddNullMarkedToPackageInfo`)**: Provides a concise way to
null-mark an entire package at once. However, there are some drawbacks to
relying on `package-info.java` in certain build environments, and it may
lack the "locality of reference" provided by class-level annotations.
* **Class-level (`AddNullMarkedToClass`)**: More robust and explicit, as the
annotation is visible directly on each class declaration. This requires more
annotations but can be clearer for readers.
For a project, it is recommended to either nullmark all the classes or all of
the `package-info` files, but not both.