Reports classes that override the equals() method but do not override the hashCode() method or vice versa, which can potentially lead to problems when the class is added to a Collection or a HashMap.

The quick-fix generates the default implementation for an absent method.

Example:


class StringHolder {
  String s;

  @Override public int hashCode() {
    return s != null ? s.hashCode() : 0;
  }
}

After the quick-fix is applied:


class StringHolder {
  String s;

  @Override public int hashCode() {
    return s != null ? s.hashCode() : 0;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof StringHolder)) return false;

    StringHolder holder = (StringHolder)o;

    if (s != null ? !s.equals(holder.s) : holder.s != null) return false;

    return true;
  }
}