import java.util.ArrayList; class Reference<<warning descr="Type parameter 'T' is never used">T</warning>> { } class WeakReference<T> extends Reference<T> { } class Item<<warning descr="Type parameter 'Key' is never used">Key</warning>, T> extends WeakReference<T> { { Reference<T> ref = null; Item item = (Item) ref; equals(item); } } // assign raw to generic are allowed class a<E> { void f(a<E> t){ t.hashCode(); } } class b { a<b> f(a raw) { a<?> unbound = raw; raw = unbound; a<Integer> generic = <warning descr="Unchecked assignment: 'a' to 'a<java.lang.Integer>'">raw</warning>; <warning descr="Unchecked call to 'f(a<E>)' as a member of raw type 'a'">raw.f</warning>(raw); <warning descr="Unchecked call to 'f(a<E>)' as a member of raw type 'a'">raw.f</warning>(generic); generic.f(<warning descr="Unchecked assignment: 'a' to 'a<java.lang.Integer>'">raw</warning>); generic.f(generic); generic.f<error descr="'f(a<java.lang.Integer>)' in 'a' cannot be applied to '(a<java.lang.String>)'">(new a<String>())</error>; generic = <warning descr="Unchecked assignment: 'a' to 'a<java.lang.Integer>'">raw</warning>; return <warning descr="Unchecked assignment: 'a' to 'a<b>'">raw</warning>; } } class List<T> { <V> V[] toArray (V[] vs) { return vs; } void add(T t) { t.hashCode(); } } class c { /*String[] f () { List l = new List(); error descr="Incompatible types. Found: 'java.lang.Object[]', required: 'java.lang.String[]'">return l.toArray (new String[0]);</error }*/ String[] g () { List<String> l = new List<String>(); return l.toArray (new String[0]); } } class d { class Y <<warning descr="Type parameter 'T' is never used">T</warning>> { } class Z <<warning descr="Type parameter 'T' is never used">T</warning>> extends Y<Y> { } class Pair <X> { void foo(Y<? extends X> y) { y.hashCode(); } } Pair<Z> pair; void bar(Y<? extends Y> y) { pair.foo<error descr="'foo(d.Y<? extends d.Z>)' in 'd.Pair' cannot be applied to '(d.Y<capture<? extends d.Y>>)'">(y)</error>; } } class e { String foo () { MyList myList = new MyList(); <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">return myList.get(0);</error> } static class MyList<<warning descr="Type parameter 'T' is never used">T</warning>> extends ArrayList<String>{ } } class ccc { static Comparable<? super ccc> f() { return <warning descr="Unchecked assignment: 'anonymous java.lang.Comparable' to 'java.lang.Comparable<? super ccc>'">new Comparable () { public int compareTo(final Object o) { return 0; } }</warning>; } } class ddd<COMP extends ddd> { COMP comp; ddd foo() { return comp; //no unchecked warning is signalled here } } class G1<T> { T t; } class G2<T> { T t; static ArrayList<G1> f() { return null; } } class Inst { static void f () { G2<G1<String>> g2 = new G2<G1<String>>(); for (<warning descr="Unchecked assignment: 'G1' to 'G1<java.lang.String>'">G1<String> g1</warning> : g2.f()) { g1.toString(); } } } class A111<T> { T t; <V> V f(V v) { return v; } String g(A111 a) { //noinspection unchecked <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">return a.f("");</error> } } class A1 { <V> V f(V v) { return v; } } class A11<T> extends A1 { T t; //this is OK, type parameters of base class are not raw String s = new A11().f(""); } //IDEADEV-26163 class Test1<X> { X x; java.util.ArrayList<Number> foo = new java.util.ArrayList<Number>(); public static Number foo() { <error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.Number'">return new Test1().foo.get(0);</error> } } //end of IDEADEV-26163 /////////////// signatures in non-parameterized class are not erased class C3 { public int get(Class<?> c) { return 0; } } class Cp<T> extends C3 { public T i; } class C extends Cp/*<C>*/ { @Override public int get(Class<?> c) { return 0; } } //////////////