CollectionUndefinedEquality
This type does not have well-defined equals behavior.

Severity
WARNING
Tags
FragileCode
Has Fix?

The problem

Using Collections (and other types which rely on equality) to contain elements with undefined equality is error-prone. For example, Collection itself does not have well-defined equality: the List and Set subinterfaces are not necessarily comparable.

ImmutableList<Collection<Integer>> collectionsOfIntegers =
    ImmutableList.of(ImmutableSet.of(1, 2), ImmutableSet.of(3, 4));

collectionsOfIntegers.contains(ImmutableSet.of(1, 2)); // true
collectionsOfIntegers.contains(ImmutableList.of(1, 2)); // false
boolean containsTest(Collection<CharSequence>> charSequences) {
  // True if `charSequences` actually contains Strings, but otherwise not necessarily.
  return charSequences.contains("test");
}

In this case, an appropriate fix may be,

boolean containsTest(Collection<CharSequence>> charSequences) {
  // True if `charSequences` actually contains Strings, but otherwise not necessarily.
  return charSequences.stream().anyMatch("test"::contentEquals);
}

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("CollectionUndefinedEquality") to the enclosing element.