class List<T> { T t;} class Base<T> { List<T> getList(List<T> l) { return null; } } class Derived extends Base <String> { <warning descr="Unchecked overriding: return type requires unchecked conversion. Found 'List', required 'List<java.lang.String>'">List</warning> getList(List<String> l) { return null; } } class A1 { <T> T foo(T t) { return null; } } class A2 extends A1 { <warning descr="Unchecked overriding: return type requires unchecked conversion. Found 'java.lang.Object', required 'T'">Object</warning> foo(Object o) { return null; } } //IDEADEV-15918 abstract class Outer<U> { public abstract Inner m(U u); public class Inner { } } class Other extends Outer<Other> { public Ither m(Other other) { return new Ither(); } public class Ither extends Inner { } } //end of IDEADEV-15918