Reports classes that implement java.lang.Comparator, but do not implement java.io.Serializable.

If a non-serializable comparator is used to construct an ordered collection such as a java.util.TreeMap or java.util.TreeSet, then the collection will also be non-serializable. This can result in unexpected and difficult-to-diagnose bugs.

Since subclasses of java.lang.Comparator are often stateless, simply marking them serializable is a small cost to avoid such issues.

Example:


  class Foo implements Comparator { // warning
      @Override
      public int compare(Object o1, Object o2) {
          /* ... */
      }
  }

After the quick-fix is applied:


  class Foo implements Comparator, Serializable { // no warning here
      @Override
      public int compare(Object o1, Object o2) {
          /* ... */
      }
  }