blob: 8686aefd63b6bccaf3995585d737692cc7776b80 [file] [log] [blame]
import java.util.*;
class a {
public void printList(List<?> list) {
for (Iterator<?> i = list.iterator(); i.hasNext();) {
System.out.println(i.next().toString());
}
}
}
class b<<warning descr="Type parameter 'T' is never used">T</warning>> {
public interface Lst <E, Self extends Lst<E, Self>> {
Self subList(int fromIndex, int toIndex);
}
public static Lst<?, ?> foo(Lst<?, ?> lst) {
Lst<?, ?> myl = lst.subList(0, 2);
return myl;
}
}
class ThingUser <V> {
V v;
{
new ThingUser<<error descr="Wildcard type '?' cannot be instantiated directly">?</error>>() {
};
}
}
class SuperWildcardTest {
static void method(List<?> list) {
<error descr="Incompatible types. Found: 'java.util.List<capture<?>>', required: 'java.util.List<? super java.lang.String>'">List<? super String> l = list;</error>
l.size();
}
}
class IdeaDev4166 {
Map<String, Object> f( Map<String, ?> fieldsTemplate) {
return new HashMap<String, Object>( fieldsTemplate);
}
}
//IDEADEV-5816
class TwoD {
int x, y;
TwoD(int a, int b) {
x = a;
y = b;
}
}
// Three-dimensional coordinates.
class ThreeD extends TwoD {
int z;
ThreeD(int a, int b, int c) {
super(a, b);
z = c;
}
}
// Four-dimensional coordinates.
class FourD extends ThreeD {
int t;
FourD(int a, int b, int c, int d) {
super(a, b, c);
t = d;
}
}
// This class holds an array of coordinate objects.
class Coords<T extends TwoD> {
T[] coords;
Coords(T[] o) { coords = o; }
}
// Demonstrate a bounded wildcard.
class BoundedWildcard {
static void showXY(Coords<? extends TwoD> c) {
System.out.println("X Y Coordinates:");
for(int i=0; i < c.coords.length; i++) {
System.out.println(c.coords[i].x + " " + c.coords[i].y);
}
System.out.println();
}
static void showXYZ(Coords<? extends ThreeD> c) {
System.out.println("X Y Z Coordinates:");
for(int i=0; i < c.coords.length; i++)
System.out.println(c.coords[i].x + " " +
c.coords[i].y + " " +
c.coords[i].z);
System.out.println();
}
static void showAll(Coords<? extends FourD> c) {
System.out.println("X Y Z T Coordinates:");
for(int i=0; i < c.coords.length; i++)
System.out.println(c.coords[i].x + " " +
c.coords[i].y + " " +
c.coords[i].z + " " +
c.coords[i].t);
System.out.println();
}
public static void main(String args[]) {
TwoD td[] = {
new TwoD(0, 0),
new TwoD(7, 9),
new TwoD(18, 4),
new TwoD(-1, -23)
};
Coords<TwoD> tdlocs = new Coords<TwoD>(td);
System.out.println("Contents of tdlocs.");
showXY(tdlocs); // OK, is a TwoD
showXYZ<error descr="'showXYZ(Coords<? extends ThreeD>)' in 'BoundedWildcard' cannot be applied to '(Coords<TwoD>)'">(tdlocs)</error>;
showAll<error descr="'showAll(Coords<? extends FourD>)' in 'BoundedWildcard' cannot be applied to '(Coords<TwoD>)'">(tdlocs)</error>;
// Now, create some FourD objects.
FourD fd[] = {
new FourD(1, 2, 3, 4),
new FourD(6, 8, 14, 8),
new FourD(22, 9, 4, 9),
new FourD(3, -2, -23, 17)
};
Coords<FourD> fdlocs = new Coords<FourD>(fd);
System.out.println("Contents of fdlocs.");
// These are all OK.
showXY(fdlocs);
showXYZ(fdlocs);
showAll(fdlocs);
}
}
//end of IDEADEV-5816
interface I33 {}
class Q<T extends I33> {
T t;
<V extends I33> List<V> foo(Q<V> v) {
v.hashCode();
return null;
}
List<? extends I33> g (Q<?> q) {
return foo(q);
}
}
//IDEADEV-16628
class CollectionHelper {
public static <A> Collection<A> convertDown(Collection<? super A> collection) {
return collection == null ? null : null;
}
public static <A> Collection<A> convertUp(Collection<? extends A> collection) {
return collection == null ? null : null;
}
public static void main(String[] args) {
// Downcast examples
final Collection<Number> numbers1 = new ArrayList<Number>(1);
Collection<Integer> integers1 = CollectionHelper.convertDown(numbers1);
integers1.hashCode();
// Upcast example
final Collection<Integer> integers4 = new ArrayList<Integer>(1);
final Collection<Number> numbers4 = CollectionHelper.<Number>convertUp(integers4);
numbers4.hashCode();
}
}
//IDEA-62529
class My<T> {
private Class<? super T> getSuperclass(){
return null;
}
public void test() {
if (getSuperclass() == List.class);
}
}
class IDEA75178 {
void test(Set<String> labels) {
final Matcher<? super Object> empty = isEmpty();
assertThat(labels, empty);
assertAlsoThat(empty, labels);
}
public static <T> void assertThat(T actual, Matcher<T> matcher) { throw new AssertionError(actual.toString() + matcher.toString());}
public static <T> void assertAlsoThat(Matcher<T> matcher, T actual) { throw new AssertionError(actual.toString() + matcher.toString());}
public static <T> Matcher<? super T> isEmpty() {
return null;
}
static class Matcher<<warning descr="Type parameter 'T' is never used">T</warning>>{}
class Foo {}
void testComment() {
Set<Foo> foos = Collections.emptySet();
assertThatComment(foos, hasSize(0));
}
<E> Matcher<? super Collection<? extends E>> hasSize(int size) {return size == 0 ? null : null;}
<T> void assertThatComment(T actual, Matcher<? super T> matcher){ throw new AssertionError(actual.toString() + matcher.toString());}
}
class IDEA66750 {
public void test() {
List<List<String>> data = new ArrayList<List<String>>();
List<List<?>> y = <error descr="Inconvertible types; cannot cast 'java.util.List<java.util.List<java.lang.String>>' to 'java.util.List<java.util.List<?>>'">(List<List<?>>)data</error>;
System.out.println(y);
ArrayList<Number> al = <error descr="Inconvertible types; cannot cast 'java.util.ArrayList<java.lang.Integer>' to 'java.util.ArrayList<java.lang.Number>'">(ArrayList<Number>) new ArrayList<Integer>(1)</error>;
System.out.println(al);
}
}
class IDEA73377 {
public Iterator<Map.Entry<Map.Entry<?, ?>, ?>> iterator(Map<?, ?> map) {
//noinspection unchecked
return <error descr="Inconvertible types; cannot cast 'java.util.Iterator<java.util.Map.Entry<capture<?>,capture<?>>>' to 'java.util.Iterator<java.util.Map.Entry<java.util.Map.Entry<?,?>,?>>'">(Iterator<Map.Entry<Map.Entry<?, ?>, ?>>)map.entrySet().iterator()</error>;
}
}
class IDEA91481 {
void bar(){
BeanBuilder<? extends DirectBean> builder = <warning descr="Unchecked cast: 'IDEA91481.BeanBuilder<capture<? extends IDEA91481.Bean>>' to 'IDEA91481.BeanBuilder<? extends IDEA91481.DirectBean>'">(BeanBuilder<? extends DirectBean>) builder()</warning>;
System.out.println(builder);
}
BeanBuilder<? extends Bean> builder() {
return null;
}
class BeanBuilder<<warning descr="Type parameter 'T' is never used">T</warning>> {}
class Bean {}
class DirectBean extends Bean {}
}
class IDEA89640 {
interface X {}
class Y<<warning descr="Type parameter 'T' is never used">T</warning> extends X> {}
public static void main(String[] args) {
Y<? extends X> a = null;
Y<? extends X> b = null;
boolean flag = a != b;
System.out.println(flag);
}
}