| public class WithingBounds { |
| interface I { |
| } |
| interface I1 { |
| } |
| |
| 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 '? extends C<? extends 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 '? extends 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 '? extends I' is not within its bound; should extend 'A'">? extends I</error>> pr; |
| } |
| |
| |
| void testE25() { |
| class B { |
| void foo() { |
| this.<Iterable>bar(); |
| } |
| |
| <T extends Iterable<String>> void bar() { |
| } |
| } |
| } |
| |
| void testE26() { |
| class A<T>{} |
| class B { |
| void foo() { |
| this.<A>bar(); |
| } |
| |
| <T extends A<String>> void bar() { |
| } |
| } |
| } |
| |
| //--------------------------------- |
| |
| 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 '? extends A' is not within its bound; should extend '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 '? super 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 '? super A' is not within its bound; should extend 'B'">? super A</error>> pr; |
| } |
| |
| void testMisc() { |
| class A<T, S extends T> {} |
| class i {} |
| final class ii extends i {} |
| |
| A<String, String> pr4; |
| A<Integer, <error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'java.lang.Integer'">String</error>> pr5; |
| A<String, ? extends String> pr51; |
| A<Integer, <error descr="Type parameter '? extends String' is not within its bound; should extend 'java.lang.Integer'">? extends String</error>> pr52; |
| A<String, ? super String> pr53; |
| A<ii, <error descr="Type parameter 'i' is not within its bound; should extend 'ii'">i</error>> pr54; |
| A<i, ii> pr55; |
| A<i, ? extends ii> pr56; |
| A<ii, ? extends i> pr57; |
| A<i, ? super ii> pr58; |
| A<ii, <error descr="Type parameter '? super i' is not within its bound; should extend 'ii'">? super i</error>> pr59; |
| A<i, <error descr="Type parameter '? extends A<i, i>' is not within its bound; should extend 'i'">? extends A<i, i></error>> pr510; |
| A<i, <error descr="Type parameter 'ii[]' is not within its bound; should extend 'i'">ii[]</error>> pr511; |
| A<i, ?> pr512; |
| |
| A<?, ?> pr30; |
| A<?, <error descr="Type parameter 'i' is not within its bound; should extend '?'">i</error>> pr3; |
| A<? extends Object, i> pr330; |
| A<?, ? extends ii> pr2; |
| A<?, <error descr="Type parameter '? super String' is not within its bound; should extend '?'">? super String</error>> pr10; |
| A<?, <error descr="Type parameter 'A' is not within its bound; should extend '?'">A<?, ?></error>> pr31; |
| A<?, <error descr="Type parameter 'ii[]' is not within its bound; should extend '?'">ii[]</error>> pr32; |
| A<?, <error descr="Type parameter 'A' is not within its bound; should extend '?'">A<i, i></error>> pr33; |
| |
| A<? extends i, i> pr6; |
| A<? extends ii, <error descr="Type parameter 'i' is not within its bound; should extend '? extends ii'">i</error>> pr6x1; |
| A<? extends i, ii> pr6x2; |
| A<? extends ii, ii> pr6x3; |
| A<? extends i, <error descr="Type parameter 'java.lang.Integer' is not within its bound; should extend '? extends i'">Integer</error>> pr8; |
| |
| A<? extends i, <error descr="Type parameter '? extends String' is not within its bound; should extend '? extends i'">? extends String</error>> pr12; |
| A<? extends i, ? extends i> pr13; |
| A<? extends i, ? extends ii> pr14; |
| A<? extends ii, ? extends i> pr13x3; |
| A<? extends ii, ? extends ii> pr13x4; |
| |
| |
| A<? extends i, ? super i> pr19; |
| A<? extends i, ? super ii> pr110; |
| A<? extends ii, ? super ii> pr11x0; |
| A<? extends ii, <error descr="Type parameter '? super i' is not within its bound; should extend '? extends ii'">? super i</error>> pr111; |
| |
| A<? extends i, ?> pr15; |
| A<? extends i, <error descr="Type parameter 'ii[]' is not within its bound; should extend '? extends i'">ii[]</error>> pr16; |
| A<? extends i, <error descr="Type parameter 'A' is not within its bound; should extend '? extends i'">A<?, ?></error>> pr17; |
| A<? extends i, <error descr="Type parameter 'A' is not within its bound; should extend '? extends i'">A<ii, ii></error>> pr18; |
| A<? extends ii, <error descr="Type parameter '? super String' is not within its bound; should extend '? extends ii'">? super String</error>> pr112; |
| A<? extends ii, <error descr="Type parameter '? super A<i, i>' is not within its bound; should extend '? extends ii'">? super A<i, i></error>> pr113; |
| |
| A<? super i, i> pr701; |
| A<? super i, <error descr="Type parameter 'java.lang.String' is not within its bound; should extend '? super i'">String</error>> pr72; |
| A<? super i, ?> pr73; |
| A<? super i, <error descr="Type parameter 'ii[]' is not within its bound; should extend '? super i'">ii[]</error>> pr74; |
| A<? super i, <error descr="Type parameter '? extends String' is not within its bound; should extend '? super i'">? extends String</error>> pr75; |
| A<? super i, ? extends i> pr76; |
| A<? super ii, ? extends i> pr77; |
| A<? super ii, ? extends ii> pr78; |
| A<? super i, ? super i> pr79; |
| A<? super i, ? super ii> pr791; |
| A<? super ii, ? super ii> pr713; |
| A<? super i, <error descr="Type parameter '? super String' is not within its bound; should extend '? super i'">? super String</error>> pr712; |
| A<? super ii, <error descr="Type parameter '? super i' is not within its bound; should extend '? super ii'">? super i</error>> pr710; |
| A<? super ii, <error descr="Type parameter 'i' is not within its bound; should extend '? super ii'">i</error>> pr70; |
| A<? super i, ii> pr71; |
| A<? super i, ? extends ii> pr711; |
| |
| A<i[], i[]> a1; |
| A<i[], <error descr="Type parameter 'java.lang.Object' is not within its bound; should extend 'i[]'">Object</error>> a2; |
| A<i[], ii[]> a3; |
| A<ii[], <error descr="Type parameter 'i[]' is not within its bound; should extend 'ii[]'">i[]</error>> a4; |
| |
| A<i[], <error descr="Type parameter 'int[]' is not within its bound; should extend 'i[]'">int[]</error>> a5; |
| A<Object, int[]> a6; |
| A<Cloneable, int[]> a7; |
| A<java.io.Serializable, int[]> a8; |
| A<Cloneable[], <error descr="Type parameter 'int[]' is not within its bound; should extend 'java.lang.Cloneable[]'">int[]</error>> a9; |
| A<Cloneable[], int[][]> a10; |
| A<Cloneable[][], int[][][]> a11; |
| A<Cloneable[], <error descr="Type parameter 'i[]' is not within its bound; should extend 'java.lang.Cloneable[]'">i[]</error>> a12; |
| A<Cloneable[], i[][]> a13; |
| |
| A<? super i[], ii[]> a14; |
| A<? super i[], i[]> a140; |
| A<? super ii[], <error descr="Type parameter 'i[]' is not within its bound; should extend '? super ii[]'">i[]</error>> a141; |
| A<? super i[], <error descr="Type parameter 'i' is not within its bound; should extend '? super i[]'">i</error>> a142; |
| A<? super i[], <error descr="Type parameter 'java.lang.String' is not within its bound; should extend '? super i[]'">String</error>> a143; |
| A<? super i[], <error descr="Type parameter 'i[][]' is not within its bound; should extend '? super i[]'">i[][]</error>> a144; |
| A<? super i[], ? extends i[]> a145; |
| A<? super i[], ? extends ii[]> a146; |
| A<? super ii[], ? extends i[]> a147; |
| A<? super i[], <error descr="Type parameter '? extends i' is not within its bound; should extend '? super i[]'">? extends i</error>> a148; |
| A<? super i[], <error descr="Type parameter '? extends String' is not within its bound; should extend '? super i[]'">? extends String</error>> a149; |
| A<? super i[], ?> a1410; |
| A<? super i[], <error descr="Type parameter '? extends i[][]' is not within its bound; should extend '? super i[]'">? extends i[][]</error>> a1411; |
| A<? super i[], ? super i[]> a1412; |
| A<? super i[], ? super ii[]> a1413; |
| A<? super ii[], <error descr="Type parameter '? super i[]' is not within its bound; should extend '? super ii[]'">? super i[]</error>> a1414; |
| A<? super i[], <error descr="Type parameter '? super i' is not within its bound; should extend '? super i[]'">? super i</error>> a1415; |
| A<? super i[], <error descr="Type parameter '? super String' is not within its bound; should extend '? super i[]'">? super String</error>> a1416; |
| A<? super i[], <error descr="Type parameter '? super i[][]' is not within its bound; should extend '? super i[]'">? super i[][]</error>> a1417; |
| |
| A<? extends i[], ii[]> a15; |
| A<? extends i[], i[]> a150; |
| A<? extends ii[],<error descr="Type parameter 'i[]' is not within its bound; should extend '? extends ii[]'">i[]</error>> a151; |
| A<? extends i[], <error descr="Type parameter 'i' is not within its bound; should extend '? extends i[]'">i</error>> a152; |
| A<? extends i[], <error descr="Type parameter 'java.lang.String' is not within its bound; should extend '? extends i[]'">String</error>> a153; |
| A<? extends i[], <error descr="Type parameter 'i[][]' is not within its bound; should extend '? extends i[]'">i[][]</error>> a154; |
| A<? extends i[], ? extends i[]> a155; |
| A<? extends i[], ? extends ii[]> a156; |
| A<? extends ii[], ? extends i[]> a157; |
| A<? extends i[], <error descr="Type parameter '? extends i' is not within its bound; should extend '? extends i[]'">? extends i</error>> a158; |
| A<? extends i[], <error descr="Type parameter '? extends String' is not within its bound; should extend '? extends i[]'">? extends String</error>> a159; |
| A<? extends i[], ?> a1510; |
| A<? extends i[], <error descr="Type parameter '? extends i[][]' is not within its bound; should extend '? extends i[]'">? extends i[][]</error>> a1511; |
| A<? extends i[], ? super i[]> a1512; |
| A<? extends i[], ? super ii[]> a1513; |
| A<? extends ii[], <error descr="Type parameter '? super i[]' is not within its bound; should extend '? extends ii[]'">? super i[]</error>> a1514; |
| A<? extends i[], <error descr="Type parameter '? super i' is not within its bound; should extend '? extends i[]'">? super i</error>> a1515; |
| A<? extends i[], <error descr="Type parameter '? super String' is not within its bound; should extend '? extends i[]'">? super String</error>> a1516; |
| A<? extends i[], <error descr="Type parameter '? super i[][]' is not within its bound; should extend '? extends i[]'">? super i[][]</error>> a1517; |
| |
| A<? extends Cloneable, ? extends i[]> a16; |
| A<? extends Cloneable[], ? extends i[][]> a160; |
| A<Cloneable, ? extends i[]> a161; |
| A<? super Cloneable, ? extends i[]> a162; |
| A< I1[], ? extends I[]> cl; |
| |
| } |
| |
| void testRawTypes() { |
| class A<T extends A<T>> {} |
| A a; |
| A<<error descr="Type parameter 'java.lang.String' is not within its bound; should extend 'A<java.lang.String>'">String</error>> a1; |
| A<<error descr="Type parameter 'A' is not within its bound; should extend 'A<A>'">A</error>> a2; |
| A<A<<error descr="Type parameter 'A' is not within its bound; should extend 'A<A>'">A</error>>> a3; |
| |
| A<? extends A> a4; |
| A<<error descr="Type parameter '? super A' is not within its bound; should extend 'A<? super A>'">? super A</error>> a5; |
| A<<error descr="Type parameter 'A[]' is not within its bound; should extend 'A<A[]>'">A[]</error>> a7; |
| } |
| } |