import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Comparator; class TestIDEA { public static class Test1<Type extends List & Serializable> { public void process(Serializable s) { } public void process(Type t) { } } public static class Test2 extends Test1<ArrayList> { public void process(Serializable s) { super.process(s); } public void process(ArrayList t) { super.process(t); // this call is OK resolving to parameterized method in super } } public static void main(String[] args) { Test2 test=new Test2(); ArrayList list=new ArrayList(); test.process(list); test.process((Serializable)list); } } class Key<T> { Object add(T v) { return v; } } class WKey<W, T> extends Key<T> { W add(T v) { return null; } } class IBug { public static <W, T> void addItem(WKey<W, T> key, T v) { key.add(v); // --> demetra draw this in red, see attachment } } //IDEADEV-7698 abstract class Collator implements Comparator<Object> { public abstract int compare(String source, String target); public int compare(Object o1, Object o2) { return compare((String)o1, (String)o2); } public void foo(Collator c) { c.compare("foo", "bar"); } } //end of //IDEADEV-7698