check type within its bound: wildcards

This commit is contained in:
anna
2010-08-12 21:01:15 +04:00
parent 86d114f730
commit e70fae642f
8 changed files with 298 additions and 143 deletions
@@ -7,32 +7,32 @@ class Neg01<X extends Number> {
}
void test() {
Neg01<<error>String</error>> n1 = new Neg01<<error></error>>("" ); //new Foo<Integer> created
Neg01<? extends String> n2 = new Neg01<<error></error>>(""); //new Foo<Integer> created
Neg01<?> n3 = new Neg01<><error>("")</error>; //new Foo<Object> created
Neg01<? super String> n4 = new Neg01<<error></error>>(""); //new Foo<Object> created
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n1 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("" ); //new Foo<Integer> created
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n2 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Neg01<?> n3 = new Neg01<><error descr="'Neg01(? extends java.lang.Number)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Object> created
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n4 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Object> created
Neg01<<error>String</error>> n5 = new Neg01<<error></error>>("") {
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n5 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Integer> created
Neg01<? extends String> n6 = new Neg01<<error></error>>("") {
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n6 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Integer> created
Neg01<?> n7 = new Neg01<><error>("")</error> {
Neg01<?> n7 = new Neg01<><error descr="'Neg01(? extends java.lang.Number)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error> {
}; //new Foo<Object> created
Neg01<? super String> n8 = new Neg01<<error></error>>("") {
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n8 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Object> created
Neg01<<error>String</error>> n9 = new Neg01<<error></error>>("", ""); //new Foo<Integer> created
Neg01<? extends String> n10 = new Neg01<<error></error>>("", ""); //new Foo<Integer> created
Neg01<?> n11 = new Neg01<><error>("", "")</error>; //new Foo<Object> created
<error>Foo</error><? super String> n12 = new Neg01<<error></error>>("", ""); //new Foo<Object> created
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n9 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n10 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Neg01<?> n11 = new Neg01<><error descr="'Neg01(? extends java.lang.Number, java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Object> created
<error descr="Cannot resolve symbol 'Foo'">Foo</error><? super String> n12 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Object> created
Neg01<<error>String</error>> n13 = new Neg01<<error></error>>("", "") {
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n13 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Integer> created
Neg01<? extends String> n14 = new Neg01<<error></error>>("", "") {
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n14 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Integer> created
Neg01<?> n15 = new Neg01<><error>("", "")</error> {
Neg01<?> n15 = new Neg01<><error descr="'Neg01(? extends java.lang.Number, java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error> {
}; //new Foo<Object> created
Neg01<? super String> n16 = new Neg01<<error></error>>("", "") {
Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n16 = new Neg01<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Object> created
}
}
@@ -9,62 +9,62 @@ class Neg02 {
}
void testSimple() {
Foo<<error>String</error>> f1 = new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<? extends String> f2 = new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Foo<><error>("")</error>; //new Foo<Object> created
Foo<? super String> f4 = new Foo<<error></error>>(""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Object> created
Foo<<error>String</error>> f5 = new Foo<<error></error>>("") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Integer> created
Foo<? extends String> f6 = new Foo<<error></error>>("") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Integer> created
Foo<?> f7 = new Foo< ><error>("")</error> {
Foo<?> f7 = new Foo< ><error descr="'Foo(? extends java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error> {
}; //new Foo<Object> created
Foo<? super String> f8 = new Foo<<error></error>>("") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Object> created
Foo<<error>String</error>> f9 = new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<? extends String> f10 = new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Foo< ><error>("", "")</error>; //new Foo<Object> created
Foo<? super String> f12 = new Foo<<error></error>>("", ""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f9 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f10 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Foo< ><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f12 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Object> created
Foo<<error>String</error>> f13 = new Foo<<error></error>>("", "") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f13 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Integer> created
Foo<? extends String> f14 = new Foo<<error></error>>("", "") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f14 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Integer> created
Foo<?> f15 = new Foo< ><error>("", "")</error> {
Foo<?> f15 = new Foo< ><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error> {
}; //new Foo<Object> created
Foo<? super String> f16 = new Foo<<error></error>>("", "") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f16 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Object> created
}
void testQualified() {
Foo<<error>String</error>> f1 = new Neg02.Foo<<error></error>>(""); //new Foo<Integer> created
Foo<? extends String> f2 = new Neg02.Foo<<error></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Neg02.Foo< ><error>("")</error>; //new Foo<Object> created
Foo<? super String> f4 = new Neg02.Foo<<error></error>>(""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Neg02.Foo< ><error descr="'Foo(? extends java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Object> created
Foo<<error>String</error>> f5 = new Neg02.Foo<<error></error>>("") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Integer> created
Foo<? extends String> f6 = new Neg02.Foo<<error></error>>("") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Integer> created
Foo<?> f7 = new Neg02.Foo< ><error>("")</error> {
Foo<?> f7 = new Neg02.Foo< ><error descr="'Foo(? extends java.lang.Number)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error> {
}; //new Foo<Object> created
Foo<? super String> f8 = new Neg02.Foo<<error></error>>("") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("") {
}; //new Foo<Object> created
Foo<<error>String</error>> f9 = new Neg02.Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<? extends String> f10 = new Neg02.Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Neg02.Foo< ><error>("", "")</error>; //new Foo<Object> created
Foo<? super String> f12 = new Neg02.Foo<<error></error>>("", ""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f9 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f10 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Neg02.Foo< ><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f12 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Object> created
Foo<<error>String</error>> f13 = new Neg02.Foo<<error></error>>("", "") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f13 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Integer> created
Foo<? extends String> f14 = new Neg02.Foo<<error></error>>("", "") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f14 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Integer> created
Foo<?> f15 = new Neg02.Foo< ><error>("", "")</error> {
Foo<?> f15 = new Neg02.Foo< ><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error> {
}; //new Foo<Object> created
Foo<? super String> f16 = new Neg02.Foo<<error></error>>("", "") {
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f16 = new Neg02.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", "") {
}; //new Foo<Object> created
}
}
@@ -6,68 +6,68 @@ class Neg03<U> {
}
void testSimple() {
Foo<<error>String</error>> f1 = new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<? extends String> f2 = new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Foo<><error>("")</error>; //new Foo<Object> created
Foo<? super String> f4 = new Foo<<error></error>>(""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Object> created
Foo<<error>String</error>> f5 = new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<? extends String> f6 = new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<?> f7 = new Foo<><error>("")</error>{}; //new Foo<Object> created
Foo<? super String> f8 = new Foo<<error></error>>(""){}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<?> f7 = new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>{}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Object> created
Foo<<error>String</error>> f9 = new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<? extends String> f10 = new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Foo<><error>("", "")</error>; //new Foo<Object> created
Foo<? super String> f12 = new Foo<<error></error>>("", ""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f9 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f10 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f12 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Object> created
Foo<<error>String</error>> f13 = new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<? extends String> f14 = new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<?> f15 = new Foo<><error>("", "")</error>{}; //new Foo<Object> created
Foo<? super String> f16 = new Foo<<error></error>>("", ""){}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f13 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f14 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<?> f15 = new Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>{}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f16 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Object> created
}
void testQualified_1() {
Foo<<error>String</error>> f1 = new Neg03<U>.Foo<<error></error>>(""); //new Foo<Integer> created
Foo<? extends String> f2 = new Neg03<U>.Foo<<error></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Neg03<U>.Foo<><error>("")</error>; //new Foo<Object> created
Foo<? super String> f4 = new Neg03<U>.Foo<<error></error>>(""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<?> f3 = new Neg03<U>.Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Object> created
Foo<<error>String</error>> f5 = new Neg03<U>.Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<? extends String> f6 = new Neg03<U>.Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<?> f7 = new Neg03<U>.Foo<><error>("")</error>{}; //new Foo<Object> created
Foo<? super String> f8 = new Neg03<U>.Foo<<error></error>>(""){}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<?> f7 = new Neg03<U>.Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>{}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Object> created
Foo<<error>String</error>> f9 = new Neg03<U>.Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<? extends String> f10 = new Neg03<U>.Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Neg03<U>.Foo<><error>("", "")</error>; //new Foo<Object> created
Foo<? super String> f12 = new Neg03<U>.Foo<<error></error>>("", ""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f9 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f10 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = new Neg03<U>.Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f12 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Object> created
Foo<<error>String</error>> f13 = new Neg03<U>.Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<? extends String> f14 = new Neg03<U>.Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<?> f15 = new Neg03<U>.Foo<><error>("", "")</error>{}; //new Foo<Object> created
Foo<? super String> f16 = new Neg03<U>.Foo<<error></error>>("", ""){}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f13 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f14 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<?> f15 = new Neg03<U>.Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>{}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f16 = new Neg03<U>.Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Object> created
}
void testQualified_2(Neg03<U> n) {
Foo<<error>String</error>> f1 = n.new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<? extends String> f2 = n.new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<?> f3 = n.new Foo<><error>("")</error>; //new Foo<Integer> created
Foo<? super String> f4 = n.new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f1 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f2 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<?> f3 = n.new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f4 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error>String</error>> f5 = n.new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<? extends String> f6 = n.new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<?> f7 = n.new Foo<><error>("")</error>{}; //new Foo<Integer> created
Foo<? super String> f8 = n.new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f5 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f6 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<?> f7 = n.new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>{}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f8 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<<error>String</error>> f9 = n.new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<? extends String> f10 = n.new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = n.new Foo<><error>("", "")</error>; //new Foo<Integer> created
Foo<? super String> f12 = n.new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f9 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f10 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<?> f11 = n.new Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f12 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error>String</error>> f13 = n.new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<? extends String> f14 = n.new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<?> f15 = n.new Foo<><error>("", "")</error>{}; //new Foo<Integer> created
Foo<? super String> f16 = n.new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> f13 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> f14 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<?> f15 = n.new Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>{}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> f16 = n.new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
}
}
@@ -1,28 +1,28 @@
class Neg04 {
class Neg04 {
void test() {
class Foo<V extends Number> {
Foo(V x) {}
<Z> Foo(V x, Z z) {}
}
Foo<<error>String</error>> n1 = new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<? extends String> n2 = new Foo<<error></error>>(""); //new Foo<Integer> created
Foo<?> n3 = new Foo<><error>("")</error>; //new Foo<Object> created
Foo<? super String> n4 = new Foo<<error></error>>(""); //new Foo<Object> created
Foo<<error>String</error>> n5 = new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<? extends String> n6 = new Foo<<error></error>>(""){}; //new Foo<Integer> created
Foo<?> n7 = new Foo<><error>("")</error>{}; //new Foo<Object> created
Foo<? super String> n8 = new Foo<<error></error>>(""){}; //new Foo<Object> created
Foo<<error>String</error>> n9 = new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<? extends String> n10 = new Foo<<error></error>>("", ""); //new Foo<Integer> created
Foo<?> n11 = new Foo<><error>("", "")</error>; //new Foo<Object> created
Foo<? super String> n12 = new Foo<<error></error>>("", ""); //new Foo<Object> created
Foo<<error>String</error>> n13 = new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<? extends String> n14 = new Foo<<error></error>>("", ""){}; //new Foo<Integer> created
Foo<?> n15 = new Foo<><error>("", "")</error>{}; //new Foo<Object> created
Foo<? super String> n16 = new Foo<<error></error>>("", ""){}; //new Foo<Object> created
}
void test() {
class Foo<V extends Number> {
Foo(V x) {}
<Z> Foo(V x, Z z) {}
}
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n1 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n2 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Integer> created
Foo<?> n3 = new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n4 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n5 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n6 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Integer> created
Foo<?> n7 = new Foo<><error descr="'Foo(? extends java.lang.Number)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>{}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n8 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>(""){}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n9 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n10 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Integer> created
Foo<?> n11 = new Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n12 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""); //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">String</error>> n13 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? extends String</error>> n14 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Integer> created
Foo<?> n15 = new Foo<><error descr="'Foo(? extends java.lang.Number, java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String, java.lang.String)'">("", "")</error>{}; //new Foo<Object> created
Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'">? super String</error>> n16 = new Foo<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Number'"></error>>("", ""){}; //new Foo<Object> created
}
}
@@ -0,0 +1,146 @@
public class WithingBounds {
interface I {
}
void testE1() {
class A {
}
class B extends A {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<? extends B> pr;
}
void testERec1() {
class A {
}
class B<K> extends A {
}
class C<Y>{}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<<error descr="Type parameter 'C' is not within its bound; should extend 'A'">? extends C<? extends C></error>> pr;
ToCheckExtends<? extends B<? extends C>> pr1;
}
void testE2() {
class A {
}
class B {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<<error descr="Type parameter 'B' is not within its bound; should extend 'A'">? extends B</error>> pr;
}
void testE22() {
class B {
}
class A extends B {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<? extends B> pr;
}
void testE23() {
class A {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<? extends I> pr;
}
void testE24() {
final class A {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<<error descr="Type parameter 'WithingBounds.I' is not within its bound; should implement 'A'">? extends I</error>> pr;
}
//---------------------------------
void testE3() {
class A {
}
class ToCheckExtends<TTT extends I> {
}
ToCheckExtends<? extends A> pr;
}
void testE4() {
final class A {
}
class ToCheckExtends<TTT extends I> {
}
ToCheckExtends<<error descr="Type parameter 'A' is not within its bound; should implement 'WithingBounds.I'">? extends A</error>> pr;
}
void testE5() {
final class A implements I {
}
class ToCheckExtends<TTT extends I> {
}
ToCheckExtends<? extends A> pr;
}
interface AInterface {
}
void testE6() {
class ToCheckExtends<TTT extends I> {
}
ToCheckExtends<? extends AInterface> pr;
}
//-----------------------------
void testS1() {
class A {
}
class B extends A {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<? super B> pr;
}
void testS2() {
class A {
}
class B {
}
class ToCheckExtends<TTT extends A> {
}
ToCheckExtends<<error descr="Type parameter 'B' is not within its bound; should extend 'A'">? super B</error>> pr;
}
void testS3() {
class A {
}
class B extends A {
}
class ToCheckExtends<TTT extends B> {
}
ToCheckExtends<<error descr="Type parameter 'A' is not within its bound; should extend 'B'">? super A</error>> pr;
}
}
@@ -8,7 +8,7 @@ public class Test {
class B {}
W<? extends A> xx = null;
W<? extends B> y = <error>(W<? extends B>) xx</error>;
W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
}
void testEE2() {
@@ -55,7 +55,7 @@ public class Test {
void test411EE() {
final class A {}
W<? extends B> xx = null;
W<? extends A> y = <error>(W<? extends A>) xx</error>;
W<? extends A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.B>>' to 'W<? extends A>'">(W<? extends A>) xx</error>;
}
void test412EE() {
@@ -92,7 +92,7 @@ public class Test {
class B {}
W<? extends A> x = null;
W<? super B> y = <error>(W<? super B>) x</error>;
W<? super B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A>>' to 'W<? super B>'">(W<? super B>) x</error>;
}
void test2ES() {
@@ -108,13 +108,13 @@ public class Test {
class B extends A {}
W<? extends B> x = null;
W<? super A> y = <error>(W<? super A>) x</error>;
W<? super A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B>>' to 'W<? super A>'">(W<? super A>) x</error>;
}
void test4ES() {
W<? extends B> x = null;
W<? super A> y = <error>(W<? super A>) x</error>;
W<? super A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.B>>' to 'W<? super Test.A>'">(W<? super A>) x</error>;
}
void test5ES() {
@@ -128,7 +128,7 @@ public class Test {
final class B implements A {}
W<? extends B> x = null;
W<? super A> y = <error>(W<? super A>) x</error>;
W<? super A> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B>>' to 'W<? super Test.A>'">(W<? super A>) x</error>;
}
// ? extends A, B -----------------------
@@ -139,7 +139,7 @@ public class Test {
}
W<? extends A> xx = null;
W<B> y = <error>(W<B>) xx</error>;
W<B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A>>' to 'W<B>'">(W<B>) xx</error>;
}
void test2EWC() {
@@ -168,7 +168,7 @@ public class Test {
}
W<? super A> xx = null;
W<B> y = <error>(W<B>) xx</error>;
W<B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? super A>>' to 'W<B>'">(W<B>) xx</error>;
}
void test2SWC() {
@@ -204,7 +204,7 @@ public class Test {
}
W<? extends P<? extends A>> xx = null;
W<? extends B> y = <error>(W<? extends B>) xx</error>;
W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends P<? extends A>>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
}
void test2EEWC() {
@@ -255,7 +255,7 @@ public class Test {
class B {}
W<? extends A[]> xx = null;
W<? extends B[]> y = <error>(W<? extends B[]>) xx</error>;
W<? extends B[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? extends B[]>'">(W<? extends B[]>) xx</error>;
}
void test11AE() {
@@ -263,7 +263,7 @@ public class Test {
class B {}
W<? extends A[]> xx = null;
W<? extends B> y = <error>(W<? extends B>) xx</error>;
W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
}
void test2AE() {
@@ -279,7 +279,7 @@ public class Test {
class B extends A {}
W<? extends A[]> xx = null;
W<? extends B> y = <error>(W<? extends B>) xx</error>;
W<? extends B> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? extends B>'">(W<? extends B>) xx</error>;
}
@@ -293,7 +293,7 @@ public class Test {
void testInt1AE() {
W<? extends A[]> xx = null;
W<? extends B[][]> y = <error>(W<? extends B[][]>) xx</error>;
W<? extends B[][]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.A[]>>' to 'W<? extends Test.B[][]>'">(W<? extends B[][]>) xx</error>;
}
void testASS() {
@@ -309,7 +309,7 @@ public class Test {
class B {}
W<? extends A[]> x = null;
W<? super B[]> y = <error>(W<? super B[]>) x</error>;
W<? super B[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends A[]>>' to 'W<? super B[]>'">(W<? super B[]>) x</error>;
}
void test2AES() {
@@ -325,14 +325,14 @@ public class Test {
class B extends A {}
W<? extends B[]> x = null;
W<? super A[]> y = <error>(W<? super A[]>) x</error>;
W<? super A[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B[]>>' to 'W<? super A[]>'">(W<? super A[]>) x</error>;
}
void test4AES() {
W<? extends B[]> x = null;
W<? super A[]> y = <error>(W<? super A[]>) x</error>;
W<? super A[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends Test.B[]>>' to 'W<? super Test.A[]>'">(W<? super A[]>) x</error>;
}
void test5AES() {
@@ -346,7 +346,7 @@ public class Test {
final class B implements A {}
W<? extends B[]> x = null;
W<? super A[]> y = <error>(W<? super A[]>) x</error>;
W<? super A[]> y = <error descr="Inconvertible types; cannot cast 'W<capture<? extends B[]>>' to 'W<? super Test.A[]>'">(W<? super A[]>) x</error>;
}
// type parameters extensions: D<T extends A>
@@ -375,7 +375,7 @@ public class Test {
void foo() {
D<? extends T> x = null;
D<? extends B> y = <error>(D<? extends B>) x</error>;
D<<error descr="Type parameter 'B' is not within its bound; should extend 'A'">? extends B</error>> y = (D<<error descr="Type parameter 'B' is not within its bound; should extend 'A'">? extends B</error>>) x;
}
}