langtools/test/tools/javac/lambda/TargetType60.java
author mcimadamore
Fri, 15 Feb 2013 16:29:58 +0000
changeset 16294 0c291a3cd60d
child 16323 c4409c235642
permissions -rw-r--r--
8007462: Fix provisional applicability for method references Summary: Add speculative arity-based check to rule out potential candidates when stuck reference is passed to method Reviewed-by: jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16294
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     1
/*
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     2
 * @test /nodynamiccopyright/
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     3
 * @bug 8007462
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     4
 * @summary Fix provisional applicability for method references
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     5
 * @compile/fail/ref=TargetType60.out -XDrawDiagnostics TargetType60.java
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     6
 */
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     7
class TargetType60 {
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     8
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
     9
    interface Sam0 {
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    10
        void m();
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    11
    }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    12
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    13
    interface Sam1<X> {
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    14
        void m(X x);
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    15
    }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    16
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    17
    interface Sam2<X,Y> {
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    18
        void m(X x, Y y);
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    19
    }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    20
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    21
    void m0() { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    22
    void m1(String s) { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    23
    void m2(String s1, String s2) { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    24
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    25
    void m01() { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    26
    void m01(String s) { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    27
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    28
    void m012() { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    29
    void m012(String s) { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    30
    void m012(String s1, String s2) { }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    31
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    32
    static String g(Sam0 s) { return null; }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    33
    static <U> U g(Sam1<U> s) { return null; }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    34
    static <U> U g(Sam2<U,String> s) { return null; }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    35
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    36
    void testBound() {
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    37
        String s1 = g(this::m0); //ok - resolves to g(Sam0)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    38
        String s2 = g(this::m1); //ok - resolves to g(Sam1)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    39
        String s3 = g(this::m2); //ok - resolves to g(Sam2)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    40
        String s4 = g(this::m01);//ambiguous (g(Sam0), g(Sam1) apply)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    41
        String s5 = g(this::m012);//ambiguous (g(Sam0), g(Sam1), g(Sam2) apply)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    42
    }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    43
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    44
    static void testUnbound() {
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    45
        TargetType60 s1 = g(TargetType60::m0); //ok - resolves to g(Sam1)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    46
        TargetType60 s2 = g(TargetType60::m1); //ok - resolves to g(Sam2)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    47
        TargetType60 s3 = g(TargetType60::m2); //none is applicable
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    48
        TargetType60 s4 = g(TargetType60::m01);//ambiguous (g(Sam1), g(Sam2) apply)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    49
        TargetType60 s5 = g(TargetType60::m012);//ambiguous (g(Sam1), g(Sam2) apply)
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    50
    }
0c291a3cd60d 8007462: Fix provisional applicability for method references
mcimadamore
parents:
diff changeset
    51
}