|
Lines 18-24
Link Here
|
| 18 |
public class GenericsRegressionTest_1_7 extends AbstractRegressionTest { |
18 |
public class GenericsRegressionTest_1_7 extends AbstractRegressionTest { |
| 19 |
|
19 |
|
| 20 |
static { |
20 |
static { |
| 21 |
// TESTS_NAMES = new String[] { "test0014" }; |
21 |
// TESTS_NAMES = new String[] { "test0025" }; |
| 22 |
// TESTS_NUMBERS = new int[] { 40, 41, 43, 45, 63, 64 }; |
22 |
// TESTS_NUMBERS = new int[] { 40, 41, 43, 45, 63, 64 }; |
| 23 |
// TESTS_RANGE = new int[] { 11, -1 }; |
23 |
// TESTS_RANGE = new int[] { 11, -1 }; |
| 24 |
} |
24 |
} |
|
Lines 28-34
Link Here
|
| 28 |
public static Test suite() { |
28 |
public static Test suite() { |
| 29 |
return buildMinimalComplianceTestSuite(testClass(), F_1_7); |
29 |
return buildMinimalComplianceTestSuite(testClass(), F_1_7); |
| 30 |
} |
30 |
} |
| 31 |
public void _test001() { |
31 |
public void test001() { |
| 32 |
this.runConformTest( |
32 |
this.runConformTest( |
| 33 |
new String[] { |
33 |
new String[] { |
| 34 |
"X.java", |
34 |
"X.java", |
|
Lines 44-50
Link Here
|
| 44 |
}, |
44 |
}, |
| 45 |
"SUCCESS"); |
45 |
"SUCCESS"); |
| 46 |
} |
46 |
} |
| 47 |
public void _test001a() { |
47 |
public void test001a() { |
| 48 |
this.runNegativeTest( |
48 |
this.runNegativeTest( |
| 49 |
new String[] { |
49 |
new String[] { |
| 50 |
"X.java", |
50 |
"X.java", |
|
Lines 65-71
Link Here
|
| 65 |
"The method testFunction(String) in the type X<String> is not applicable for the arguments (int)\n" + |
65 |
"The method testFunction(String) in the type X<String> is not applicable for the arguments (int)\n" + |
| 66 |
"----------\n"); |
66 |
"----------\n"); |
| 67 |
} |
67 |
} |
| 68 |
public void _test001b() { |
68 |
public void test001b() { |
| 69 |
this.runConformTest( |
69 |
this.runConformTest( |
| 70 |
new String[] { |
70 |
new String[] { |
| 71 |
"X.java", |
71 |
"X.java", |
|
Lines 80-86
Link Here
|
| 80 |
"SUCCESS"); |
80 |
"SUCCESS"); |
| 81 |
} |
81 |
} |
| 82 |
// fields |
82 |
// fields |
| 83 |
public void _test001b_1() { |
83 |
public void test001b_1() { |
| 84 |
this.runConformTest( |
84 |
this.runConformTest( |
| 85 |
new String[] { |
85 |
new String[] { |
| 86 |
"X.java", |
86 |
"X.java", |
|
Lines 94-100
Link Here
|
| 94 |
}, |
94 |
}, |
| 95 |
"SUCCESS"); |
95 |
"SUCCESS"); |
| 96 |
} |
96 |
} |
| 97 |
public void _test001c() { |
97 |
public void test001c() { |
| 98 |
this.runNegativeTest( |
98 |
this.runNegativeTest( |
| 99 |
new String[] { |
99 |
new String[] { |
| 100 |
"X.java", |
100 |
"X.java", |
|
Lines 114-120
Link Here
|
| 114 |
"----------\n"); |
114 |
"----------\n"); |
| 115 |
} |
115 |
} |
| 116 |
// fields |
116 |
// fields |
| 117 |
public void _test001c_1() { |
117 |
public void test001c_1() { |
| 118 |
this.runNegativeTest( |
118 |
this.runNegativeTest( |
| 119 |
new String[] { |
119 |
new String[] { |
| 120 |
"X.java", |
120 |
"X.java", |
|
Lines 133-139
Link Here
|
| 133 |
"The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (int)\n" + |
133 |
"The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (int)\n" + |
| 134 |
"----------\n"); |
134 |
"----------\n"); |
| 135 |
} |
135 |
} |
| 136 |
public void _test001d() { |
136 |
public void test001d() { |
| 137 |
this.runNegativeTest( |
137 |
this.runNegativeTest( |
| 138 |
new String[] { |
138 |
new String[] { |
| 139 |
"X.java", |
139 |
"X.java", |
|
Lines 155-161
Link Here
|
| 155 |
"The method ab(ArrayList<String>) in the type X<String> is not applicable for the arguments (ArrayList<Object>)\n" + |
155 |
"The method ab(ArrayList<String>) in the type X<String> is not applicable for the arguments (ArrayList<Object>)\n" + |
| 156 |
"----------\n"); |
156 |
"----------\n"); |
| 157 |
} |
157 |
} |
| 158 |
public void _test001e() { |
158 |
public void test001e() { |
| 159 |
this.runNegativeTest( |
159 |
this.runNegativeTest( |
| 160 |
new String[] { |
160 |
new String[] { |
| 161 |
"X.java", |
161 |
"X.java", |
|
Lines 177-184
Link Here
|
| 177 |
"The method ab(ArrayList<String>) in the type X<String> is not applicable for the arguments (ArrayList<Object>)\n" + |
177 |
"The method ab(ArrayList<String>) in the type X<String> is not applicable for the arguments (ArrayList<Object>)\n" + |
| 178 |
"----------\n"); |
178 |
"----------\n"); |
| 179 |
} |
179 |
} |
| 180 |
public void _test001f() { |
180 |
public void test001f() { |
| 181 |
this.runConformTest( |
181 |
this.runNegativeTest( |
| 182 |
new String[] { |
182 |
new String[] { |
| 183 |
"X.java", |
183 |
"X.java", |
| 184 |
"public class X<T> {\n" + |
184 |
"public class X<T> {\n" + |
|
Lines 193-199
Link Here
|
| 193 |
" }\n" + |
193 |
" }\n" + |
| 194 |
"}", |
194 |
"}", |
| 195 |
}, |
195 |
}, |
| 196 |
"SUCCESS"); |
196 |
"----------\n" + |
|
|
197 |
"1. WARNING in X.java (at line 2)\n" + |
| 198 |
" class X2<T>{\n" + |
| 199 |
" ^\n" + |
| 200 |
"The type parameter T is hiding the type T\n" + |
| 201 |
"----------\n" + |
| 202 |
"2. ERROR in X.java (at line 8)\n" + |
| 203 |
" X<String>.X2<String> x = new X<>().new X2<>();\n" + |
| 204 |
" ^^^^^^^^^^^^^^^^^^^^\n" + |
| 205 |
"Type mismatch: cannot convert from X<Object>.X2<String> to X<String>.X2<String>\n" + |
| 206 |
"----------\n"); |
| 197 |
} |
207 |
} |
| 198 |
// fields |
208 |
// fields |
| 199 |
public void test001f_1() { |
209 |
public void test001f_1() { |
|
Lines 216-223
Link Here
|
| 216 |
}, |
226 |
}, |
| 217 |
"SUCCESS"); |
227 |
"SUCCESS"); |
| 218 |
} |
228 |
} |
| 219 |
public void _test001g() { |
229 |
public void test001g() { |
| 220 |
this.runConformTest( |
230 |
this.runNegativeTest( |
| 221 |
new String[] { |
231 |
new String[] { |
| 222 |
"X.java", |
232 |
"X.java", |
| 223 |
"public class X<T> {\n" + |
233 |
"public class X<T> {\n" + |
|
Lines 233-239
Link Here
|
| 233 |
" }\n" + |
243 |
" }\n" + |
| 234 |
"}", |
244 |
"}", |
| 235 |
}, |
245 |
}, |
| 236 |
"SUCCESS\n1"); |
246 |
"----------\n" + |
|
|
247 |
"1. ERROR in X.java (at line 9)\n" + |
| 248 |
" X<String>.X2<Integer> x = new X<>().new X2<>();\n" + |
| 249 |
" ^^^^^^^^^^^^^^^^^^^^\n" + |
| 250 |
"Type mismatch: cannot convert from X<Object>.X2<Integer> to X<String>.X2<Integer>\n" + |
| 251 |
"----------\n"); |
| 237 |
} |
252 |
} |
| 238 |
public void test001g_1() { |
253 |
public void test001g_1() { |
| 239 |
this.runConformTest( |
254 |
this.runConformTest( |
|
Lines 256-262
Link Here
|
| 256 |
}, |
271 |
}, |
| 257 |
"SUCCESS\n1"); |
272 |
"SUCCESS\n1"); |
| 258 |
} |
273 |
} |
| 259 |
public void _test001h() { |
274 |
public void test001h() { |
| 260 |
this.runNegativeTest( |
275 |
this.runNegativeTest( |
| 261 |
new String[] { |
276 |
new String[] { |
| 262 |
"X.java", |
277 |
"X.java", |
|
Lines 278-290
Link Here
|
| 278 |
" ^\n" + |
293 |
" ^\n" + |
| 279 |
"The type parameter T is hiding the type T\n" + |
294 |
"The type parameter T is hiding the type T\n" + |
| 280 |
"----------\n" + |
295 |
"----------\n" + |
| 281 |
"2. ERROR in X.java (at line 9)\n" + |
296 |
"2. ERROR in X.java (at line 8)\n" + |
|
|
297 |
" X<String>.X2<String> x = new X<>().new X2<>();\n" + |
| 298 |
" ^^^^^^^^^^^^^^^^^^^^\n" + |
| 299 |
"Type mismatch: cannot convert from X<Object>.X2<String> to X<String>.X2<String>\n" + |
| 300 |
"----------\n" + |
| 301 |
"3. ERROR in X.java (at line 9)\n" + |
| 282 |
" x.methodx(1);\n" + |
302 |
" x.methodx(1);\n" + |
| 283 |
" ^^^^^^^\n" + |
303 |
" ^^^^^^^\n" + |
| 284 |
"The method methodx(String) in the type X<String>.X2<String> is not applicable for the arguments (int)\n" + |
304 |
"The method methodx(String) in the type X<String>.X2<String> is not applicable for the arguments (int)\n" + |
| 285 |
"----------\n"); |
305 |
"----------\n"); |
| 286 |
} |
306 |
} |
| 287 |
public void _test001h_1() { |
307 |
public void test001h_1() { |
| 288 |
this.runNegativeTest( |
308 |
this.runNegativeTest( |
| 289 |
new String[] { |
309 |
new String[] { |
| 290 |
"X.java", |
310 |
"X.java", |
|
Lines 329-339
Link Here
|
| 329 |
"Type safety: The method methodx(Object) belongs to the raw type X.X2. References to generic type X<T>.X2<T> should be parameterized\n" + |
349 |
"Type safety: The method methodx(Object) belongs to the raw type X.X2. References to generic type X<T>.X2<T> should be parameterized\n" + |
| 330 |
"----------\n"); |
350 |
"----------\n"); |
| 331 |
} |
351 |
} |
| 332 |
public void _test001i() { |
352 |
public void test001h_2() { |
| 333 |
this.runConformTest( |
353 |
this.runConformTest( |
| 334 |
new String[] { |
354 |
new String[] { |
| 335 |
"X.java", |
355 |
"X.java", |
| 336 |
"public class X<T> {\n" + |
356 |
"public class X<T> {\n" + |
|
|
357 |
" class X2<T>{\n" + |
| 358 |
" void methodx(T param){\n" + |
| 359 |
" System.out.println(param);\n" + |
| 360 |
" }\n" + |
| 361 |
" }\n" + |
| 362 |
" X<String>.X2<String> x;\n" + |
| 363 |
" public static void main(String[] args) {\n" + |
| 364 |
" X test = new X();\n" + |
| 365 |
" test.x = new X<>().new X2<>();\n" + |
| 366 |
" test.x.methodx(1);\n" + |
| 367 |
" }\n" + |
| 368 |
"}", |
| 369 |
}, |
| 370 |
"1"); |
| 371 |
} |
| 372 |
public void test001i() { |
| 373 |
this.runNegativeTest( |
| 374 |
new String[] { |
| 375 |
"X.java", |
| 376 |
"public class X<T> {\n" + |
| 337 |
" class X2<K>{\n" + |
377 |
" class X2<K>{\n" + |
| 338 |
" class X22<I>{\n" + |
378 |
" class X22<I>{\n" + |
| 339 |
" void methodx(T param, K param2, I param3){\n" + |
379 |
" void methodx(T param, K param2, I param3){\n" + |
|
Lines 348-354
Link Here
|
| 348 |
" }\n" + |
388 |
" }\n" + |
| 349 |
"}", |
389 |
"}", |
| 350 |
}, |
390 |
}, |
| 351 |
"SUCCESS"); |
391 |
"----------\n" + |
|
|
392 |
"1. ERROR in X.java (at line 10)\n" + |
| 393 |
" X<String> test = new X<>(); X<String>.X2<Integer>.X22<X<String>> x = new X<>().new X2<>().new X22<>();\n" + |
| 394 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 395 |
"Type mismatch: cannot convert from X<Object>.X2<Object>.X22<X<String>> to X<String>.X2<Integer>.X22<X<String>>\n" + |
| 396 |
"----------\n"); |
| 352 |
} |
397 |
} |
| 353 |
public void test002() { |
398 |
public void test002() { |
| 354 |
this.runNegativeTest( |
399 |
this.runNegativeTest( |
|
Lines 376-382
Link Here
|
| 376 |
"Type safety: The method testFunction(Object) belongs to the raw type X. References to generic type X<T> should be parameterized\n" + |
421 |
"Type safety: The method testFunction(Object) belongs to the raw type X. References to generic type X<T> should be parameterized\n" + |
| 377 |
"----------\n"); |
422 |
"----------\n"); |
| 378 |
} |
423 |
} |
| 379 |
public void _test003() { |
424 |
public void test003() { |
| 380 |
this.runConformTest( |
425 |
this.runConformTest( |
| 381 |
new String[] { |
426 |
new String[] { |
| 382 |
"X.java", |
427 |
"X.java", |
|
Lines 392-398
Link Here
|
| 392 |
"SUCCESS"); |
437 |
"SUCCESS"); |
| 393 |
} |
438 |
} |
| 394 |
|
439 |
|
| 395 |
public void _test004b() { |
440 |
public void test004b() { |
| 396 |
this.runNegativeTest( |
441 |
this.runNegativeTest( |
| 397 |
new String[] { |
442 |
new String[] { |
| 398 |
"X.java", |
443 |
"X.java", |
|
Lines 437-443
Link Here
|
| 437 |
"1"); |
482 |
"1"); |
| 438 |
} |
483 |
} |
| 439 |
|
484 |
|
| 440 |
public void _test006() { |
485 |
public void test006() { |
| 441 |
this.runConformTest( |
486 |
this.runConformTest( |
| 442 |
new String[] { |
487 |
new String[] { |
| 443 |
"X.java", |
488 |
"X.java", |
|
Lines 460-466
Link Here
|
| 460 |
"SUCCESS"); |
505 |
"SUCCESS"); |
| 461 |
} |
506 |
} |
| 462 |
// shows the difference between using <> and the raw type - different semantics |
507 |
// shows the difference between using <> and the raw type - different semantics |
| 463 |
public void _test007() { |
508 |
public void test007() { |
| 464 |
this.runConformTest( |
509 |
this.runConformTest( |
| 465 |
new String[] { |
510 |
new String[] { |
| 466 |
"X.java", |
511 |
"X.java", |
|
Lines 487-493
Link Here
|
| 487 |
"1\n" + |
532 |
"1\n" + |
| 488 |
"2"); |
533 |
"2"); |
| 489 |
} |
534 |
} |
| 490 |
public void _test007a() { |
535 |
public void test007a() { |
| 491 |
this.runNegativeTest( |
536 |
this.runNegativeTest( |
| 492 |
new String[] { |
537 |
new String[] { |
| 493 |
"X.java", |
538 |
"X.java", |
|
Lines 529-540
Link Here
|
| 529 |
"----------\n"); |
574 |
"----------\n"); |
| 530 |
} |
575 |
} |
| 531 |
//shows the difference between using <> and the raw type - different semantics |
576 |
//shows the difference between using <> and the raw type - different semantics |
| 532 |
public void _test008() { |
577 |
public void test008() { |
| 533 |
this.runConformTest( |
578 |
this.runNegativeTest( |
| 534 |
new String[] { |
579 |
new String[] { |
| 535 |
"X.java", |
580 |
"X.java", |
| 536 |
"public class X<T> {\n" + |
581 |
"public class X<T> {\n" + |
| 537 |
" T field1;" + |
582 |
" T field1;\n" + |
| 538 |
" public X(T param){\n" + |
583 |
" public X(T param){\n" + |
| 539 |
" field1 = param;\n" + |
584 |
" field1 = param;\n" + |
| 540 |
" }\n" + |
585 |
" }\n" + |
|
Lines 547-556
Link Here
|
| 547 |
" }\n" + |
592 |
" }\n" + |
| 548 |
"}", |
593 |
"}", |
| 549 |
}, |
594 |
}, |
| 550 |
""); |
595 |
"----------\n" + |
|
|
596 |
"1. WARNING in X.java (at line 7)\n" + |
| 597 |
" X<?> x1 = new X(1).get(\"\");\n" + |
| 598 |
" ^^^^^^^^\n" + |
| 599 |
"Type safety: The constructor X(Object) belongs to the raw type X. References to generic type X<T> should be parameterized\n" + |
| 600 |
"----------\n" + |
| 601 |
"2. WARNING in X.java (at line 7)\n" + |
| 602 |
" X<?> x1 = new X(1).get(\"\");\n" + |
| 603 |
" ^^^^^^^^^^^^^^^^\n" + |
| 604 |
"Type safety: The method get(Object) belongs to the raw type X. References to generic type X<T> should be parameterized\n" + |
| 605 |
"----------\n" + |
| 606 |
"3. WARNING in X.java (at line 7)\n" + |
| 607 |
" X<?> x1 = new X(1).get(\"\");\n" + |
| 608 |
" ^\n" + |
| 609 |
"X is a raw type. References to generic type X<T> should be parameterized\n" + |
| 610 |
"----------\n" + |
| 611 |
"4. ERROR in X.java (at line 8)\n" + |
| 612 |
" X<?> x2 = new X<>(1).get(\"\");\n" + |
| 613 |
" ^^^\n" + |
| 614 |
"The method get(Integer) in the type X<Integer> is not applicable for the arguments (String)\n" + |
| 615 |
"----------\n"); |
| 551 |
} |
616 |
} |
| 552 |
|
617 |
|
| 553 |
public void _test0014() { |
618 |
public void test0014() { |
| 554 |
this.runConformTest( |
619 |
this.runConformTest( |
| 555 |
new String[] { |
620 |
new String[] { |
| 556 |
"X.java", |
621 |
"X.java", |
|
Lines 568-574
Link Here
|
| 568 |
"SUCCESS\n" + |
633 |
"SUCCESS\n" + |
| 569 |
"123"); |
634 |
"123"); |
| 570 |
} |
635 |
} |
| 571 |
public void _test0014a() { |
636 |
public void test0014a() { |
| 572 |
this.runNegativeTest( |
637 |
this.runNegativeTest( |
| 573 |
new String[] { |
638 |
new String[] { |
| 574 |
"X.java", |
639 |
"X.java", |
|
Lines 590-596
Link Here
|
| 590 |
"The method testFunction(String, Integer) in the type X<String,Integer> is not applicable for the arguments (int, String)\n" + |
655 |
"The method testFunction(String, Integer) in the type X<String,Integer> is not applicable for the arguments (int, String)\n" + |
| 591 |
"----------\n"); |
656 |
"----------\n"); |
| 592 |
} |
657 |
} |
| 593 |
public void _test0015() { |
658 |
public void test0015() { |
| 594 |
this.runConformTest( |
659 |
this.runConformTest( |
| 595 |
new String[] { |
660 |
new String[] { |
| 596 |
"X.java", |
661 |
"X.java", |
|
Lines 611-618
Link Here
|
| 611 |
} |
676 |
} |
| 612 |
// To verify that a parameterized invocation of a generic constructor works even if <> is used |
677 |
// To verify that a parameterized invocation of a generic constructor works even if <> is used |
| 613 |
// to elide class type parameters. |
678 |
// to elide class type parameters. |
| 614 |
public void _test0016() { |
679 |
public void test0016() { |
| 615 |
this.runConformTest( |
680 |
this.runConformTest( // javac fails to compile this, looks buggy |
| 616 |
new String[] { |
681 |
new String[] { |
| 617 |
"X.java", |
682 |
"X.java", |
| 618 |
"public class X<T> {\n" + |
683 |
"public class X<T> {\n" + |
|
Lines 632-639
Link Here
|
| 632 |
} |
697 |
} |
| 633 |
// To verify that a parameterized invocation of a generic constructor works even if <> is used |
698 |
// To verify that a parameterized invocation of a generic constructor works even if <> is used |
| 634 |
// to elide class type parameters. This test handles fields |
699 |
// to elide class type parameters. This test handles fields |
| 635 |
public void _test0016b() { |
700 |
public void test0016b() { |
| 636 |
this.runConformTest( |
701 |
this.runConformTest( // javac fails to compile this, looks buggy |
| 637 |
new String[] { |
702 |
new String[] { |
| 638 |
"X.java", |
703 |
"X.java", |
| 639 |
"public class X<T> {\n" + |
704 |
"public class X<T> {\n" + |
|
Lines 657-664
Link Here
|
| 657 |
// To verify that a parameterized invocation of a non-generic constructor works even if <> is used |
722 |
// To verify that a parameterized invocation of a non-generic constructor works even if <> is used |
| 658 |
// to elide class type parameters. |
723 |
// to elide class type parameters. |
| 659 |
// This was not allowed in java 1.6 and 1.5 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=168230) |
724 |
// This was not allowed in java 1.6 and 1.5 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=168230) |
| 660 |
public void _test0017() { |
725 |
public void test0017() { |
| 661 |
this.runConformTest( |
726 |
this.runConformTest( // javac fails to compile this, looks buggy |
| 662 |
new String[] { |
727 |
new String[] { |
| 663 |
"X.java", |
728 |
"X.java", |
| 664 |
"public class X<T> {\n" + |
729 |
"public class X<T> {\n" + |
|
Lines 679-685
Link Here
|
| 679 |
"const.1\nconst.1\nconst.2"); |
744 |
"const.1\nconst.1\nconst.2"); |
| 680 |
} |
745 |
} |
| 681 |
// To verify that the correct constructor is found by parameter substitution in the diamond case |
746 |
// To verify that the correct constructor is found by parameter substitution in the diamond case |
| 682 |
public void _test0018() { |
747 |
public void test0018() { |
| 683 |
this.runConformTest( |
748 |
this.runConformTest( |
| 684 |
new String[] { |
749 |
new String[] { |
| 685 |
"X.java", |
750 |
"X.java", |
|
Lines 700-706
Link Here
|
| 700 |
} |
765 |
} |
| 701 |
// To verify that the correct constructor is found by parameter substitution |
766 |
// To verify that the correct constructor is found by parameter substitution |
| 702 |
// in the diamond case -- fields |
767 |
// in the diamond case -- fields |
| 703 |
public void _test0018b() { |
768 |
public void test0018b() { |
| 704 |
this.runConformTest( |
769 |
this.runConformTest( |
| 705 |
new String[] { |
770 |
new String[] { |
| 706 |
"X.java", |
771 |
"X.java", |
|
Lines 738-744
Link Here
|
| 738 |
"----------\n"); |
803 |
"----------\n"); |
| 739 |
} |
804 |
} |
| 740 |
// check inference at method argument position. |
805 |
// check inference at method argument position. |
| 741 |
public void _test0020() { |
806 |
public void test0020() { |
| 742 |
this.runNegativeTest( |
807 |
this.runNegativeTest( |
| 743 |
new String[] { |
808 |
new String[] { |
| 744 |
"X.java", |
809 |
"X.java", |
|
Lines 757-763
Link Here
|
| 757 |
"----------\n"); |
822 |
"----------\n"); |
| 758 |
} |
823 |
} |
| 759 |
//check inference at method argument position. |
824 |
//check inference at method argument position. |
| 760 |
public void _test0021() { |
825 |
public void test0021() { |
| 761 |
this.runNegativeTest( |
826 |
this.runNegativeTest( |
| 762 |
new String[] { |
827 |
new String[] { |
| 763 |
"X.java", |
828 |
"X.java", |
|
Lines 776-782
Link Here
|
| 776 |
"The method f(List<String>) in the type X<T> is not applicable for the arguments (ArrayList<Object>)\n" + |
841 |
"The method f(List<String>) in the type X<T> is not applicable for the arguments (ArrayList<Object>)\n" + |
| 777 |
"----------\n"); |
842 |
"----------\n"); |
| 778 |
} |
843 |
} |
| 779 |
|
844 |
public void test0022() { |
|
|
845 |
this.runConformTest( |
| 846 |
new String[] { |
| 847 |
"X.java", |
| 848 |
"import java.util.HashMap;\n" + |
| 849 |
"import java.util.Map;\n" + |
| 850 |
"\n" + |
| 851 |
"class StringKeyHashMap<V> extends HashMap<String, V> { \n" + |
| 852 |
"}\n" + |
| 853 |
"\n" + |
| 854 |
"class IntegerValueHashMap<K> extends HashMap<K, Integer> { \n" + |
| 855 |
"}\n" + |
| 856 |
"\n" + |
| 857 |
"public class X {\n" + |
| 858 |
" Map<String, Integer> m1 = new StringKeyHashMap<>();\n" + |
| 859 |
" Map<String, Integer> m2 = new IntegerValueHashMap<>();\n" + |
| 860 |
"}\n" |
| 861 |
}, |
| 862 |
""); |
| 863 |
} |
| 864 |
public void test0023() { |
| 865 |
this.runNegativeTest( |
| 866 |
new String[] { |
| 867 |
"X.java", |
| 868 |
"import java.util.HashMap;\n" + |
| 869 |
"import java.util.Map;\n" + |
| 870 |
"\n" + |
| 871 |
"class StringKeyHashMap<V> extends HashMap<String, V> { \n" + |
| 872 |
"}\n" + |
| 873 |
"\n" + |
| 874 |
"class IntegerValueHashMap<K> extends HashMap<K, Integer> { \n" + |
| 875 |
"}\n" + |
| 876 |
"\n" + |
| 877 |
"public class X {\n" + |
| 878 |
" Map<String, Integer> m1 = new StringKeyHashMap<>(10);\n" + |
| 879 |
" Map<String, Integer> m2 = new IntegerValueHashMap<>();\n" + |
| 880 |
"}\n" |
| 881 |
}, |
| 882 |
"----------\n" + |
| 883 |
"1. WARNING in X.java (at line 4)\n" + |
| 884 |
" class StringKeyHashMap<V> extends HashMap<String, V> { \n" + |
| 885 |
" ^^^^^^^^^^^^^^^^\n" + |
| 886 |
"The serializable class StringKeyHashMap does not declare a static final serialVersionUID field of type long\n" + |
| 887 |
"----------\n" + |
| 888 |
"2. WARNING in X.java (at line 7)\n" + |
| 889 |
" class IntegerValueHashMap<K> extends HashMap<K, Integer> { \n" + |
| 890 |
" ^^^^^^^^^^^^^^^^^^^\n" + |
| 891 |
"The serializable class IntegerValueHashMap does not declare a static final serialVersionUID field of type long\n" + |
| 892 |
"----------\n" + |
| 893 |
"3. ERROR in X.java (at line 11)\n" + |
| 894 |
" Map<String, Integer> m1 = new StringKeyHashMap<>(10);\n" + |
| 895 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 896 |
"The constructor StringKeyHashMap<>(int) is undefined\n" + |
| 897 |
"----------\n" + |
| 898 |
"4. ERROR in X.java (at line 11)\n" + |
| 899 |
" Map<String, Integer> m1 = new StringKeyHashMap<>(10);\n" + |
| 900 |
" ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 901 |
"Type mismatch: cannot convert from StringKeyHashMap<> to Map<String,Integer>\n" + |
| 902 |
"----------\n"); |
| 903 |
} |
| 904 |
// check inference at return expression. |
| 905 |
public void test0024() { |
| 906 |
this.runNegativeTest( |
| 907 |
new String[] { |
| 908 |
"X.java", |
| 909 |
"import java.util.List;\n" + |
| 910 |
"import java.util.ArrayList;\n" + |
| 911 |
"class X<T> {\n" + |
| 912 |
" public X() {}\n" + |
| 913 |
" X<String> f(List<String> p) {return new X<>();}\n" + |
| 914 |
"}\n", |
| 915 |
}, |
| 916 |
"----------\n" + |
| 917 |
"1. WARNING in X.java (at line 2)\n" + |
| 918 |
" import java.util.ArrayList;\n" + |
| 919 |
" ^^^^^^^^^^^^^^^^^^^\n" + |
| 920 |
"The import java.util.ArrayList is never used\n" + |
| 921 |
"----------\n"); |
| 922 |
} |
| 923 |
// check inference at cast expression. |
| 924 |
public void test0025() { |
| 925 |
this.runNegativeTest( |
| 926 |
new String[] { |
| 927 |
"X.java", |
| 928 |
"import java.util.List;\n" + |
| 929 |
"import java.util.ArrayList;\n" + |
| 930 |
"class X<T> {\n" + |
| 931 |
" public X() {}\n" + |
| 932 |
" void f(List<String> p) { Object o = (X<String>) new X<>();}\n" + |
| 933 |
"}\n", |
| 934 |
}, |
| 935 |
"----------\n" + |
| 936 |
"1. ERROR in X.java (at line 5)\n" + |
| 937 |
" void f(List<String> p) { Object o = (X<String>) new X<>();}\n" + |
| 938 |
" ^^^^^^^^^^^^^^^^^^^^^\n" + |
| 939 |
"Cannot cast from X<Object> to X<String>\n" + |
| 940 |
"----------\n"); |
| 941 |
} |
| 780 |
public static Class testClass() { |
942 |
public static Class testClass() { |
| 781 |
return GenericsRegressionTest_1_7.class; |
943 |
return GenericsRegressionTest_1_7.class; |
| 782 |
} |
944 |
} |