src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TreeDiffer.java
author cushon
Tue, 27 Mar 2018 13:48:16 -0400
changeset 49429 752ecccb0b7f
child 49541 4f6887eade94
permissions -rw-r--r--
8200301: deduplicate lambda methods Reviewed-by: vromero, mcimadamore
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;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    38
import com.sun.tools.javac.tree.JCTree.JCBlock;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    39
import com.sun.tools.javac.tree.JCTree.JCBreak;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    40
import com.sun.tools.javac.tree.JCTree.JCCase;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    41
import com.sun.tools.javac.tree.JCTree.JCCatch;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    42
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    43
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    44
import com.sun.tools.javac.tree.JCTree.JCConditional;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    45
import com.sun.tools.javac.tree.JCTree.JCContinue;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    46
import com.sun.tools.javac.tree.JCTree.JCDoWhileLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    47
import com.sun.tools.javac.tree.JCTree.JCEnhancedForLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    48
import com.sun.tools.javac.tree.JCTree.JCErroneous;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    49
import com.sun.tools.javac.tree.JCTree.JCExports;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    50
import com.sun.tools.javac.tree.JCTree.JCExpressionStatement;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    51
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    52
import com.sun.tools.javac.tree.JCTree.JCForLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    53
import com.sun.tools.javac.tree.JCTree.JCIdent;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    54
import com.sun.tools.javac.tree.JCTree.JCIf;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    55
import com.sun.tools.javac.tree.JCTree.JCImport;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    56
import com.sun.tools.javac.tree.JCTree.JCInstanceOf;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    57
import com.sun.tools.javac.tree.JCTree.JCLabeledStatement;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    58
import com.sun.tools.javac.tree.JCTree.JCLambda;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    59
import com.sun.tools.javac.tree.JCTree.JCLiteral;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    60
import com.sun.tools.javac.tree.JCTree.JCMemberReference;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    61
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    62
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    63
import com.sun.tools.javac.tree.JCTree.JCModifiers;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    64
import com.sun.tools.javac.tree.JCTree.JCModuleDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    65
import com.sun.tools.javac.tree.JCTree.JCNewArray;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    66
import com.sun.tools.javac.tree.JCTree.JCNewClass;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    67
import com.sun.tools.javac.tree.JCTree.JCOpens;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    68
import com.sun.tools.javac.tree.JCTree.JCPackageDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    69
import com.sun.tools.javac.tree.JCTree.JCPrimitiveTypeTree;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    70
import com.sun.tools.javac.tree.JCTree.JCProvides;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    71
import com.sun.tools.javac.tree.JCTree.JCRequires;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    72
import com.sun.tools.javac.tree.JCTree.JCReturn;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    73
import com.sun.tools.javac.tree.JCTree.JCSwitch;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    74
import com.sun.tools.javac.tree.JCTree.JCSynchronized;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    75
import com.sun.tools.javac.tree.JCTree.JCThrow;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    76
import com.sun.tools.javac.tree.JCTree.JCTry;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    77
import com.sun.tools.javac.tree.JCTree.JCTypeApply;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    78
import com.sun.tools.javac.tree.JCTree.JCTypeCast;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    79
import com.sun.tools.javac.tree.JCTree.JCTypeIntersection;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    80
import com.sun.tools.javac.tree.JCTree.JCTypeParameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    81
import com.sun.tools.javac.tree.JCTree.JCTypeUnion;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    82
import com.sun.tools.javac.tree.JCTree.JCUnary;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    83
import com.sun.tools.javac.tree.JCTree.JCUses;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    84
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    85
import com.sun.tools.javac.tree.JCTree.JCWhileLoop;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    86
import com.sun.tools.javac.tree.JCTree.JCWildcard;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    87
import com.sun.tools.javac.tree.JCTree.LetExpr;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    88
import com.sun.tools.javac.tree.JCTree.TypeBoundKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    89
import com.sun.tools.javac.tree.TreeInfo;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    90
import com.sun.tools.javac.tree.TreeScanner;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    91
import com.sun.tools.javac.util.List;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    92
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    93
import javax.lang.model.element.ElementKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    94
import java.util.Iterator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    95
import java.util.Objects;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    96
import java.util.function.BiFunction;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    97
import java.util.function.Consumer;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    98
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    99
/** A visitor that compares two lambda bodies for structural equality. */
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   100
public class TreeDiffer extends TreeScanner {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   101
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   102
    private BiFunction<Symbol, Symbol, Boolean> symbolDiffer;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   103
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   104
    public TreeDiffer(BiFunction<Symbol, Symbol, Boolean> symbolDiffer) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   105
        this.symbolDiffer = Objects.requireNonNull(symbolDiffer);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   106
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   107
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   108
    private JCTree parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   109
    private boolean result;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   110
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   111
    public boolean scan(JCTree tree, JCTree parameter) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   112
        if (tree == null || parameter == null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   113
            return tree == null && parameter == null;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   114
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   115
        tree = TreeInfo.skipParens(tree);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   116
        parameter = TreeInfo.skipParens(parameter);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   117
        if (tree.type != null
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   118
                && tree.type.constValue() != null
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   119
                && parameter.type != null
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   120
                && parameter.type.constValue() != null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   121
            return Objects.equals(tree.type.constValue(), parameter.type.constValue());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   122
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   123
        if (tree.getTag() != parameter.getTag()) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   124
            return false;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   125
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   126
        JCTree prevParameter = this.parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   127
        boolean prevResult = this.result;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   128
        try {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   129
            this.parameter = parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   130
            tree.accept(this);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   131
            return result;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   132
        } finally {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   133
            this.parameter = prevParameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   134
            this.result = prevResult;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   135
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   136
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   137
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   138
    private boolean scan(Iterable<? extends JCTree> xs, Iterable<? extends JCTree> ys) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   139
        if (xs == null || ys == null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   140
            return xs == null && ys == null;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   141
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   142
        Iterator<? extends JCTree> x = xs.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   143
        Iterator<? extends JCTree> y = ys.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   144
        while (x.hasNext() && y.hasNext()) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   145
            if (!scan(x.next(), y.next())) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   146
                return false;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   147
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   148
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   149
        return !x.hasNext() && !y.hasNext();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   150
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   151
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   152
    private boolean scanDimAnnotations(List<List<JCAnnotation>> xs, List<List<JCAnnotation>> ys) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   153
        if (xs == null || ys == null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   154
            return xs == null && ys == null;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   155
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   156
        Iterator<List<JCAnnotation>> x = xs.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   157
        Iterator<List<JCAnnotation>> y = ys.iterator();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   158
        while (x.hasNext() && y.hasNext()) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   159
            if (!scan(x.next(), y.next())) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   160
                return false;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   161
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   162
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   163
        return !x.hasNext() && !y.hasNext();
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   164
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   165
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   166
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   167
    public void visitIdent(JCIdent tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   168
        JCIdent that = (JCIdent) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   169
        // Identifiers are a special case: we want to ensure the identifiers correspond to the
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   170
        // same symbols (rather than just having the same name), but also consider lambdas
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   171
        // equal if they differ only in the names of the parameters.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   172
        Symbol symbol = tree.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   173
        Symbol otherSymbol = that.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   174
        if (symbol != null && otherSymbol != null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   175
            Boolean tmp = symbolDiffer.apply(symbol, otherSymbol);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   176
            if (tmp != null) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   177
                result = tmp;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   178
                return;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   179
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   180
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   181
        result = tree.sym == that.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   182
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   183
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   184
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   185
    public void visitSelect(JCFieldAccess tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   186
        JCFieldAccess that = (JCFieldAccess) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   187
        result = scan(tree.selected, that.selected) && tree.sym == that.sym;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   188
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   189
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   190
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   191
    public void visitAnnotatedType(JCAnnotatedType tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   192
        JCAnnotatedType that = (JCAnnotatedType) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   193
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   194
                scan(tree.annotations, that.annotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   195
                        && scan(tree.underlyingType, that.underlyingType);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   196
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   197
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   198
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   199
    public void visitAnnotation(JCAnnotation tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   200
        JCAnnotation that = (JCAnnotation) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   201
        result = scan(tree.annotationType, that.annotationType) && scan(tree.args, that.args);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   202
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   203
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   204
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   205
    public void visitApply(JCMethodInvocation tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   206
        JCMethodInvocation that = (JCMethodInvocation) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   207
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   208
                scan(tree.typeargs, that.typeargs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   209
                        && scan(tree.meth, that.meth)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   210
                        && scan(tree.args, that.args)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   211
                        && tree.polyKind == that.polyKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   212
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   213
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   214
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   215
    public void visitAssert(JCAssert tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   216
        JCAssert that = (JCAssert) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   217
        result = scan(tree.cond, that.cond) && scan(tree.detail, that.detail);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   218
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   219
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   220
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   221
    public void visitAssign(JCAssign tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   222
        JCAssign that = (JCAssign) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   223
        result = scan(tree.lhs, that.lhs) && scan(tree.rhs, that.rhs);
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 visitAssignop(JCAssignOp tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   228
        JCAssignOp that = (JCAssignOp) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   229
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   230
                scan(tree.lhs, that.lhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   231
                        && scan(tree.rhs, that.rhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   232
                        && tree.operator == that.operator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   233
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   234
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   235
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   236
    public void visitBinary(JCBinary tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   237
        JCBinary that = (JCBinary) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   238
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   239
                scan(tree.lhs, that.lhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   240
                        && scan(tree.rhs, that.rhs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   241
                        && tree.operator == that.operator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   242
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   243
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   244
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   245
    public void visitBlock(JCBlock tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   246
        JCBlock that = (JCBlock) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   247
        result = tree.flags == that.flags && scan(tree.stats, that.stats);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   248
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   249
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   250
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   251
    public void visitBreak(JCBreak tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   252
        JCBreak that = (JCBreak) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   253
        result = tree.label == that.label;
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
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   257
    public void visitCase(JCCase tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   258
        JCCase that = (JCCase) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   259
        result = scan(tree.pat, that.pat) && scan(tree.stats, that.stats);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   260
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   261
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   262
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   263
    public void visitCatch(JCCatch tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   264
        JCCatch that = (JCCatch) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   265
        result = scan(tree.param, that.param) && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   266
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   267
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   268
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   269
    public void visitClassDef(JCClassDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   270
        JCClassDecl that = (JCClassDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   271
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   272
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   273
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   274
                        && scan(tree.typarams, that.typarams)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   275
                        && scan(tree.extending, that.extending)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   276
                        && scan(tree.implementing, that.implementing)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   277
                        && scan(tree.defs, that.defs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   278
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   279
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   280
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   281
    public void visitConditional(JCConditional tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   282
        JCConditional that = (JCConditional) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   283
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   284
                scan(tree.cond, that.cond)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   285
                        && scan(tree.truepart, that.truepart)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   286
                        && scan(tree.falsepart, that.falsepart);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   287
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   288
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   289
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   290
    public void visitContinue(JCContinue tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   291
        JCContinue that = (JCContinue) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   292
        result = tree.label == that.label;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   293
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   294
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   295
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   296
    public void visitDoLoop(JCDoWhileLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   297
        JCDoWhileLoop that = (JCDoWhileLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   298
        result = scan(tree.body, that.body) && scan(tree.cond, that.cond);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   299
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   300
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   301
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   302
    public void visitErroneous(JCErroneous tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   303
        JCErroneous that = (JCErroneous) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   304
        result = scan(tree.errs, that.errs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   305
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   306
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   307
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   308
    public void visitExec(JCExpressionStatement tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   309
        JCExpressionStatement that = (JCExpressionStatement) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   310
        result = scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   311
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   312
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   313
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   314
    public void visitExports(JCExports tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   315
        JCExports that = (JCExports) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   316
        result = scan(tree.qualid, that.qualid) && scan(tree.moduleNames, that.moduleNames);
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 visitForLoop(JCForLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   321
        JCForLoop that = (JCForLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   322
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   323
                scan(tree.init, that.init)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   324
                        && scan(tree.cond, that.cond)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   325
                        && scan(tree.step, that.step)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   326
                        && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   327
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   328
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   329
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   330
    public void visitForeachLoop(JCEnhancedForLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   331
        JCEnhancedForLoop that = (JCEnhancedForLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   332
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   333
                scan(tree.var, that.var)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   334
                        && scan(tree.expr, that.expr)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   335
                        && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   336
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   337
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   338
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   339
    public void visitIf(JCIf tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   340
        JCIf that = (JCIf) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   341
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   342
                scan(tree.cond, that.cond)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   343
                        && scan(tree.thenpart, that.thenpart)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   344
                        && scan(tree.elsepart, that.elsepart);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   345
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   346
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   347
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   348
    public void visitImport(JCImport tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   349
        JCImport that = (JCImport) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   350
        result = tree.staticImport == that.staticImport && scan(tree.qualid, that.qualid);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   351
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   352
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   353
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   354
    public void visitIndexed(JCArrayAccess tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   355
        JCArrayAccess that = (JCArrayAccess) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   356
        result = scan(tree.indexed, that.indexed) && scan(tree.index, that.index);
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 visitLabelled(JCLabeledStatement tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   361
        JCLabeledStatement that = (JCLabeledStatement) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   362
        result = tree.label == that.label && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   363
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   364
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   365
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   366
    public void visitLambda(JCLambda tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   367
        JCLambda that = (JCLambda) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   368
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   369
                scan(tree.params, that.params)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   370
                        && scan(tree.body, that.body)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   371
                        && tree.paramKind == that.paramKind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   372
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   373
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   374
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   375
    public void visitLetExpr(LetExpr tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   376
        LetExpr that = (LetExpr) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   377
        result = scan(tree.defs, that.defs) && scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   378
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   379
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   380
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   381
    public void visitLiteral(JCLiteral tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   382
        JCLiteral that = (JCLiteral) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   383
        result = tree.typetag == that.typetag && Objects.equals(tree.value, that.value);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   384
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   385
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   386
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   387
    public void visitMethodDef(JCMethodDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   388
        JCMethodDecl that = (JCMethodDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   389
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   390
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   391
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   392
                        && scan(tree.restype, that.restype)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   393
                        && scan(tree.typarams, that.typarams)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   394
                        && scan(tree.recvparam, that.recvparam)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   395
                        && scan(tree.params, that.params)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   396
                        && scan(tree.thrown, that.thrown)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   397
                        && scan(tree.body, that.body)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   398
                        && scan(tree.defaultValue, that.defaultValue);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   399
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   400
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   401
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   402
    public void visitModifiers(JCModifiers tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   403
        JCModifiers that = (JCModifiers) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   404
        result = tree.flags == that.flags && scan(tree.annotations, that.annotations);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   405
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   406
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   407
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   408
    public void visitModuleDef(JCModuleDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   409
        JCModuleDecl that = (JCModuleDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   410
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   411
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   412
                        && scan(tree.qualId, that.qualId)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   413
                        && scan(tree.directives, that.directives);
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 visitNewArray(JCNewArray tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   418
        JCNewArray that = (JCNewArray) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   419
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   420
                scan(tree.elemtype, that.elemtype)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   421
                        && scan(tree.dims, that.dims)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   422
                        && scan(tree.annotations, that.annotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   423
                        && scanDimAnnotations(tree.dimAnnotations, that.dimAnnotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   424
                        && scan(tree.elems, that.elems);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   425
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   426
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   427
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   428
    public void visitNewClass(JCNewClass tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   429
        JCNewClass that = (JCNewClass) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   430
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   431
                scan(tree.encl, that.encl)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   432
                        && scan(tree.typeargs, that.typeargs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   433
                        && scan(tree.clazz, that.clazz)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   434
                        && scan(tree.args, that.args)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   435
                        && scan(tree.def, that.def)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   436
                        && tree.constructor == that.constructor;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   437
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   438
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   439
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   440
    public void visitOpens(JCOpens tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   441
        JCOpens that = (JCOpens) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   442
        result = scan(tree.qualid, that.qualid) && scan(tree.moduleNames, that.moduleNames);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   443
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   444
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   445
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   446
    public void visitPackageDef(JCPackageDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   447
        JCPackageDecl that = (JCPackageDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   448
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   449
                scan(tree.annotations, that.annotations)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   450
                        && scan(tree.pid, that.pid)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   451
                        && tree.packge == that.packge;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   452
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   453
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   454
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   455
    public void visitProvides(JCProvides tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   456
        JCProvides that = (JCProvides) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   457
        result = scan(tree.serviceName, that.serviceName) && scan(tree.implNames, that.implNames);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   458
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   459
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   460
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   461
    public void visitReference(JCMemberReference tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   462
        JCMemberReference that = (JCMemberReference) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   463
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   464
                tree.mode == that.mode
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   465
                        && tree.kind == that.kind
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   466
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   467
                        && scan(tree.expr, that.expr)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   468
                        && scan(tree.typeargs, that.typeargs);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   469
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   470
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   471
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   472
    public void visitRequires(JCRequires tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   473
        JCRequires that = (JCRequires) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   474
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   475
                tree.isTransitive == that.isTransitive
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   476
                        && tree.isStaticPhase == that.isStaticPhase
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   477
                        && scan(tree.moduleName, that.moduleName);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   478
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   479
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   480
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   481
    public void visitReturn(JCReturn tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   482
        JCReturn that = (JCReturn) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   483
        result = scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   484
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   485
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   486
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   487
    public void visitSwitch(JCSwitch tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   488
        JCSwitch that = (JCSwitch) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   489
        result = scan(tree.selector, that.selector) && scan(tree.cases, that.cases);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   490
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   491
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   492
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   493
    public void visitSynchronized(JCSynchronized tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   494
        JCSynchronized that = (JCSynchronized) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   495
        result = scan(tree.lock, that.lock) && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   496
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   497
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   498
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   499
    public void visitThrow(JCThrow tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   500
        JCThrow that = (JCThrow) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   501
        result = scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   502
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   503
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   504
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   505
    public void visitTopLevel(JCCompilationUnit tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   506
        JCCompilationUnit that = (JCCompilationUnit) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   507
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   508
                scan(tree.defs, that.defs)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   509
                        && tree.modle == that.modle
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   510
                        && tree.packge == that.packge;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   511
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   512
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   513
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   514
    public void visitTry(JCTry tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   515
        JCTry that = (JCTry) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   516
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   517
                scan(tree.body, that.body)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   518
                        && scan(tree.catchers, that.catchers)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   519
                        && scan(tree.finalizer, that.finalizer)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   520
                        && scan(tree.resources, that.resources);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   521
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   522
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   523
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   524
    public void visitTypeApply(JCTypeApply tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   525
        JCTypeApply that = (JCTypeApply) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   526
        result = scan(tree.clazz, that.clazz) && scan(tree.arguments, that.arguments);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   527
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   528
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   529
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   530
    public void visitTypeArray(JCArrayTypeTree tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   531
        JCArrayTypeTree that = (JCArrayTypeTree) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   532
        result = scan(tree.elemtype, that.elemtype);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   533
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   534
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   535
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   536
    public void visitTypeBoundKind(TypeBoundKind tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   537
        TypeBoundKind that = (TypeBoundKind) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   538
        result = tree.kind == that.kind;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   539
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   540
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   541
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   542
    public void visitTypeCast(JCTypeCast tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   543
        JCTypeCast that = (JCTypeCast) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   544
        result = scan(tree.clazz, that.clazz) && scan(tree.expr, that.expr);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   545
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   546
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   547
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   548
    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   549
        JCPrimitiveTypeTree that = (JCPrimitiveTypeTree) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   550
        result = tree.typetag == that.typetag;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   551
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   552
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   553
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   554
    public void visitTypeIntersection(JCTypeIntersection tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   555
        JCTypeIntersection that = (JCTypeIntersection) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   556
        result = scan(tree.bounds, that.bounds);
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 visitTypeParameter(JCTypeParameter tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   561
        JCTypeParameter that = (JCTypeParameter) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   562
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   563
                tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   564
                        && scan(tree.bounds, that.bounds)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   565
                        && scan(tree.annotations, that.annotations);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   566
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   567
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   568
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   569
    public void visitTypeTest(JCInstanceOf tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   570
        JCInstanceOf that = (JCInstanceOf) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   571
        result = scan(tree.expr, that.expr) && scan(tree.clazz, that.clazz);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   572
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   573
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   574
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   575
    public void visitTypeUnion(JCTypeUnion tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   576
        JCTypeUnion that = (JCTypeUnion) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   577
        result = scan(tree.alternatives, that.alternatives);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   578
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   579
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   580
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   581
    public void visitUnary(JCUnary tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   582
        JCUnary that = (JCUnary) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   583
        result = scan(tree.arg, that.arg) && tree.operator == that.operator;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   584
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   585
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   586
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   587
    public void visitUses(JCUses tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   588
        JCUses that = (JCUses) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   589
        result = scan(tree.qualid, that.qualid);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   590
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   591
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   592
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   593
    public void visitVarDef(JCVariableDecl tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   594
        JCVariableDecl that = (JCVariableDecl) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   595
        result =
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   596
                scan(tree.mods, that.mods)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   597
                        && tree.name == that.name
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   598
                        && scan(tree.nameexpr, that.nameexpr)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   599
                        && scan(tree.vartype, that.vartype)
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   600
                        && scan(tree.init, that.init);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   601
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   602
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   603
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   604
    public void visitWhileLoop(JCWhileLoop tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   605
        JCWhileLoop that = (JCWhileLoop) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   606
        result = scan(tree.cond, that.cond) && scan(tree.body, that.body);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   607
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   608
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   609
    @Override
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   610
    public void visitWildcard(JCWildcard tree) {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   611
        JCWildcard that = (JCWildcard) parameter;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   612
        result = scan(tree.kind, that.kind) && scan(tree.inner, that.inner);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   613
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   614
}