blob: a44b131cf6dc8ed6090b4d5988f9ffac7df2c32b [file] [log] [blame]
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;
}
}
//////////////