This inspection analyzes method control and data flow to report possible conditions that are always true or false, expressions whose value is statically proven to be constant, and situations that can lead to nullability contract violations.

Variables, method parameters and return values marked as `@Nullable` or `@NotNull` are treated as nullable (or not-null, respectively) and used during the analysis to check nullability contracts, e.g. report `NullPointerException` (NPE) errors that might be produced.

More complex contracts can be defined using `@Contract` annotation, for example:

`@Contract("_, null -> null")` — method returns null if its second argument is null
`@Contract("_, null -> null; _, !null -> !null")` — method returns null if its second argument is null and not-null otherwise
`@Contract("true -> fail")` — a typical `assertFalse` method which throws an exception if `true` is passed to it

The inspection can be configured to use custom `@Nullable`/`@NotNull` annotations (by default the ones from annotations.jar will be used)