class Test {
interface A {}
interface B {}
//? extends A, ? extends B -----------------------------------------
void testEE1() {
class A {}
class B {}
W extends A> xx = null;
W extends B> y = (W extends B>) xx;
}
void testEE2() {
class A {}
class B extends A {}
W extends A> xx = null;
W extends B> y = (W extends B>) xx;
}
void testEE21() {
class A {}
class B extends A {}
W extends B> xx = null;
W extends A> y = (W extends A>) xx;
}
void testEE211() {
class A {}
final class B extends A {}
W extends A> xx = null;
W extends B> y = (W extends B>) xx;
}
void test3EE() {
W extends A> xx = null;
W extends B> y = (W extends B>) xx;
}
void test4EE() {
class A {}
W extends A> xx = null;
W extends B> y = (W extends B>) xx;
}
void test41EE() {
class A {}
W extends B> xx = null;
W extends A> y = (W extends A>) xx;
}
void test411EE() {
final class A {}
W extends B> xx = null;
W extends A> y = (W extends A>) xx;
}
void test412EE() {
final class A implements B {}
W extends B> xx = null;
W extends A> y = (W extends A>) xx;
}
void test1() {
class A {}
class B {}
W super A> xx = null;
W super B> y = (W super B>) xx;
}
void test2() {
final class A {}
final class B {}
W super A> xx = null;
W super B> y = (W super B>) xx;
}
//? super A, ? super B -------------------------
void test3SS() {
W super A> xx = null;
W super B> y = (W super B>) xx;
}
//? extends A, ? super B -------------------------
void test1ES() {
class A {}
class B {}
W extends A> x = null;
W super B> y = (W super B>) x;
}
void test2ES() {
class A {}
class B extends A {}
W extends A> x = null;
W super B> y = (W super B>) x;
}
void test3ES() {
class A {}
class B extends A {}
W extends B> x = null;
W super A> y = (W super A>) x;
}
void test4ES() {
W extends B> x = null;
W super A> y = (W super A>) x;
}
void test5ES() {
final class B implements A {}
W extends A> x = null;
W super B> y = (W super B>) x;
}
void test6ES() {
final class B implements A {}
W extends B> x = null;
W super A> y = (W super A>) x;
}
// ? extends A, B -----------------------
void test1EWC() {
class A {
}
class B {
}
W extends A> xx = null;
W y = (W) xx;
}
void test2EWC() {
class A {
}
W extends A> xx = null;
W> y = (W>) xx;
}
void test3EWC() {
class A {
}
class B extends A {
}
W extends A> xx = null;
W y = (W) xx;
}
// ? super A, B -----------------------
void test1SWC() {
class A {
}
class B {
}
W super A> xx = null;
W y = (W) xx;
}
void test2SWC() {
class A {
}
W super A> xx = null;
W> y = (W>) xx;
}
void test3SWC() {
class A {
}
class B extends A {
}
W super B> xx = null;
W y = (W) xx;
}
// ?, ? ------------------------------------------
void test1WWW() {
W> xx = null;
W> y = xx;
}
//? extends P extends A>, B --------------------
void test1EEWC() {
class A {
}
class B {
}
W extends P extends A>> xx = null;
W extends B> y = (W extends B>) xx;
}
void test2EEWC() {
class A {
}
class B extends P {
}
W extends P extends A>> xx = null;
W extends B> y = (W extends B>) xx;
}
void test3EEWC() {
class A {
}
class B extends P {
}
W extends P extends A>> xx = null;
W extends B super A>> y = (W extends B super A>>) xx;
}
void test4EEWC() {
class A {
}
class B extends P {
}
W extends P extends A>> xx = null;
W extends B>> y = (W extends B>>) xx;
}
void test5EEWC() {
class A {
}
class B extends P {
}
class C {}
W extends P extends A>> xx = null;
W extends B extends C>> y = (W extends B extends C>>) xx;
}
//Array Types inside wildcards
void test1AE() {
class A {}
class B {}
W extends A[]> xx = null;
W extends B[]> y = (W extends B[]>) xx;
}
void test11AE() {
class A {}
class B {}
W extends A[]> xx = null;
W extends B> y = (W extends B>) xx;
}
void test2AE() {
class A {}
class B extends A {}
W extends A[]> xx = null;
W extends B[]> y = (W extends B[]>) xx;
}
void test21AE() {
class A {}
class B extends A {}
W extends A[]> xx = null;
W extends B> y = (W extends B>) xx;
}
void testIntAE() {
W extends A[]> xx = null;
W extends B[]> y = (W extends B[]>) xx;
}
void testInt1AE() {
W extends A[]> xx = null;
W extends B[][]> y = (W extends B[][]>) xx;
}
void testASS() {
class A {}
class B {}
W super A[]> xx = null;
W super B[]> y = (W super B[]>) xx;
}
void test1AES() {
class A {}
class B {}
W extends A[]> x = null;
W super B[]> y = (W super B[]>) x;
}
void test2AES() {
class A {}
class B extends A {}
W extends A[]> x = null;
W super B[]> y = (W super B[]>) x;
}
void test3AES() {
class A {}
class B extends A {}
W extends B[]> x = null;
W super A[]> y = (W super A[]>) x;
}
void test4AES() {
W extends B[]> x = null;
W super A[]> y = (W super A[]>) x;
}
void test5AES() {
final class B implements A {}
W extends A[]> x = null;
W super B[]> y = (W super B[]>) x;
}
void test6AES() {
final class B implements A {}
W extends B[]> x = null;
W super A[]> y = (W super A[]>) x;
}
// type parameters extensions: D
void testT3() {
class A {
}
class D {
class B extends A {
}
void foo() {
D extends T> x = null;
D extends B> y = (D extends B>) x;
}
}
}
void testT4() {
class A {
}
class D {
class B {
}
void foo() {
D extends T> x = null;
D<? extends B> y = (D<? extends B>) x;
}
}
}
void testT5() {
class D {
class B {
}
void foo() {
D extends T> x = null;
D extends B> y = (D extends B>) x;
}
}
}
void testT6() {
class A {
}
class D {
class B extends A {
}
void foo() {
D super T> x = null;
D super B> y = (D super B>) x;
}
}
}
void testT7() {
class A {
}
class D {
class B extends A {
}
void foo() {
D extends T> x = null;
D super B> y = (D super B>) x;
}
}
}
void testT8() {
class A {
}
class D {
class B extends A {
}
void foo() {
D super T> x = null;
D extends B> y = (D extends B>) x;
}
}
}
void testT9() {
class A {
}
class D {
class B extends A {
}
void foo() {
D super T> x = null;
D extends A> y = (D extends B>) x;
}
}
}
void testUnbounded() {
W> x = null;
W extends A> y = ( W extends A>) x;
W> y1 = (W>)x;
}
void testTypeParams() {
class MyClass {
MyClass convert(MyClass super K, ? super V> arg) {
MyClass result = (MyClass)arg;
return result;
}
}
}
//IDEA-63447
void testUnboundWildcardWithArrayTypes() {
class IUWWAT{
private void method1(T[][] matrix) {
final Class type = (Class) matrix.getClass().getComponentType();
}
private void method2(T[][] matrix) {
final Class