1.1 --- a/test/tools/javac/inference/EagerReturnTypeResolution/EagerReturnTypeResolutionTestb.java Wed May 28 02:28:07 2014 -0700 1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 1.3 @@ -1,182 +0,0 @@ 1.4 -/* 1.5 - * @test /nodynamiccopyright/ 1.6 - * @bug 8030741 1.7 - * @summary Inference: implement eager resolution of return types, consistent with JDK-8028800 1.8 - * @compile/fail/ref=EagerReturnTypeResolutionTestb.out -XDrawDiagnostics EagerReturnTypeResolutionTestb.java 1.9 - * @author Dan Smith 1.10 - */ 1.11 - 1.12 -import java.util.List; 1.13 - 1.14 -public class EagerReturnTypeResolutionTestb { 1.15 - interface I<S> {} 1.16 - interface J<S> extends I<S> {} 1.17 - interface K extends I<String> {} 1.18 - interface L<S> extends I {} 1.19 - 1.20 - <T> T lower(List<? extends T> l) { return null; } 1.21 - <T> T lower2(List<? extends T> l1, List<? extends T> l2) { return null; } 1.22 - 1.23 - <T> T upper(List<? super T> l) { return null; } 1.24 - <T> T upper2(List<? super T> l1, List<? super T> l2) { return null; } 1.25 - 1.26 - <T> T eq(List<T> l) { return null; } 1.27 - <T> T eq2(List<T> l1, List<T> l2) { return null; } 1.28 - 1.29 - <X> void takeI(I<X> i) {} 1.30 - void takeIString(I<String> i) {} 1.31 - I<String> iStringField; 1.32 - 1.33 - void takeLong(long arg) {} 1.34 - long longField; 1.35 - 1.36 - void testSimpleCaptureOK(List<I<?>> i1) { 1.37 - takeI(lower(i1)); // ok* 1.38 - takeI(eq(i1)); // ok* 1.39 - takeI(upper(i1)); // ok, no capture 1.40 - takeIString(upper(i1)); // ok 1.41 - iStringField = upper(i1); // ok 1.42 - } 1.43 - 1.44 - void testSimpleCaptureKO(List<I<?>> i1) { 1.45 - takeIString(lower(i1)); // ERROR 1.46 - takeIString(eq(i1)); // ERROR 1.47 - iStringField = lower(i1); // ERROR 1.48 - iStringField = eq(i1); // ERROR 1.49 - } 1.50 - 1.51 - void testMultiCaptureOK(List<I<String>> i1, List<I<Integer>> i2, List<I<?>> i3, 1.52 - List<J<String>> j1, List<J<Integer>> j2, List<K> k1) { 1.53 - /* Lines marked with JDK-8029002 should be uncommented once this bug is 1.54 - * fixed 1.55 - */ 1.56 - takeI(lower2(i1, i2)); // ok* 1.57 - takeI(lower2(i1, i3)); // ok* 1.58 - takeI(upper2(i1, i3)); // ok, no capture* JDK-8029002 1.59 - 1.60 - takeIString(upper2(i1, i3)); // ok, no capture 1.61 - iStringField = upper2(i1, i3); // ok, no capture 1.62 - 1.63 - takeI(lower2(j1, j2)); // ok* 1.64 - takeI(lower2(j1, k1)); // ok, no capture 1.65 - takeI(upper2(j1, k1)); // ok, no capture* JDK-8029002 1.66 - 1.67 - takeIString(lower2(j1, k1)); // ok, no capture 1.68 - takeIString(upper2(j1, k1)); // ok, no capture 1.69 - 1.70 - iStringField = lower2(j1, k1); // ok, no capture 1.71 - iStringField = upper2(j1, k1); // ok, no capture 1.72 - takeI(lower2(j2, k1)); // ok* 1.73 - } 1.74 - 1.75 - void testMultiCaptureKO(List<I<String>> i1, List<I<Integer>> i2, List<I<?>> i3, 1.76 - List<J<String>> j1, List<J<Integer>> j2, List<K> k1) { 1.77 - takeI(eq2(i1, i2)); // ERROR, bad bounds 1.78 - takeI(upper2(i1, i2)); // ERROR, bad bounds 1.79 - 1.80 - takeIString(lower2(i1, i2)); // ERROR 1.81 - takeIString(eq2(i1, i2)); // ERROR, bad bounds 1.82 - takeIString(upper2(i1, i2)); // ERROR, bad bounds 1.83 - 1.84 - iStringField = lower2(i1, i2); // ERROR 1.85 - iStringField = eq2(i1, i2); // ERROR, bad bounds 1.86 - iStringField = upper2(i1, i2); // ERROR, bad bounds 1.87 - 1.88 - takeI(eq2(i1, i3)); // ERROR, bad bounds 1.89 - takeIString(lower2(i1, i3)); // ERROR 1.90 - takeIString(eq2(i1, i3)); // ERROR, bad bounds 1.91 - 1.92 - iStringField = lower2(i1, i3); // ERROR 1.93 - iStringField = eq2(i1, i3); // ERROR, bad bounds 1.94 - takeI(eq2(j1, j2)); // ERROR, bad bounds 1.95 - takeI(upper2(j1, j2)); // ERROR, bad bounds 1.96 - 1.97 - takeIString(lower2(j1, j2)); // ERROR 1.98 - takeIString(eq2(j1, j2)); // ERROR, bad bounds 1.99 - takeIString(upper2(j1, j2)); // ERROR, bad bounds 1.100 - 1.101 - iStringField = lower2(j1, j2); // ERROR 1.102 - iStringField = eq2(j1, j2); // ERROR, bad bounds 1.103 - iStringField = upper2(j1, j2); // ERROR, bad bounds 1.104 - 1.105 - takeI(eq2(j1, k1)); // ERROR, bad bounds 1.106 - takeIString(eq2(j1, k1)); // ERROR, bad bounds 1.107 - iStringField = eq2(j1, k1); // ERROR, bad bounds 1.108 - takeI(eq2(j2, k1)); // ERROR, bad bounds 1.109 - takeI(upper2(j2, k1)); // ERROR, bad bounds; actual: no error, see JDK-8037474 1.110 - 1.111 - takeIString(lower2(j2, k1)); // ERROR 1.112 - takeIString(eq2(j2, k1)); // ERROR, bad bounds 1.113 - takeIString(upper2(j2, k1)); // ERROR, bad bounds 1.114 - 1.115 - iStringField = lower2(j2, k1); // ERROR 1.116 - iStringField = eq2(j2, k1); // ERROR, bad bounds 1.117 - iStringField = upper2(j2, k1); // ERROR, bad bounds 1.118 - } 1.119 - 1.120 - void testRawOK(List<I> i1, List<J> j1, List<L<String>> l1) { 1.121 - takeI(lower(i1)); // ok, unchecked 1.122 - takeI(eq(i1)); // ok, unchecked 1.123 - takeI(upper(i1)); // ok, no capture, not unchecked 1.124 - 1.125 - takeIString(lower(i1)); // ok, unchecked 1.126 - takeIString(eq(i1)); // ok, unchecked 1.127 - takeIString(upper(i1)); // ok, no capture, not unchecked 1.128 - 1.129 - iStringField = lower(i1); // ok, unchecked 1.130 - iStringField = eq(i1); // ok, unchecked 1.131 - iStringField = upper(i1); // ok, no capture, not unchecked 1.132 - 1.133 - takeI(lower(j1)); // ok, unchecked 1.134 - takeI(eq(j1)); // ok, unchecked 1.135 - takeI(upper(j1)); // bad bounds? -- spec is unclear 1.136 - 1.137 - takeIString(lower(j1)); // ok, unchecked 1.138 - takeIString(eq(j1)); // ok, unchecked 1.139 - takeIString(upper(j1)); // bad bounds? -- spec is unclear 1.140 - 1.141 - iStringField = lower(j1); // ok, unchecked 1.142 - iStringField = eq(j1); // ok, unchecked 1.143 - iStringField = upper(j1); // bad bounds? -- spec is unclear 1.144 - 1.145 - takeI(lower(l1)); // ok, unchecked 1.146 - takeI(eq(l1)); // ok, unchecked 1.147 - takeI(upper(l1)); // bad bounds? -- spec is unclear 1.148 - 1.149 - takeIString(lower(l1)); // ok, unchecked 1.150 - takeIString(eq(l1)); // ok, unchecked 1.151 - takeIString(upper(l1)); // bad bounds? -- spec is unclear 1.152 - 1.153 - iStringField = lower(l1); // ok, unchecked 1.154 - iStringField = eq(l1); // ok, unchecked 1.155 - iStringField = upper(l1); // bad bounds? -- spec is unclear 1.156 - } 1.157 - 1.158 - void testPrimOK(List<Integer> i1, List<Long> l1, List<Double> d1) { 1.159 - takeLong(lower(i1)); // ok 1.160 - takeLong(eq(i1)); // ok 1.161 - takeLong(upper(i1)); // ok* 1.162 - 1.163 - longField = lower(i1); // ok 1.164 - longField = eq(i1); // ok 1.165 - longField = upper(i1); // ok* 1.166 - 1.167 - takeLong(lower(l1)); // ok 1.168 - takeLong(eq(l1)); // ok 1.169 - takeLong(upper(l1)); // ok 1.170 - 1.171 - longField = lower(l1); // ok 1.172 - longField = eq(l1); // ok 1.173 - longField = upper(l1); // ok 1.174 - } 1.175 - 1.176 - void testPrimKO(List<Integer> i1, List<Long> l1, List<Double> d1) { 1.177 - takeLong(lower(d1)); // ERROR 1.178 - takeLong(eq(d1)); // ERROR 1.179 - takeLong(upper(d1)); // ERROR 1.180 - 1.181 - longField = lower(d1); // ERROR 1.182 - longField = eq(d1); // ERROR 1.183 - longField = upper(d1); // ERROR 1.184 - } 1.185 -}