Reports generic method parameters that can make use of bounded wildcards.

Example:


  void process(Consumer<Number> consumer);

should be replaced with:


  void process(Consumer<? super Number> consumer);

This method signature is more flexible because it accepts more types: not only Consumer<Number>, but also Consumer<Object>.

Likewise, type parameters in covariant position:


  T produce(Producer<T> p);

should be replaced with:


  T produce(Producer<? extends T> p);

To quote Joshua Bloch in Effective Java third Edition:

Item 31: Use bounded wildcards to increase API flexibility

Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers.

Use the inspection options to toggle the reporting for: