-
Notifications
You must be signed in to change notification settings - Fork 299
Supported Annotations
This page documents the different code annotations that are supported by NullAway by default. Custom annotations can be supported for certain functionality via the command-line flags.
NullAway treats any annotation whose simple (un-qualified) name is @Nullable
as marking a parameter / return / field as nullable. Checker Framework's @NullableDecl
is also supported.
Any annotation whose simple (un-qualified) name is @Initializer
is treated as marking a method as an initializer (see here for more information on initialization checking). We also support JUnit's @Before
and @BeforeClass
for marking initializers.
NullAway has partial support for JetBrains @Contract
annotations. Some examples:
public class NullnessChecker {
@Contract("_, null -> true")
static boolean isNull(boolean flag, @Nullable Object o) { return o == null; }
@Contract("null -> false")
static boolean isNonNull(@Nullable Object o) { return o != null; }
@Contract("null -> fail")
static void assertNonNull(@Nullable Object o) { if (o != null) throw new Error(); }
@Contract("!null -> !null")
static @Nullable Object id(@Nullable Object o) { return o; }
}
For now, the @Contract
annotations are trusted, not checked. NullAway will warn if it sees a call to a method with a @Contract
annotation it recognizes as invalid.
Not all possible clauses of @Contract
annotations are fully parsed or supported by NullAway (e.g. @Contract("null, false -> fail; !null, true -> fail")
will be ignored, since NullAway can't reason about the runtime value of the second argument).