Overloads warnings overly agressive?

Paul Sandoz paul.sandoz at oracle.com
Tue Sep 24 17:14:00 UTC 2013


Hi,

There is a new warning about overloads on methods with functional interfaces, but it appears to be over-agressive as Doug pointed out to me off-list.

If i enable this when compiling tl (make JAVAC_WARNINGS:=-Xlint:overloads) then one can observe warnings such as on the primitive spliterators:

/Users/sandoz/Projects/jdk8/tl/jdk/src/share/classes/java/util/Spliterator.java:642: warning: [overloads] tryAdvance(IntConsumer) in OfInt is potentially ambiguous with tryAdvance(Consumer<? super Integer>) in OfInt
        boolean tryAdvance(IntConsumer action);
                ^
/Users/sandoz/Projects/jdk8/tl/jdk/src/share/classes/java/util/Spliterator.java:645: warning: [overloads] forEachRemaining(IntConsumer) in OfInt is potentially ambiguous with forEachRemaining(Consumer<? super Integer>) in OfInt
        default void forEachRemaining(IntConsumer action) {

The warnings propagate down to implementations, for example:

/Users/sandoz/Projects/jdk8/tl/jdk/src/share/classes/java/util/Random.java:1025: warning: [overloads] tryAdvance(IntConsumer) in RandomIntsSpliterator is potentially ambiguous with tryAdvance(Consumer<? super T>) in Spliterator
        public boolean tryAdvance(IntConsumer consumer) {
                       ^
  where T is a type-variable:
    T extends Object declared in interface Spliterator
/Users/sandoz/Projects/jdk8/tl/jdk/src/share/classes/java/util/Random.java:1036: warning: [overloads] forEachRemaining(IntConsumer) in RandomIntsSpliterator is potentially ambiguous with forEachRemaining(Consumer<? super T>) in Spliterator
        public void forEachRemaining(IntConsumer consumer) {

(Incidentally it does not appear all warnings are reported, warnings for the double implementations are missing.)

If I write a SuppressWarnings on Spliterator.OfInt:

    @SuppressWarnings("overloads")
    public interface OfInt extends OfPrimitive<Integer, IntConsumer, OfInt> {

then that stops the first set of warnings (above) but the warnings are still propagated to the second set for Random (or in general implementations or extensions of). That seems over aggressive and more of an annoyance than helpful. Can we change this?

Paul.


More information about the core-libs-dev mailing list