author | mcimadamore |
Thu, 06 Jun 2013 15:33:40 +0100 | |
changeset 18380 | 2abcb1c3a593 |
parent 14547 | 86d8d242b0c4 |
child 45413 | 75202c6b2c35 |
permissions | -rw-r--r-- |
14547 | 1 |
/* |
2 |
* @test /nodynamiccopyright/ |
|
3 |
* @bug 8003280 |
|
4 |
* @summary Add lambda tests |
|
5 |
* This test is for identifying a non-SAM type: Having more than one methods due to inheritance, and none of them has a subsignature of all other methods |
|
6 |
* @compile/fail/ref=NonSAM2.out -XDrawDiagnostics NonSAM2.java Helper.java |
|
7 |
*/ |
|
8 |
||
9 |
import java.util.List; |
|
10 |
||
11 |
interface Foo1 { int getAge(String s);} |
|
12 |
interface Bar1 { Integer getAge(String s);} |
|
13 |
interface Foo1Bar1 extends Foo1, Bar1 {} //types Bar1 and Foo1 are incompatible; both define getAge(String), but with unrelated return types |
|
14 |
||
15 |
interface AC extends A, C {} //name clash: getOldest(List<?>) in C and getOldest(List<Number>) in A have the same erasure, yet neither overrides the other |
|
18380
2abcb1c3a593
8008627: Compiler mishandles three-way return-type-substitutability
mcimadamore
parents:
14547
diff
changeset
|
16 |
interface ABC extends A, B, C {} //ok - raw override |
14547 | 17 |
interface AD extends A, D {} //name clash: getOldest(List<Integer>) in D and getOldest(List<Number>) in A have the same erasure, yet neither overrides the other |
18 |
||
19 |
interface Foo2<T> { void m(T arg);} |
|
20 |
interface Bar2<S> { void m(S arg);} |
|
21 |
interface Foo2Bar2<T1, T2> extends Foo2<T1>, Bar2<T2> {} //name clash: m(S) in Bar and m(T) in Foo have the same erasure, yet neither overrides the other |