langtools/test/tools/javac/lambda/funcInterfaces/NonSAM2.java
author mcimadamore
Thu, 06 Jun 2013 15:33:40 +0100
changeset 18380 2abcb1c3a593
parent 14547 86d8d242b0c4
child 45413 75202c6b2c35
permissions -rw-r--r--
8008627: Compiler mishandles three-way return-type-substitutability Summary: Compiler should not enforce an order in how ambiguous methods should be resolved Reviewed-by: jjg, vromero
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14547
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     1
/*
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     2
 * @test /nodynamiccopyright/
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     3
 * @bug 8003280
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     4
 * @summary Add lambda tests
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     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
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     6
 * @compile/fail/ref=NonSAM2.out -XDrawDiagnostics NonSAM2.java Helper.java
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     7
 */
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     8
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
     9
import java.util.List;
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    10
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    11
interface Foo1 { int getAge(String s);}
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    12
interface Bar1 { Integer getAge(String s);}
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    13
interface Foo1Bar1 extends Foo1, Bar1 {} //types Bar1 and Foo1 are incompatible; both define getAge(String), but with unrelated return types
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    14
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    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
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    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
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    18
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    19
interface Foo2<T> { void m(T arg);}
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    20
interface Bar2<S> { void m(S arg);}
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents:
diff changeset
    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