-
Notifications
You must be signed in to change notification settings - Fork 356
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 an invalid @Contract annotation.