## Why is this an issue?

By contract, the `equals(Object)` method, from `java.lang.Object`, should accept a `null` argument. Among all the other cases, the `null` case is even explicitly detailed in the `Object.equals(...)` Javadoc, stating "For any non-null reference value x, x.equals(null) should return false."

Assuming that the argument to `equals` is always non-null, and enforcing that assumption with an annotation is not only a fundamental violation of the contract of `equals`, but it is also likely to cause problems in the future as the use of the class evolves over time.

The rule raises an issue when the `equals` method is overridden and its parameter annotated with any kind of `@Nonnull` annotation.

### Noncompliant code example

    public boolean equals(@javax.annotation.Nonnull Object obj) { // Noncompliant
      // ...
    }

### Compliant solution

    public boolean equals(Object obj) {
      if (obj == null) {
        return false;
      }
      // ...
    }