test/langtools/tools/javac/patterns/ExamplesFromProposal.java
author jlahoda
Wed, 27 Nov 2019 09:00:01 +0100
changeset 59285 7799a51dbe30
permissions -rw-r--r--
8231826: Implement javac changes for pattern matching for instanceof Reviewed-by: mcimadamore Contributed-by: brian.goetz@oracle.com, gavin.bierman@oracle.com, maurizio.cimadamore@oracle.com, srikanth.adayapalam@oracle.com, vicente.romero@oracle.com, jan.lahoda@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59285
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     1
/*
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     2
 * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     4
 *
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     7
 * published by the Free Software Foundation.
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     8
 *
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    13
 * accompanied this code).
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    14
 *
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    18
 *
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    21
 * questions.
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    22
 */
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    23
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    24
/*
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    25
 * @test
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    26
 * @bug 8231827
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    27
 * @summary All example code from "Pattern Matching for Java" document, released April 2017, adjusted to current state (no switches, etc)
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    28
 * @compile --enable-preview -source ${jdk.version} ExamplesFromProposal.java
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    29
 * @run main/othervm --enable-preview ExamplesFromProposal
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    30
 */
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    31
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    32
interface Node {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    33
}
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    34
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    35
class IntNode implements Node {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    36
    int value;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    37
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    38
    IntNode(int value) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    39
        this.value = value;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    40
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    41
}
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    42
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    43
class NegNode implements Node {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    44
    Node node;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    45
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    46
    NegNode(Node node) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    47
        this.node = node;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    48
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    49
}
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    50
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    51
class MulNode implements Node {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    52
    Node left, right;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    53
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    54
    MulNode(Node left, Node right) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    55
        this.left = left;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    56
        this.right = right;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    57
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    58
}
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    59
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    60
class AddNode implements Node {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    61
    Node left, right;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    62
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    63
    AddNode(Node left, Node right) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    64
        this.left = left;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    65
        this.right = right;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    66
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    67
}
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    68
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    69
public class ExamplesFromProposal {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    70
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    71
    public static Object getSomething() {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    72
        return new Long(42);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    73
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    74
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    75
    public static int eval(Node n) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    76
        if (n instanceof IntNode in) return in.value;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    77
        else if (n instanceof NegNode nn) return -eval(nn.node);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    78
        else if (n instanceof AddNode an) return eval(an.left) + eval(an.right);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    79
        else if (n instanceof MulNode mn) return eval(mn.left) * eval(mn.right);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    80
        else {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    81
            // should never happen
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    82
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    83
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    84
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    85
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    86
    public static String toString(Node n) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    87
        if (n instanceof IntNode in) return String.valueOf(in.value);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    88
        else if (n instanceof NegNode nn) return "-"+eval(nn.node);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    89
        else if (n instanceof AddNode an) return eval(an.left) + " + " + eval(an.right);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    90
        else if (n instanceof MulNode mn) return eval(mn.left) + " * " + eval(mn.right);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    91
        else {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    92
            // should never happen
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    93
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    94
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    95
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    96
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    97
    public static Node simplify(Node n) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    98
        if (n instanceof IntNode in) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
    99
            return n;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   100
        } else if (n instanceof NegNode nn) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   101
            return new NegNode(simplify(nn.node));
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   102
        } else if (n instanceof AddNode ad) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   103
            n = simplify(ad.left);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   104
            if (n instanceof IntNode intn) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   105
                if (intn.value == 0)
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   106
                    return simplify(ad.right);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   107
                else
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   108
                    return new AddNode(intn, simplify(ad.right));
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   109
            } else {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   110
                return new AddNode(simplify(ad.left), simplify(ad.right));
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   111
            }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   112
        } else if (n instanceof MulNode mn) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   113
            return new MulNode(simplify(mn.left), simplify(mn.right));
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   114
        } else {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   115
            //should never happen
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   116
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   117
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   118
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   119
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   120
    public static void testNode(Node n, int expected) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   121
        if (eval(n) != expected)
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   122
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   123
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   124
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   125
    public static void main(String[] args) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   126
        Object x = new Integer(42);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   127
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   128
        if (x instanceof Integer i) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   129
            // can use i here
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   130
            System.out.println(i.intValue());
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   131
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   132
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   133
        Object obj = getSomething();
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   134
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   135
        String formatted = "unknown";
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   136
        if (obj instanceof Integer i) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   137
            formatted = String.format("int %d", i);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   138
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   139
        else if (obj instanceof Byte b) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   140
            formatted = String.format("byte %d", b);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   141
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   142
        else if (obj instanceof Long l) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   143
            formatted = String.format("long %d", l);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   144
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   145
        else if (obj instanceof Double d) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   146
            formatted = String.format("double %f", d);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   147
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   148
        else if (obj instanceof String s) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   149
            formatted = String.format("String %s", s);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   150
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   151
        System.out.println(formatted);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   152
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   153
        if (obj instanceof Integer i) formatted = String.format("int %d", i);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   154
        else if (obj instanceof Byte b) formatted = String.format("byte %d", b);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   155
        else if (obj instanceof Long l) formatted = String.format("long %d", l);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   156
        else if (obj instanceof Double d) formatted = String.format("double %f", d);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   157
        else if (obj instanceof String s) formatted = String.format("String %s", s);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   158
        else formatted = String.format("Something else "+ obj.toString());
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   159
        System.out.println(formatted);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   160
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   161
        Node zero = new IntNode(0);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   162
        Node one = new IntNode(1);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   163
        Node ft = new IntNode(42);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   164
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   165
        Node temp = new AddNode(zero,ft);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   166
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   167
        testNode(temp,42);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   168
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   169
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   170
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   171
        if (toString(simplify(temp)).equals(toString(ft)))
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   172
            System.out.println("Simplify worked!");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   173
        else
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   174
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   175
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   176
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   177
        if (toString(simplify(new AddNode(zero,temp))).equals(toString(ft)))
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   178
            System.out.println("Simplify worked!");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   179
        else
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   180
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   181
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   182
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   183
        temp = new AddNode(zero,ft);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   184
        temp = new AddNode(one,temp);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   185
        temp = new AddNode(zero,temp);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   186
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   187
        Node fortythree = new AddNode(one,ft);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   188
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   189
        if (toString(simplify(temp)).equals(toString(fortythree)))
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   190
            System.out.println("Simplify worked!");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   191
        else
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   192
            throw new AssertionError("broken");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   193
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   194
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   195
        x = "Hello";
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   196
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   197
        if (x instanceof String s1) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   198
            System.out.println(s1);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   199
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   200
        if (x instanceof String s1 && s1.length() > 0) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   201
            System.out.println(s1);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   202
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   203
        if (x instanceof String s1) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   204
            System.out.println(s1 + " is a string");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   205
        } else {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   206
            System.out.println("not a string");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   207
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   208
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   209
        if (!(x instanceof String s1)) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   210
            System.out.println("not a string");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   211
        } else {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   212
            System.out.println(s1 + " is a string");
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   213
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   214
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents:
diff changeset
   215
}