Reports classes that implement java.lang.Comparable but do not override equals().

If equals() is not overridden, the equals() implementation is not consistent with the compareTo() implementation. If an object of such a class is added to a collection such as java.util.SortedSet, this collection will violate the contract of java.util.Set, which is defined in terms of equals().

Example:


  class Length implements Comparable<Length> {
    private int cm = 0;

    @Override
    public int compareTo(@NotNull Length o) {
      if (cm == o.cm) return 0;
      return cm < o.cm ? -1 : 1;
    }
  }

After the quick fix is applied:


  class Length implements Comparable<Length> {
    private int cm = 0;

    @Override
    public int compareTo(@NotNull Length o) {
      if (cm == o.cm) return 0;
      return cm < o.cm ? -1 : 1;
    }

    @Override
    public boolean equals(Object o) {
      return o instanceof Length && compareTo((Length) o) == 0;
    }
  }