test/langtools/tools/javac/lvti/ParserTest.java
author vromero
Thu, 22 Feb 2018 15:49:32 -0500
changeset 48935 03ae177c26b0
parent 48926 02404e27d356
permissions -rw-r--r--
8198512: compiler support for local-variable syntax for lambda parameters Reviewed-by: mcimadamore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     1
/*
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     2
 * @test /nodynamiccopyright/
48551
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
     3
 * @bug 8177466 8189146
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
     4
 * @compile/ref=ParserTest9.out -XDrawDiagnostics --release 9 ParserTest.java
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     5
 * @summary Add compiler support for local variable type-inference
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     6
 * @compile/fail/ref=ParserTest.out -XDrawDiagnostics ParserTest.java
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     7
 */
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     8
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
     9
import java.lang.annotation.ElementType;
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    10
import java.lang.annotation.Target;
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    11
import java.util.function.Function;
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    12
import java.util.List;
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    13
48551
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    14
class ParserTest<var extends AutoCloseable> {
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    15
    static class TestClass {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    16
        static class var { } //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    17
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    18
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    19
    static class TestInterface {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    20
        interface var { } //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    21
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    22
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    23
    static class TestEnum {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    24
        enum var { } //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    25
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    26
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    27
    static class TestAnno {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    28
        @interface var { } //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    29
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    30
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    31
    @Target(ElementType.TYPE_USE)
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    32
    @interface TA { }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    33
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    34
    @interface DA { }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    35
48551
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    36
    static abstract class var extends RuntimeException implements AutoCloseable { } //illegal
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    37
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    38
    var x = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    39
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    40
    void test() {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    41
        var[] x1 = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    42
        var x2[] = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    43
        var[][] x3 = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    44
        var x4[][] = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    45
        var[] x5 = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    46
        var x6[] = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    47
        var@TA[]@TA[] x7 = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    48
        var x8@TA[]@TA[] = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    49
        var x9 = null, y = null; //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    50
        final @DA var x10 = m(); //ok
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    51
        @DA final var x11 = m(); //ok
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    52
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    53
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    54
    var m() { //illegal
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    55
        return null;
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    56
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    57
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    58
    void test2(var x) { //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    59
        List<var> l1; //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    60
        List<? extends var> l2; //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    61
        List<? super var> l3; //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    62
        try {
48935
03ae177c26b0 8198512: compiler support for local-variable syntax for lambda parameters
vromero
parents: 48926
diff changeset
    63
            Function<var, String> f = (var x2) -> ""; //ok
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    64
        } catch (var ex) { } //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    65
    }
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    66
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    67
    void test3(Object o) {
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    68
        boolean b1 = o instanceof var; //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    69
        Object o2 = (var)o; //error
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    70
    }
48551
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    71
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    72
    void test4() throws Exception {
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    73
        try (final var resource1 = null; // ok
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    74
             var resource2 = null) {     // ok
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    75
        }
9cf44c40aa35 8189146: Have use of "var" in 9 and earlier source versions issue a warning for type declarations
darcy
parents: 47268
diff changeset
    76
    }
47268
48ec75306997 8177466: Add compiler support for local variable type-inference
mcimadamore
parents:
diff changeset
    77
}