1/* 2 * @test /nodynamiccopyright/ 3 * @bug 6939620 7020044 8062373 4 * 5 * @summary Check that diamond fails when inference violates declared bounds 6 * (test with inner class, qualified/simple type expressions) 7 * @author mcimadamore 8 * @compile/fail/ref=Neg03.out Neg03.java -XDrawDiagnostics 9 * 10 */ 11 12class Neg03<U> { 13 14 class Foo<V extends Number> { 15 Foo(V x) {} 16 <Z> Foo(V x, Z z) {} 17 } 18 19 void testSimple() { 20 Foo<String> f1 = new Foo<>(""); 21 Foo<? extends String> f2 = new Foo<>(""); 22 Foo<?> f3 = new Foo<>(""); 23 Foo<? super String> f4 = new Foo<>(""); 24 25 Foo<String> f5 = new Foo<>("", ""); 26 Foo<? extends String> f6 = new Foo<>("", ""); 27 Foo<?> f7 = new Foo<>("", ""); 28 Foo<? super String> f8 = new Foo<>("", ""); 29 30 Foo<String> f9 = new Foo<>(""){}; 31 Foo<? extends String> f10 = new Foo<>(""){}; 32 Foo<?> f11 = new Foo<>(""){}; 33 Foo<? super String> f12 = new Foo<>(""){}; 34 35 Foo<String> f13 = new Foo<>("", ""){}; 36 Foo<? extends String> f14 = new Foo<>("", ""){}; 37 Foo<?> f15 = new Foo<>("", ""){}; 38 Foo<? super String> f16 = new Foo<>("", ""){}; 39 } 40 41 void testQualified_1() { 42 Foo<String> f1 = new Neg03<U>.Foo<>(""); 43 Foo<? extends String> f2 = new Neg03<U>.Foo<>(""); 44 Foo<?> f3 = new Neg03<U>.Foo<>(""); 45 Foo<? super String> f4 = new Neg03<U>.Foo<>(""); 46 47 Foo<String> f5 = new Neg03<U>.Foo<>("", ""); 48 Foo<? extends String> f6 = new Neg03<U>.Foo<>("", ""); 49 Foo<?> f7 = new Neg03<U>.Foo<>("", ""); 50 Foo<? super String> f8 = new Neg03<U>.Foo<>("", ""); 51 52 Foo<String> f9 = new Neg03<U>.Foo<>(""){}; 53 Foo<? extends String> f10 = new Neg03<U>.Foo<>(""){}; 54 Foo<?> f11 = new Neg03<U>.Foo<>(""){}; 55 Foo<? super String> f12 = new Neg03<U>.Foo<>(""){}; 56 57 Foo<String> f13 = new Neg03<U>.Foo<>("", ""){}; 58 Foo<? extends String> f14 = new Neg03<U>.Foo<>("", ""){}; 59 Foo<?> f15 = new Neg03<U>.Foo<>("", ""){}; 60 Foo<? super String> f16 = new Neg03<U>.Foo<>("", ""){}; 61 } 62 63 void testQualified_2(Neg03<U> n) { 64 Foo<String> f1 = n.new Foo<>(""); 65 Foo<? extends String> f2 = n.new Foo<>(""); 66 Foo<?> f3 = n.new Foo<>(""); 67 Foo<? super String> f4 = n.new Foo<>(""); 68 69 Foo<String> f5 = n.new Foo<>("", ""); 70 Foo<? extends String> f6 = n.new Foo<>("", ""); 71 Foo<?> f7 = n.new Foo<>("", ""); 72 Foo<? super String> f8 = n.new Foo<>("", ""); 73 74 Foo<String> f9 = n.new Foo<>(""){}; 75 Foo<? extends String> f10 = n.new Foo<>(""){}; 76 Foo<?> f11 = n.new Foo<>(""){}; 77 Foo<? super String> f12 = n.new Foo<>(""){}; 78 79 Foo<String> f13 = n.new Foo<>("", ""){}; 80 Foo<? extends String> f14 = n.new Foo<>("", ""){}; 81 Foo<?> f15 = n.new Foo<>("", ""){}; 82 Foo<? super String> f16 = n.new Foo<>("", ""){}; 83 } 84} 85