src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TreeDiffer.java
author jlahoda
Wed, 27 Nov 2019 09:00:01 +0100
changeset 59285 7799a51dbe30
parent 55306 ea43db53de91
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:
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     1
/*
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     2
 * Copyright (c) 2018, Google LLC. All rights reserved.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     4
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    10
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    15
 * accompanied this code).
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    16
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    20
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    23
 * questions.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    24
 */
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    25
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    26
package com.sun.tools.javac.comp;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    27
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    28
import com.sun.tools.javac.code.Symbol;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    29
import com.sun.tools.javac.tree.JCTree;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    30
import com.sun.tools.javac.tree.JCTree.JCAnnotatedType;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    31
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    32
import com.sun.tools.javac.tree.JCTree.JCArrayAccess;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    33
import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    34
import com.sun.tools.javac.tree.JCTree.JCAssert;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    35
import com.sun.tools.javac.tree.JCTree.JCAssign;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    36
import com.sun.tools.javac.tree.JCTree.JCAssignOp;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    37
import com.sun.tools.javac.tree.JCTree.JCBinary;
59285
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
    38
import com.sun.tools.javac.tree.JCTree.JCBindingPattern;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    39
import com.sun.tools.javac.tree.JCTree.JCBlock;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    40
import com.sun.tools.javac.tree.JCTree.JCBreak;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    41
import com.sun.tools.javac.tree.JCTree.JCCase;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    42
import com.sun.tools.javac.tree.JCTree.JCCatch;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    43
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    44
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    45
import com.sun.tools.javac.tree.JCTree.JCConditional;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    46
import com.sun.tools.javac.tree.JCTree.JCContinue;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    47
import com.sun.tools.javac.tree.JCTree.JCDoWhileLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    48
import com.sun.tools.javac.tree.JCTree.JCEnhancedForLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    49
import com.sun.tools.javac.tree.JCTree.JCErroneous;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    50
import com.sun.tools.javac.tree.JCTree.JCExports;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    51
import com.sun.tools.javac.tree.JCTree.JCExpressionStatement;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    52
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    53
import com.sun.tools.javac.tree.JCTree.JCForLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    54
import com.sun.tools.javac.tree.JCTree.JCIdent;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    55
import com.sun.tools.javac.tree.JCTree.JCIf;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    56
import com.sun.tools.javac.tree.JCTree.JCImport;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    57
import com.sun.tools.javac.tree.JCTree.JCInstanceOf;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    58
import com.sun.tools.javac.tree.JCTree.JCLabeledStatement;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    59
import com.sun.tools.javac.tree.JCTree.JCLambda;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    60
import com.sun.tools.javac.tree.JCTree.JCLiteral;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    61
import com.sun.tools.javac.tree.JCTree.JCMemberReference;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    62
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    63
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    64
import com.sun.tools.javac.tree.JCTree.JCModifiers;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    65
import com.sun.tools.javac.tree.JCTree.JCModuleDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    66
import com.sun.tools.javac.tree.JCTree.JCNewArray;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    67
import com.sun.tools.javac.tree.JCTree.JCNewClass;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    68
import com.sun.tools.javac.tree.JCTree.JCOpens;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    69
import com.sun.tools.javac.tree.JCTree.JCPackageDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    70
import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    71
import com.sun.tools.javac.tree.JCTree.JCProvides;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    72
import com.sun.tools.javac.tree.JCTree.JCRequires;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    73
import com.sun.tools.javac.tree.JCTree.JCReturn;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    74
import com.sun.tools.javac.tree.JCTree.JCSwitch;
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
    75
import com.sun.tools.javac.tree.JCTree.JCSwitchExpression;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    76
import com.sun.tools.javac.tree.JCTree.JCSynchronized;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    77
import com.sun.tools.javac.tree.JCTree.JCThrow;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    78
import com.sun.tools.javac.tree.JCTree.JCTry;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    79
import com.sun.tools.javac.tree.JCTree.JCTypeApply;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    80
import com.sun.tools.javac.tree.JCTree.JCTypeCast;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    81
import com.sun.tools.javac.tree.JCTree.JCTypeIntersection;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    82
import com.sun.tools.javac.tree.JCTree.JCTypeParameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    83
import com.sun.tools.javac.tree.JCTree.JCTypeUnion;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    84
import com.sun.tools.javac.tree.JCTree.JCUnary;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    85
import com.sun.tools.javac.tree.JCTree.JCUses;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    86
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    87
import com.sun.tools.javac.tree.JCTree.JCWhileLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    88
import com.sun.tools.javac.tree.JCTree.JCWildcard;
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
    89
import com.sun.tools.javac.tree.JCTree.JCYield;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    90
import com.sun.tools.javac.tree.JCTree.LetExpr;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    91
import com.sun.tools.javac.tree.JCTree.TypeBoundKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    92
import com.sun.tools.javac.tree.TreeInfo;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    93
import com.sun.tools.javac.tree.TreeScanner;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    94
import com.sun.tools.javac.util.List;
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    95
import java.util.Collection;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    96
import java.util.HashMap;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    97
import java.util.Iterator;
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    98
import java.util.Map;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    99
import java.util.Objects;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   100
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   101
/** A visitor that compares two lambda bodies for structural equality. */
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   102
public class TreeDiffer extends TreeScanner {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   103
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   104
    public TreeDiffer(
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   105
            Collection<? extends Symbol> symbols, Collection<? extends Symbol> otherSymbols) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   106
        this.equiv = equiv(symbols, otherSymbols);
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   107
    }
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   108
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   109
    private static Map<Symbol, Symbol> equiv(
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   110
            Collection<? extends Symbol> symbols, Collection<? extends Symbol> otherSymbols) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   111
        Map<Symbol, Symbol> result = new HashMap<>();
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   112
        Iterator<? extends Symbol> it = otherSymbols.iterator();
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   113
        for (Symbol symbol : symbols) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   114
            if (!it.hasNext()) break;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   115
            result.put(symbol, it.next());
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   116
        }
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   117
        return result;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   118
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   119
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   120
    private JCTree parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   121
    private boolean result;
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   122
    private Map<Symbol, Symbol> equiv = new HashMap<>();
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   123
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   124
    public boolean scan(JCTree tree, JCTree parameter) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   125
        if (tree == null || parameter == null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   126
            return tree == null && parameter == null;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   127
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   128
        tree = TreeInfo.skipParens(tree);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   129
        parameter = TreeInfo.skipParens(parameter);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   130
        if (tree.type != null
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   131
                && tree.type.constValue() != null
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   132
                && parameter.type != null
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   133
                && parameter.type.constValue() != null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   134
            return Objects.equals(tree.type.constValue(), parameter.type.constValue());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   135
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   136
        if (tree.getTag() != parameter.getTag()) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   137
            return false;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   138
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   139
        JCTree prevParameter = this.parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   140
        boolean prevResult = this.result;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   141
        try {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   142
            this.parameter = parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   143
            tree.accept(this);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   144
            return result;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   145
        } finally {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   146
            this.parameter = prevParameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   147
            this.result = prevResult;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   148
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   149
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   150
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   151
    private boolean scan(Iterable<? extends JCTree> xs, Iterable<? extends JCTree> ys) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   152
        if (xs == null || ys == null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   153
            return xs == null && ys == null;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   154
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   155
        Iterator<? extends JCTree> x = xs.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   156
        Iterator<? extends JCTree> y = ys.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   157
        while (x.hasNext() && y.hasNext()) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   158
            if (!scan(x.next(), y.next())) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   159
                return false;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   160
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   161
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   162
        return !x.hasNext() && !y.hasNext();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   163
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   164
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   165
    private boolean scanDimAnnotations(List<List<JCAnnotation>> xs, List<List<JCAnnotation>> ys) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   166
        if (xs == null || ys == null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   167
            return xs == null && ys == null;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   168
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   169
        Iterator<List<JCAnnotation>> x = xs.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   170
        Iterator<List<JCAnnotation>> y = ys.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   171
        while (x.hasNext() && y.hasNext()) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   172
            if (!scan(x.next(), y.next())) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   173
                return false;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   174
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   175
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   176
        return !x.hasNext() && !y.hasNext();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   177
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   178
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   179
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   180
    public void visitIdent(JCIdent tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   181
        JCIdent that = (JCIdent) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   182
        // Identifiers are a special case: we want to ensure the identifiers correspond to the
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   183
        // same symbols (rather than just having the same name), but also consider lambdas
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   184
        // equal if they differ only in the names of the parameters.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   185
        Symbol symbol = tree.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   186
        Symbol otherSymbol = that.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   187
        if (symbol != null && otherSymbol != null) {
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   188
            if (Objects.equals(equiv.get(symbol), otherSymbol)) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   189
                result = true;
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   190
                return;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   191
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   192
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   193
        result = tree.sym == that.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   194
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   195
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   196
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   197
    public void visitSelect(JCFieldAccess tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   198
        JCFieldAccess that = (JCFieldAccess) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   199
        result = scan(tree.selected, that.selected) && tree.sym == that.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   200
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   201
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   202
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   203
    public void visitAnnotatedType(JCAnnotatedType tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   204
        JCAnnotatedType that = (JCAnnotatedType) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   205
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   206
                scan(tree.annotations, that.annotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   207
                        && scan(tree.underlyingType, that.underlyingType);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   208
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   209
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   210
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   211
    public void visitAnnotation(JCAnnotation tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   212
        JCAnnotation that = (JCAnnotation) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   213
        result = scan(tree.annotationType, that.annotationType) && scan(tree.args, that.args);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   214
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   215
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   216
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   217
    public void visitApply(JCMethodInvocation tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   218
        JCMethodInvocation that = (JCMethodInvocation) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   219
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   220
                scan(tree.typeargs, that.typeargs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   221
                        && scan(tree.meth, that.meth)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   222
                        && scan(tree.args, that.args)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   223
                        && tree.polyKind == that.polyKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   224
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   225
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   226
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   227
    public void visitAssert(JCAssert tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   228
        JCAssert that = (JCAssert) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   229
        result = scan(tree.cond, that.cond) && scan(tree.detail, that.detail);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   230
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   231
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   232
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   233
    public void visitAssign(JCAssign tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   234
        JCAssign that = (JCAssign) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   235
        result = scan(tree.lhs, that.lhs) && scan(tree.rhs, that.rhs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   236
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   237
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   238
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   239
    public void visitAssignop(JCAssignOp tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   240
        JCAssignOp that = (JCAssignOp) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   241
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   242
                scan(tree.lhs, that.lhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   243
                        && scan(tree.rhs, that.rhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   244
                        && tree.operator == that.operator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   245
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   246
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   247
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   248
    public void visitBinary(JCBinary tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   249
        JCBinary that = (JCBinary) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   250
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   251
                scan(tree.lhs, that.lhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   252
                        && scan(tree.rhs, that.rhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   253
                        && tree.operator == that.operator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   254
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   255
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   256
    @Override
59285
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   257
    public void visitBindingPattern(JCBindingPattern tree) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   258
        JCBindingPattern that = (JCBindingPattern) parameter;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   259
        result =
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   260
                scan(tree.vartype, that.vartype)
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   261
                        && tree.name == that.name;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   262
        if (!result) {
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   263
            return;
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   264
        }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   265
        equiv.put(tree.symbol, that.symbol);
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   266
    }
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   267
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   268
    @Override
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   269
    public void visitBlock(JCBlock tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   270
        JCBlock that = (JCBlock) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   271
        result = tree.flags == that.flags && scan(tree.stats, that.stats);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   272
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   273
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   274
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   275
    public void visitBreak(JCBreak tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   276
        JCBreak that = (JCBreak) parameter;
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   277
        result = tree.label == that.label;
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   278
    }
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   279
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   280
    @Override
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   281
    public void visitYield(JCYield tree) {
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   282
        JCYield that = (JCYield) parameter;
51563
de411d537aae 8206986: Compiler support for Switch Expressions (Preview)
jlahoda
parents: 49541
diff changeset
   283
        result = scan(tree.value, that.value);
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   284
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   285
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   286
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   287
    public void visitCase(JCCase tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   288
        JCCase that = (JCCase) parameter;
51563
de411d537aae 8206986: Compiler support for Switch Expressions (Preview)
jlahoda
parents: 49541
diff changeset
   289
        result = scan(tree.pats, that.pats) && scan(tree.stats, that.stats);
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   290
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   291
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   292
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   293
    public void visitCatch(JCCatch tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   294
        JCCatch that = (JCCatch) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   295
        result = scan(tree.param, that.param) && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   296
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   297
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   298
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   299
    public void visitClassDef(JCClassDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   300
        JCClassDecl that = (JCClassDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   301
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   302
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   303
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   304
                        && scan(tree.typarams, that.typarams)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   305
                        && scan(tree.extending, that.extending)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   306
                        && scan(tree.implementing, that.implementing)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   307
                        && scan(tree.defs, that.defs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   308
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   309
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   310
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   311
    public void visitConditional(JCConditional tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   312
        JCConditional that = (JCConditional) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   313
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   314
                scan(tree.cond, that.cond)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   315
                        && scan(tree.truepart, that.truepart)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   316
                        && scan(tree.falsepart, that.falsepart);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   317
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   318
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   319
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   320
    public void visitContinue(JCContinue tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   321
        JCContinue that = (JCContinue) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   322
        result = tree.label == that.label;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   323
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   324
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   325
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   326
    public void visitDoLoop(JCDoWhileLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   327
        JCDoWhileLoop that = (JCDoWhileLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   328
        result = scan(tree.body, that.body) && scan(tree.cond, that.cond);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   329
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   330
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   331
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   332
    public void visitErroneous(JCErroneous tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   333
        JCErroneous that = (JCErroneous) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   334
        result = scan(tree.errs, that.errs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   335
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   336
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   337
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   338
    public void visitExec(JCExpressionStatement tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   339
        JCExpressionStatement that = (JCExpressionStatement) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   340
        result = scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   341
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   342
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   343
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   344
    public void visitExports(JCExports tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   345
        JCExports that = (JCExports) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   346
        result = scan(tree.qualid, that.qualid) && scan(tree.moduleNames, that.moduleNames);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   347
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   348
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   349
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   350
    public void visitForLoop(JCForLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   351
        JCForLoop that = (JCForLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   352
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   353
                scan(tree.init, that.init)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   354
                        && scan(tree.cond, that.cond)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   355
                        && scan(tree.step, that.step)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   356
                        && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   357
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   358
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   359
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   360
    public void visitForeachLoop(JCEnhancedForLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   361
        JCEnhancedForLoop that = (JCEnhancedForLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   362
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   363
                scan(tree.var, that.var)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   364
                        && scan(tree.expr, that.expr)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   365
                        && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   366
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   367
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   368
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   369
    public void visitIf(JCIf tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   370
        JCIf that = (JCIf) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   371
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   372
                scan(tree.cond, that.cond)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   373
                        && scan(tree.thenpart, that.thenpart)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   374
                        && scan(tree.elsepart, that.elsepart);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   375
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   376
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   377
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   378
    public void visitImport(JCImport tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   379
        JCImport that = (JCImport) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   380
        result = tree.staticImport == that.staticImport && scan(tree.qualid, that.qualid);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   381
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   382
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   383
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   384
    public void visitIndexed(JCArrayAccess tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   385
        JCArrayAccess that = (JCArrayAccess) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   386
        result = scan(tree.indexed, that.indexed) && scan(tree.index, that.index);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   387
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   388
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   389
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   390
    public void visitLabelled(JCLabeledStatement tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   391
        JCLabeledStatement that = (JCLabeledStatement) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   392
        result = tree.label == that.label && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   393
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   394
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   395
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   396
    public void visitLambda(JCLambda tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   397
        JCLambda that = (JCLambda) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   398
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   399
                scan(tree.params, that.params)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   400
                        && scan(tree.body, that.body)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   401
                        && tree.paramKind == that.paramKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   402
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   403
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   404
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   405
    public void visitLetExpr(LetExpr tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   406
        LetExpr that = (LetExpr) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   407
        result = scan(tree.defs, that.defs) && scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   408
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   409
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   410
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   411
    public void visitLiteral(JCLiteral tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   412
        JCLiteral that = (JCLiteral) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   413
        result = tree.typetag == that.typetag && Objects.equals(tree.value, that.value);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   414
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   415
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   416
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   417
    public void visitMethodDef(JCMethodDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   418
        JCMethodDecl that = (JCMethodDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   419
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   420
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   421
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   422
                        && scan(tree.restype, that.restype)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   423
                        && scan(tree.typarams, that.typarams)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   424
                        && scan(tree.recvparam, that.recvparam)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   425
                        && scan(tree.params, that.params)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   426
                        && scan(tree.thrown, that.thrown)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   427
                        && scan(tree.body, that.body)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   428
                        && scan(tree.defaultValue, that.defaultValue);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   429
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   430
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   431
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   432
    public void visitModifiers(JCModifiers tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   433
        JCModifiers that = (JCModifiers) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   434
        result = tree.flags == that.flags && scan(tree.annotations, that.annotations);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   435
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   436
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   437
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   438
    public void visitModuleDef(JCModuleDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   439
        JCModuleDecl that = (JCModuleDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   440
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   441
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   442
                        && scan(tree.qualId, that.qualId)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   443
                        && scan(tree.directives, that.directives);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   444
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   445
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   446
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   447
    public void visitNewArray(JCNewArray tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   448
        JCNewArray that = (JCNewArray) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   449
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   450
                scan(tree.elemtype, that.elemtype)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   451
                        && scan(tree.dims, that.dims)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   452
                        && scan(tree.annotations, that.annotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   453
                        && scanDimAnnotations(tree.dimAnnotations, that.dimAnnotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   454
                        && scan(tree.elems, that.elems);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   455
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   456
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   457
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   458
    public void visitNewClass(JCNewClass tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   459
        JCNewClass that = (JCNewClass) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   460
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   461
                scan(tree.encl, that.encl)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   462
                        && scan(tree.typeargs, that.typeargs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   463
                        && scan(tree.clazz, that.clazz)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   464
                        && scan(tree.args, that.args)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   465
                        && scan(tree.def, that.def)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   466
                        && tree.constructor == that.constructor;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   467
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   468
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   469
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   470
    public void visitOpens(JCOpens tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   471
        JCOpens that = (JCOpens) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   472
        result = scan(tree.qualid, that.qualid) && scan(tree.moduleNames, that.moduleNames);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   473
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   474
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   475
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   476
    public void visitPackageDef(JCPackageDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   477
        JCPackageDecl that = (JCPackageDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   478
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   479
                scan(tree.annotations, that.annotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   480
                        && scan(tree.pid, that.pid)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   481
                        && tree.packge == that.packge;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   482
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   483
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   484
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   485
    public void visitProvides(JCProvides tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   486
        JCProvides that = (JCProvides) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   487
        result = scan(tree.serviceName, that.serviceName) && scan(tree.implNames, that.implNames);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   488
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   489
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   490
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   491
    public void visitReference(JCMemberReference tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   492
        JCMemberReference that = (JCMemberReference) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   493
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   494
                tree.mode == that.mode
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   495
                        && tree.kind == that.kind
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   496
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   497
                        && scan(tree.expr, that.expr)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   498
                        && scan(tree.typeargs, that.typeargs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   499
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   500
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   501
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   502
    public void visitRequires(JCRequires tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   503
        JCRequires that = (JCRequires) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   504
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   505
                tree.isTransitive == that.isTransitive
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   506
                        && tree.isStaticPhase == that.isStaticPhase
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   507
                        && scan(tree.moduleName, that.moduleName);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   508
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   509
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   510
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   511
    public void visitReturn(JCReturn tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   512
        JCReturn that = (JCReturn) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   513
        result = scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   514
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   515
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   516
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   517
    public void visitSwitch(JCSwitch tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   518
        JCSwitch that = (JCSwitch) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   519
        result = scan(tree.selector, that.selector) && scan(tree.cases, that.cases);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   520
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   521
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   522
    @Override
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   523
    public void visitSwitchExpression(JCSwitchExpression tree) {
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   524
        JCSwitchExpression that = (JCSwitchExpression) parameter;
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   525
        result = scan(tree.selector, that.selector) && scan(tree.cases, that.cases);
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   526
    }
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   527
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 51563
diff changeset
   528
    @Override
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   529
    public void visitSynchronized(JCSynchronized tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   530
        JCSynchronized that = (JCSynchronized) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   531
        result = scan(tree.lock, that.lock) && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   532
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   533
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   534
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   535
    public void visitThrow(JCThrow tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   536
        JCThrow that = (JCThrow) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   537
        result = scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   538
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   539
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   540
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   541
    public void visitTopLevel(JCCompilationUnit tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   542
        JCCompilationUnit that = (JCCompilationUnit) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   543
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   544
                scan(tree.defs, that.defs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   545
                        && tree.modle == that.modle
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   546
                        && tree.packge == that.packge;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   547
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   548
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   549
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   550
    public void visitTry(JCTry tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   551
        JCTry that = (JCTry) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   552
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   553
                scan(tree.body, that.body)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   554
                        && scan(tree.catchers, that.catchers)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   555
                        && scan(tree.finalizer, that.finalizer)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   556
                        && scan(tree.resources, that.resources);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   557
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   558
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   559
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   560
    public void visitTypeApply(JCTypeApply tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   561
        JCTypeApply that = (JCTypeApply) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   562
        result = scan(tree.clazz, that.clazz) && scan(tree.arguments, that.arguments);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   563
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   564
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   565
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   566
    public void visitTypeArray(JCArrayTypeTree tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   567
        JCArrayTypeTree that = (JCArrayTypeTree) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   568
        result = scan(tree.elemtype, that.elemtype);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   569
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   570
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   571
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   572
    public void visitTypeBoundKind(TypeBoundKind tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   573
        TypeBoundKind that = (TypeBoundKind) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   574
        result = tree.kind == that.kind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   575
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   576
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   577
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   578
    public void visitTypeCast(JCTypeCast tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   579
        JCTypeCast that = (JCTypeCast) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   580
        result = scan(tree.clazz, that.clazz) && scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   581
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   582
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   583
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   584
    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   585
        JCPrimitiveTypeTree that = (JCPrimitiveTypeTree) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   586
        result = tree.typetag == that.typetag;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   587
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   588
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   589
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   590
    public void visitTypeIntersection(JCTypeIntersection tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   591
        JCTypeIntersection that = (JCTypeIntersection) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   592
        result = scan(tree.bounds, that.bounds);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   593
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   594
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   595
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   596
    public void visitTypeParameter(JCTypeParameter tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   597
        JCTypeParameter that = (JCTypeParameter) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   598
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   599
                tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   600
                        && scan(tree.bounds, that.bounds)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   601
                        && scan(tree.annotations, that.annotations);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   602
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   603
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   604
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   605
    public void visitTypeTest(JCInstanceOf tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   606
        JCInstanceOf that = (JCInstanceOf) parameter;
59285
7799a51dbe30 8231826: Implement javac changes for pattern matching for instanceof
jlahoda
parents: 55306
diff changeset
   607
        result = scan(tree.expr, that.expr) && scan(tree.pattern, that.pattern);
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   608
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   609
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   610
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   611
    public void visitTypeUnion(JCTypeUnion tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   612
        JCTypeUnion that = (JCTypeUnion) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   613
        result = scan(tree.alternatives, that.alternatives);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   614
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   615
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   616
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   617
    public void visitUnary(JCUnary tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   618
        JCUnary that = (JCUnary) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   619
        result = scan(tree.arg, that.arg) && tree.operator == that.operator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   620
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   621
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   622
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   623
    public void visitUses(JCUses tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   624
        JCUses that = (JCUses) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   625
        result = scan(tree.qualid, that.qualid);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   626
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   627
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   628
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   629
    public void visitVarDef(JCVariableDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   630
        JCVariableDecl that = (JCVariableDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   631
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   632
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   633
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   634
                        && scan(tree.nameexpr, that.nameexpr)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   635
                        && scan(tree.vartype, that.vartype)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   636
                        && scan(tree.init, that.init);
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   637
        if (!result) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   638
            return;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   639
        }
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   640
        equiv.put(tree.sym, that.sym);
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   641
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   642
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   643
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   644
    public void visitWhileLoop(JCWhileLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   645
        JCWhileLoop that = (JCWhileLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   646
        result = scan(tree.cond, that.cond) && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   647
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   648
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   649
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   650
    public void visitWildcard(JCWildcard tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   651
        JCWildcard that = (JCWildcard) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   652
        result = scan(tree.kind, that.kind) && scan(tree.inner, that.inner);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   653
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   654
}