blob: 12b581da9a4776864d11401c40647bce10e24c8c [file] [log] [blame]
import java.lang.Override;
import java.util.*;
class GenericsTest<T> {
static <S> S next(GenericsTest<S> test)
{
System.out.println(test);
return null;
}
public Iterator<T> iterator()
{
return new Iterator<T>() {
@Override
public boolean hasNext()
{
return false;
}
@Override
public T next()
{
return GenericsTest.next(GenericsTest.this);
}
@Override
public void remove()
{
}
};
}
}
class GenericsTest1<T> {
static <S> S next1(GenericsTest1<S> test)
{
System.out.println(test);
return null;
}
public Iterator<T> iterator()
{
return new Iterator<T>() {
@Override
public boolean hasNext()
{
return false;
}
@Override
public T next()
{
return GenericsTest1.next1(GenericsTest1.this);
}
@Override
public void remove()
{
}
};
}
}
class GenericsTest2<T> {
static <S> S next2(GenericsTest2<S> test)
{
System.out.println(test);
return null;
}
public Iterator<T> iterator()
{
return new Iterator<T>() {
@Override
public boolean hasNext()
{
return false;
}
@Override
public T next()
{
return next2(GenericsTest2.this);
}
@Override
public void remove()
{
}
};
}
}
class Example {
private static <T> void assertThat(T actual, Matcher<? super T> matcher) {
assert actual != null;
assert matcher != null;
}
private static <E> Matcher<? super Collection<? extends E>> hasSize(int size) {
assert size >=0;
return new Matcher<Collection<? extends E>>() {
@Override
public void foo(Collection<? extends E> es) {
System.out.println(es);
}
};
}
public static void main(String[] args) {
List<Boolean> list = <warning descr="Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Boolean>'">new ArrayList()</warning>;
System.out.println(list);
assertThat(new ArrayList<Boolean>(), hasSize(0));
}
private interface Matcher<T> {
void foo(T t);
}
}
abstract class IDEA57337<<warning descr="Type parameter 'S' is never used">S</warning>> {
abstract <T> void foo(IDEA57337<? super IDEA57337<T>> x);
void bar(IDEA57337<? super IDEA57337<?>> x){
foo(x);
}
}