JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/ast/visitor/EqualsVisitor.java
1/*
2 * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2020 The JavaParser Team.
4 *
5 * This file is part of JavaParser.
6 *
7 * JavaParser can be used either under the terms of
8 * a) the GNU Lesser General Public License as published by
9 *     the Free Software Foundation, either version 3 of the License, or
10 *     (at your option) any later version.
11 * b) the terms of the Apache License
12 *
13 * You should have received a copy of both licenses in LICENCE.LGPL and
14 * LICENCE.APACHE. Please refer to those files for details.
15 *
16 * JavaParser is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 */
21package com.github.javaparser.ast.visitor;
22
23import com.github.javaparser.ast.*;
24import com.github.javaparser.ast.body.*;
25import com.github.javaparser.ast.comments.BlockComment;
26import com.github.javaparser.ast.comments.JavadocComment;
27import com.github.javaparser.ast.comments.LineComment;
28import com.github.javaparser.ast.expr.*;
29import com.github.javaparser.ast.modules.*;
30import com.github.javaparser.ast.stmt.*;
31import com.github.javaparser.ast.type.*;
32import java.util.List;
33import java.util.Optional;
34
35/**
36 * A visitor that calculates deep node equality by comparing all properties and child nodes of the node.
37 *
38 * @author Julio Vilmar Gesser
39 */
40public class EqualsVisitor implements GenericVisitor<BooleanVisitable> {
41
42    private static final EqualsVisitor SINGLETON = new EqualsVisitor();
43
44    public static boolean equals(final Node nfinal Node n2) {
45        return SINGLETON.nodeEquals(nn2);
46    }
47
48    private EqualsVisitor() {
49    // hide constructor
50    }
51
52    /**
53     * Check for equality that can be applied to each kind of node,
54     * to not repeat it in every method we store that here.
55     */
56    private boolean commonNodeEquality(Node nNode n2) {
57        if (!nodeEquals(n.getComment(), n2.getComment())) {
58            return false;
59        }
60        return nodesEquals(n.getOrphanComments(), n2.getOrphanComments());
61    }
62
63    private <T extends Nodeboolean nodesEquals(final List<Tnodes1final List<Tnodes2) {
64        if (nodes1 == null) {
65            return nodes2 == null;
66        } else if (nodes2 == null) {
67            return false;
68        }
69        if (nodes1.size() != nodes2.size()) {
70            return false;
71        }
72        for (int i = 0i < nodes1.size(); i++) {
73            if (!nodeEquals(nodes1.get(i), nodes2.get(i))) {
74                return false;
75            }
76        }
77        return true;
78    }
79
80    private <N extends Nodeboolean nodesEquals(NodeList<NnNodeList<Nn2) {
81        if (n == n2) {
82            return true;
83        }
84        if (n == null || n2 == null) {
85            return false;
86        }
87        if (n.size() != n2.size()) {
88            return false;
89        }
90        for (int i = 0i < n.size(); i++) {
91            if (!nodeEquals(n.get(i), n2.get(i))) {
92                return false;
93            }
94        }
95        return true;
96    }
97
98    private <T extends Nodeboolean nodeEquals(final T nfinal T n2) {
99        if (n == n2) {
100            return true;
101        }
102        if (n == null || n2 == null) {
103            return false;
104        }
105        if (n.getClass() != n2.getClass()) {
106            return false;
107        }
108        if (!commonNodeEquality(nn2)) {
109            return false;
110        }
111        return n.accept(this, n2);
112    }
113
114    private <T extends Nodeboolean nodeEquals(final Optional<Tnfinal Optional<Tn2) {
115        return nodeEquals(n.orElse(null), n2.orElse(null));
116    }
117
118    private <T extends Nodeboolean nodesEquals(final Optional<NodeList<T>> nfinal Optional<NodeList<T>> n2) {
119        return nodesEquals(n.orElse(null), n2.orElse(null));
120    }
121
122    private boolean objEquals(final Object nfinal Object n2) {
123        if (n == n2) {
124            return true;
125        }
126        if (n == null || n2 == null) {
127            return false;
128        }
129        return n.equals(n2);
130    }
131
132    @Override
133    public Boolean visit(final CompilationUnit nfinal Visitable arg) {
134        final CompilationUnit n2 = (CompilationUnitarg;
135        if (!nodesEquals(n.getImports(), n2.getImports()))
136            return false;
137        if (!nodeEquals(n.getModule(), n2.getModule()))
138            return false;
139        if (!nodeEquals(n.getPackageDeclaration(), n2.getPackageDeclaration()))
140            return false;
141        if (!nodesEquals(n.getTypes(), n2.getTypes()))
142            return false;
143        if (!nodeEquals(n.getComment(), n2.getComment()))
144            return false;
145        return true;
146    }
147
148    @Override
149    public Boolean visit(final PackageDeclaration nfinal Visitable arg) {
150        final PackageDeclaration n2 = (PackageDeclarationarg;
151        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
152            return false;
153        if (!nodeEquals(n.getName(), n2.getName()))
154            return false;
155        if (!nodeEquals(n.getComment(), n2.getComment()))
156            return false;
157        return true;
158    }
159
160    @Override
161    public Boolean visit(final TypeParameter nfinal Visitable arg) {
162        final TypeParameter n2 = (TypeParameterarg;
163        if (!nodeEquals(n.getName(), n2.getName()))
164            return false;
165        if (!nodesEquals(n.getTypeBound(), n2.getTypeBound()))
166            return false;
167        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
168            return false;
169        if (!nodeEquals(n.getComment(), n2.getComment()))
170            return false;
171        return true;
172    }
173
174    @Override
175    public Boolean visit(final LineComment nfinal Visitable arg) {
176        final LineComment n2 = (LineCommentarg;
177        if (!objEquals(n.getContent(), n2.getContent()))
178            return false;
179        if (!nodeEquals(n.getComment(), n2.getComment()))
180            return false;
181        return true;
182    }
183
184    @Override
185    public Boolean visit(final BlockComment nfinal Visitable arg) {
186        final BlockComment n2 = (BlockCommentarg;
187        if (!objEquals(n.getContent(), n2.getContent()))
188            return false;
189        if (!nodeEquals(n.getComment(), n2.getComment()))
190            return false;
191        return true;
192    }
193
194    @Override
195    public Boolean visit(final ClassOrInterfaceDeclaration nfinal Visitable arg) {
196        final ClassOrInterfaceDeclaration n2 = (ClassOrInterfaceDeclarationarg;
197        if (!nodesEquals(n.getExtendedTypes(), n2.getExtendedTypes()))
198            return false;
199        if (!nodesEquals(n.getImplementedTypes(), n2.getImplementedTypes()))
200            return false;
201        if (!objEquals(n.isInterface(), n2.isInterface()))
202            return false;
203        if (!nodesEquals(n.getTypeParameters(), n2.getTypeParameters()))
204            return false;
205        if (!nodesEquals(n.getMembers(), n2.getMembers()))
206            return false;
207        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
208            return false;
209        if (!nodeEquals(n.getName(), n2.getName()))
210            return false;
211        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
212            return false;
213        if (!nodeEquals(n.getComment(), n2.getComment()))
214            return false;
215        return true;
216    }
217
218    @Override
219    public Boolean visit(final EnumDeclaration nfinal Visitable arg) {
220        final EnumDeclaration n2 = (EnumDeclarationarg;
221        if (!nodesEquals(n.getEntries(), n2.getEntries()))
222            return false;
223        if (!nodesEquals(n.getImplementedTypes(), n2.getImplementedTypes()))
224            return false;
225        if (!nodesEquals(n.getMembers(), n2.getMembers()))
226            return false;
227        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
228            return false;
229        if (!nodeEquals(n.getName(), n2.getName()))
230            return false;
231        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
232            return false;
233        if (!nodeEquals(n.getComment(), n2.getComment()))
234            return false;
235        return true;
236    }
237
238    @Override
239    public Boolean visit(final EnumConstantDeclaration nfinal Visitable arg) {
240        final EnumConstantDeclaration n2 = (EnumConstantDeclarationarg;
241        if (!nodesEquals(n.getArguments(), n2.getArguments()))
242            return false;
243        if (!nodesEquals(n.getClassBody(), n2.getClassBody()))
244            return false;
245        if (!nodeEquals(n.getName(), n2.getName()))
246            return false;
247        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
248            return false;
249        if (!nodeEquals(n.getComment(), n2.getComment()))
250            return false;
251        return true;
252    }
253
254    @Override
255    public Boolean visit(final AnnotationDeclaration nfinal Visitable arg) {
256        final AnnotationDeclaration n2 = (AnnotationDeclarationarg;
257        if (!nodesEquals(n.getMembers(), n2.getMembers()))
258            return false;
259        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
260            return false;
261        if (!nodeEquals(n.getName(), n2.getName()))
262            return false;
263        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
264            return false;
265        if (!nodeEquals(n.getComment(), n2.getComment()))
266            return false;
267        return true;
268    }
269
270    @Override
271    public Boolean visit(final AnnotationMemberDeclaration nfinal Visitable arg) {
272        final AnnotationMemberDeclaration n2 = (AnnotationMemberDeclarationarg;
273        if (!nodeEquals(n.getDefaultValue(), n2.getDefaultValue()))
274            return false;
275        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
276            return false;
277        if (!nodeEquals(n.getName(), n2.getName()))
278            return false;
279        if (!nodeEquals(n.getType(), n2.getType()))
280            return false;
281        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
282            return false;
283        if (!nodeEquals(n.getComment(), n2.getComment()))
284            return false;
285        return true;
286    }
287
288    @Override
289    public Boolean visit(final FieldDeclaration nfinal Visitable arg) {
290        final FieldDeclaration n2 = (FieldDeclarationarg;
291        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
292            return false;
293        if (!nodesEquals(n.getVariables(), n2.getVariables()))
294            return false;
295        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
296            return false;
297        if (!nodeEquals(n.getComment(), n2.getComment()))
298            return false;
299        return true;
300    }
301
302    @Override
303    public Boolean visit(final VariableDeclarator nfinal Visitable arg) {
304        final VariableDeclarator n2 = (VariableDeclaratorarg;
305        if (!nodeEquals(n.getInitializer(), n2.getInitializer()))
306            return false;
307        if (!nodeEquals(n.getName(), n2.getName()))
308            return false;
309        if (!nodeEquals(n.getType(), n2.getType()))
310            return false;
311        if (!nodeEquals(n.getComment(), n2.getComment()))
312            return false;
313        return true;
314    }
315
316    @Override
317    public Boolean visit(final ConstructorDeclaration nfinal Visitable arg) {
318        final ConstructorDeclaration n2 = (ConstructorDeclarationarg;
319        if (!nodeEquals(n.getBody(), n2.getBody()))
320            return false;
321        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
322            return false;
323        if (!nodeEquals(n.getName(), n2.getName()))
324            return false;
325        if (!nodesEquals(n.getParameters(), n2.getParameters()))
326            return false;
327        if (!nodeEquals(n.getReceiverParameter(), n2.getReceiverParameter()))
328            return false;
329        if (!nodesEquals(n.getThrownExceptions(), n2.getThrownExceptions()))
330            return false;
331        if (!nodesEquals(n.getTypeParameters(), n2.getTypeParameters()))
332            return false;
333        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
334            return false;
335        if (!nodeEquals(n.getComment(), n2.getComment()))
336            return false;
337        return true;
338    }
339
340    @Override
341    public Boolean visit(final MethodDeclaration nfinal Visitable arg) {
342        final MethodDeclaration n2 = (MethodDeclarationarg;
343        if (!nodeEquals(n.getBody(), n2.getBody()))
344            return false;
345        if (!nodeEquals(n.getType(), n2.getType()))
346            return false;
347        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
348            return false;
349        if (!nodeEquals(n.getName(), n2.getName()))
350            return false;
351        if (!nodesEquals(n.getParameters(), n2.getParameters()))
352            return false;
353        if (!nodeEquals(n.getReceiverParameter(), n2.getReceiverParameter()))
354            return false;
355        if (!nodesEquals(n.getThrownExceptions(), n2.getThrownExceptions()))
356            return false;
357        if (!nodesEquals(n.getTypeParameters(), n2.getTypeParameters()))
358            return false;
359        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
360            return false;
361        if (!nodeEquals(n.getComment(), n2.getComment()))
362            return false;
363        return true;
364    }
365
366    @Override
367    public Boolean visit(final Parameter nfinal Visitable arg) {
368        final Parameter n2 = (Parameterarg;
369        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
370            return false;
371        if (!objEquals(n.isVarArgs(), n2.isVarArgs()))
372            return false;
373        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
374            return false;
375        if (!nodeEquals(n.getName(), n2.getName()))
376            return false;
377        if (!nodeEquals(n.getType(), n2.getType()))
378            return false;
379        if (!nodesEquals(n.getVarArgsAnnotations(), n2.getVarArgsAnnotations()))
380            return false;
381        if (!nodeEquals(n.getComment(), n2.getComment()))
382            return false;
383        return true;
384    }
385
386    @Override
387    public Boolean visit(final InitializerDeclaration nfinal Visitable arg) {
388        final InitializerDeclaration n2 = (InitializerDeclarationarg;
389        if (!nodeEquals(n.getBody(), n2.getBody()))
390            return false;
391        if (!objEquals(n.isStatic(), n2.isStatic()))
392            return false;
393        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
394            return false;
395        if (!nodeEquals(n.getComment(), n2.getComment()))
396            return false;
397        return true;
398    }
399
400    @Override
401    public Boolean visit(final JavadocComment nfinal Visitable arg) {
402        final JavadocComment n2 = (JavadocCommentarg;
403        if (!objEquals(n.getContent(), n2.getContent()))
404            return false;
405        if (!nodeEquals(n.getComment(), n2.getComment()))
406            return false;
407        return true;
408    }
409
410    @Override
411    public Boolean visit(final ClassOrInterfaceType nfinal Visitable arg) {
412        final ClassOrInterfaceType n2 = (ClassOrInterfaceTypearg;
413        if (!nodeEquals(n.getName(), n2.getName()))
414            return false;
415        if (!nodeEquals(n.getScope(), n2.getScope()))
416            return false;
417        if (!nodesEquals(n.getTypeArguments(), n2.getTypeArguments()))
418            return false;
419        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
420            return false;
421        if (!nodeEquals(n.getComment(), n2.getComment()))
422            return false;
423        return true;
424    }
425
426    @Override
427    public Boolean visit(final PrimitiveType nfinal Visitable arg) {
428        final PrimitiveType n2 = (PrimitiveTypearg;
429        if (!objEquals(n.getType(), n2.getType()))
430            return false;
431        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
432            return false;
433        if (!nodeEquals(n.getComment(), n2.getComment()))
434            return false;
435        return true;
436    }
437
438    @Override
439    public Boolean visit(final ArrayType nfinal Visitable arg) {
440        final ArrayType n2 = (ArrayTypearg;
441        if (!nodeEquals(n.getComponentType(), n2.getComponentType()))
442            return false;
443        if (!objEquals(n.getOrigin(), n2.getOrigin()))
444            return false;
445        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
446            return false;
447        if (!nodeEquals(n.getComment(), n2.getComment()))
448            return false;
449        return true;
450    }
451
452    @Override
453    public Boolean visit(final ArrayCreationLevel nfinal Visitable arg) {
454        final ArrayCreationLevel n2 = (ArrayCreationLevelarg;
455        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
456            return false;
457        if (!nodeEquals(n.getDimension(), n2.getDimension()))
458            return false;
459        if (!nodeEquals(n.getComment(), n2.getComment()))
460            return false;
461        return true;
462    }
463
464    @Override
465    public Boolean visit(final IntersectionType nfinal Visitable arg) {
466        final IntersectionType n2 = (IntersectionTypearg;
467        if (!nodesEquals(n.getElements(), n2.getElements()))
468            return false;
469        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
470            return false;
471        if (!nodeEquals(n.getComment(), n2.getComment()))
472            return false;
473        return true;
474    }
475
476    @Override
477    public Boolean visit(final UnionType nfinal Visitable arg) {
478        final UnionType n2 = (UnionTypearg;
479        if (!nodesEquals(n.getElements(), n2.getElements()))
480            return false;
481        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
482            return false;
483        if (!nodeEquals(n.getComment(), n2.getComment()))
484            return false;
485        return true;
486    }
487
488    @Override
489    public Boolean visit(final VoidType nfinal Visitable arg) {
490        final VoidType n2 = (VoidTypearg;
491        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
492            return false;
493        if (!nodeEquals(n.getComment(), n2.getComment()))
494            return false;
495        return true;
496    }
497
498    @Override
499    public Boolean visit(final WildcardType nfinal Visitable arg) {
500        final WildcardType n2 = (WildcardTypearg;
501        if (!nodeEquals(n.getExtendedType(), n2.getExtendedType()))
502            return false;
503        if (!nodeEquals(n.getSuperType(), n2.getSuperType()))
504            return false;
505        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
506            return false;
507        if (!nodeEquals(n.getComment(), n2.getComment()))
508            return false;
509        return true;
510    }
511
512    @Override
513    public Boolean visit(final UnknownType nfinal Visitable arg) {
514        final UnknownType n2 = (UnknownTypearg;
515        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
516            return false;
517        if (!nodeEquals(n.getComment(), n2.getComment()))
518            return false;
519        return true;
520    }
521
522    @Override
523    public Boolean visit(final ArrayAccessExpr nfinal Visitable arg) {
524        final ArrayAccessExpr n2 = (ArrayAccessExprarg;
525        if (!nodeEquals(n.getIndex(), n2.getIndex()))
526            return false;
527        if (!nodeEquals(n.getName(), n2.getName()))
528            return false;
529        if (!nodeEquals(n.getComment(), n2.getComment()))
530            return false;
531        return true;
532    }
533
534    @Override
535    public Boolean visit(final ArrayCreationExpr nfinal Visitable arg) {
536        final ArrayCreationExpr n2 = (ArrayCreationExprarg;
537        if (!nodeEquals(n.getElementType(), n2.getElementType()))
538            return false;
539        if (!nodeEquals(n.getInitializer(), n2.getInitializer()))
540            return false;
541        if (!nodesEquals(n.getLevels(), n2.getLevels()))
542            return false;
543        if (!nodeEquals(n.getComment(), n2.getComment()))
544            return false;
545        return true;
546    }
547
548    @Override
549    public Boolean visit(final ArrayInitializerExpr nfinal Visitable arg) {
550        final ArrayInitializerExpr n2 = (ArrayInitializerExprarg;
551        if (!nodesEquals(n.getValues(), n2.getValues()))
552            return false;
553        if (!nodeEquals(n.getComment(), n2.getComment()))
554            return false;
555        return true;
556    }
557
558    @Override
559    public Boolean visit(final AssignExpr nfinal Visitable arg) {
560        final AssignExpr n2 = (AssignExprarg;
561        if (!objEquals(n.getOperator(), n2.getOperator()))
562            return false;
563        if (!nodeEquals(n.getTarget(), n2.getTarget()))
564            return false;
565        if (!nodeEquals(n.getValue(), n2.getValue()))
566            return false;
567        if (!nodeEquals(n.getComment(), n2.getComment()))
568            return false;
569        return true;
570    }
571
572    @Override
573    public Boolean visit(final BinaryExpr nfinal Visitable arg) {
574        final BinaryExpr n2 = (BinaryExprarg;
575        if (!nodeEquals(n.getLeft(), n2.getLeft()))
576            return false;
577        if (!objEquals(n.getOperator(), n2.getOperator()))
578            return false;
579        if (!nodeEquals(n.getRight(), n2.getRight()))
580            return false;
581        if (!nodeEquals(n.getComment(), n2.getComment()))
582            return false;
583        return true;
584    }
585
586    @Override
587    public Boolean visit(final CastExpr nfinal Visitable arg) {
588        final CastExpr n2 = (CastExprarg;
589        if (!nodeEquals(n.getExpression(), n2.getExpression()))
590            return false;
591        if (!nodeEquals(n.getType(), n2.getType()))
592            return false;
593        if (!nodeEquals(n.getComment(), n2.getComment()))
594            return false;
595        return true;
596    }
597
598    @Override
599    public Boolean visit(final ClassExpr nfinal Visitable arg) {
600        final ClassExpr n2 = (ClassExprarg;
601        if (!nodeEquals(n.getType(), n2.getType()))
602            return false;
603        if (!nodeEquals(n.getComment(), n2.getComment()))
604            return false;
605        return true;
606    }
607
608    @Override
609    public Boolean visit(final ConditionalExpr nfinal Visitable arg) {
610        final ConditionalExpr n2 = (ConditionalExprarg;
611        if (!nodeEquals(n.getCondition(), n2.getCondition()))
612            return false;
613        if (!nodeEquals(n.getElseExpr(), n2.getElseExpr()))
614            return false;
615        if (!nodeEquals(n.getThenExpr(), n2.getThenExpr()))
616            return false;
617        if (!nodeEquals(n.getComment(), n2.getComment()))
618            return false;
619        return true;
620    }
621
622    @Override
623    public Boolean visit(final EnclosedExpr nfinal Visitable arg) {
624        final EnclosedExpr n2 = (EnclosedExprarg;
625        if (!nodeEquals(n.getInner(), n2.getInner()))
626            return false;
627        if (!nodeEquals(n.getComment(), n2.getComment()))
628            return false;
629        return true;
630    }
631
632    @Override
633    public Boolean visit(final FieldAccessExpr nfinal Visitable arg) {
634        final FieldAccessExpr n2 = (FieldAccessExprarg;
635        if (!nodeEquals(n.getName(), n2.getName()))
636            return false;
637        if (!nodeEquals(n.getScope(), n2.getScope()))
638            return false;
639        if (!nodesEquals(n.getTypeArguments(), n2.getTypeArguments()))
640            return false;
641        if (!nodeEquals(n.getComment(), n2.getComment()))
642            return false;
643        return true;
644    }
645
646    @Override
647    public Boolean visit(final InstanceOfExpr nfinal Visitable arg) {
648        final InstanceOfExpr n2 = (InstanceOfExprarg;
649        if (!nodeEquals(n.getExpression(), n2.getExpression()))
650            return false;
651        if (!nodeEquals(n.getType(), n2.getType()))
652            return false;
653        if (!nodeEquals(n.getComment(), n2.getComment()))
654            return false;
655        return true;
656    }
657
658    @Override
659    public Boolean visit(final StringLiteralExpr nfinal Visitable arg) {
660        final StringLiteralExpr n2 = (StringLiteralExprarg;
661        if (!objEquals(n.getValue(), n2.getValue()))
662            return false;
663        if (!nodeEquals(n.getComment(), n2.getComment()))
664            return false;
665        return true;
666    }
667
668    @Override
669    public Boolean visit(final IntegerLiteralExpr nfinal Visitable arg) {
670        final IntegerLiteralExpr n2 = (IntegerLiteralExprarg;
671        if (!objEquals(n.getValue(), n2.getValue()))
672            return false;
673        if (!nodeEquals(n.getComment(), n2.getComment()))
674            return false;
675        return true;
676    }
677
678    @Override
679    public Boolean visit(final LongLiteralExpr nfinal Visitable arg) {
680        final LongLiteralExpr n2 = (LongLiteralExprarg;
681        if (!objEquals(n.getValue(), n2.getValue()))
682            return false;
683        if (!nodeEquals(n.getComment(), n2.getComment()))
684            return false;
685        return true;
686    }
687
688    @Override
689    public Boolean visit(final CharLiteralExpr nfinal Visitable arg) {
690        final CharLiteralExpr n2 = (CharLiteralExprarg;
691        if (!objEquals(n.getValue(), n2.getValue()))
692            return false;
693        if (!nodeEquals(n.getComment(), n2.getComment()))
694            return false;
695        return true;
696    }
697
698    @Override
699    public Boolean visit(final DoubleLiteralExpr nfinal Visitable arg) {
700        final DoubleLiteralExpr n2 = (DoubleLiteralExprarg;
701        if (!objEquals(n.getValue(), n2.getValue()))
702            return false;
703        if (!nodeEquals(n.getComment(), n2.getComment()))
704            return false;
705        return true;
706    }
707
708    @Override
709    public Boolean visit(final BooleanLiteralExpr nfinal Visitable arg) {
710        final BooleanLiteralExpr n2 = (BooleanLiteralExprarg;
711        if (!objEquals(n.isValue(), n2.isValue()))
712            return false;
713        if (!nodeEquals(n.getComment(), n2.getComment()))
714            return false;
715        return true;
716    }
717
718    @Override
719    public Boolean visit(final NullLiteralExpr nfinal Visitable arg) {
720        final NullLiteralExpr n2 = (NullLiteralExprarg;
721        if (!nodeEquals(n.getComment(), n2.getComment()))
722            return false;
723        return true;
724    }
725
726    @Override
727    public Boolean visit(final MethodCallExpr nfinal Visitable arg) {
728        final MethodCallExpr n2 = (MethodCallExprarg;
729        if (!nodesEquals(n.getArguments(), n2.getArguments()))
730            return false;
731        if (!nodeEquals(n.getName(), n2.getName()))
732            return false;
733        if (!nodeEquals(n.getScope(), n2.getScope()))
734            return false;
735        if (!nodesEquals(n.getTypeArguments(), n2.getTypeArguments()))
736            return false;
737        if (!nodeEquals(n.getComment(), n2.getComment()))
738            return false;
739        return true;
740    }
741
742    @Override
743    public Boolean visit(final NameExpr nfinal Visitable arg) {
744        final NameExpr n2 = (NameExprarg;
745        if (!nodeEquals(n.getName(), n2.getName()))
746            return false;
747        if (!nodeEquals(n.getComment(), n2.getComment()))
748            return false;
749        return true;
750    }
751
752    @Override
753    public Boolean visit(final ObjectCreationExpr nfinal Visitable arg) {
754        final ObjectCreationExpr n2 = (ObjectCreationExprarg;
755        if (!nodesEquals(n.getAnonymousClassBody(), n2.getAnonymousClassBody()))
756            return false;
757        if (!nodesEquals(n.getArguments(), n2.getArguments()))
758            return false;
759        if (!nodeEquals(n.getScope(), n2.getScope()))
760            return false;
761        if (!nodeEquals(n.getType(), n2.getType()))
762            return false;
763        if (!nodesEquals(n.getTypeArguments(), n2.getTypeArguments()))
764            return false;
765        if (!nodeEquals(n.getComment(), n2.getComment()))
766            return false;
767        return true;
768    }
769
770    @Override
771    public Boolean visit(final Name nfinal Visitable arg) {
772        final Name n2 = (Namearg;
773        if (!objEquals(n.getIdentifier(), n2.getIdentifier()))
774            return false;
775        if (!nodeEquals(n.getQualifier(), n2.getQualifier()))
776            return false;
777        if (!nodeEquals(n.getComment(), n2.getComment()))
778            return false;
779        return true;
780    }
781
782    @Override
783    public Boolean visit(final SimpleName nfinal Visitable arg) {
784        final SimpleName n2 = (SimpleNamearg;
785        if (!objEquals(n.getIdentifier(), n2.getIdentifier()))
786            return false;
787        if (!nodeEquals(n.getComment(), n2.getComment()))
788            return false;
789        return true;
790    }
791
792    @Override
793    public Boolean visit(final ThisExpr nfinal Visitable arg) {
794        final ThisExpr n2 = (ThisExprarg;
795        if (!nodeEquals(n.getTypeName(), n2.getTypeName()))
796            return false;
797        if (!nodeEquals(n.getComment(), n2.getComment()))
798            return false;
799        return true;
800    }
801
802    @Override
803    public Boolean visit(final SuperExpr nfinal Visitable arg) {
804        final SuperExpr n2 = (SuperExprarg;
805        if (!nodeEquals(n.getTypeName(), n2.getTypeName()))
806            return false;
807        if (!nodeEquals(n.getComment(), n2.getComment()))
808            return false;
809        return true;
810    }
811
812    @Override
813    public Boolean visit(final UnaryExpr nfinal Visitable arg) {
814        final UnaryExpr n2 = (UnaryExprarg;
815        if (!nodeEquals(n.getExpression(), n2.getExpression()))
816            return false;
817        if (!objEquals(n.getOperator(), n2.getOperator()))
818            return false;
819        if (!nodeEquals(n.getComment(), n2.getComment()))
820            return false;
821        return true;
822    }
823
824    @Override
825    public Boolean visit(final VariableDeclarationExpr nfinal Visitable arg) {
826        final VariableDeclarationExpr n2 = (VariableDeclarationExprarg;
827        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
828            return false;
829        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
830            return false;
831        if (!nodesEquals(n.getVariables(), n2.getVariables()))
832            return false;
833        if (!nodeEquals(n.getComment(), n2.getComment()))
834            return false;
835        return true;
836    }
837
838    @Override
839    public Boolean visit(final MarkerAnnotationExpr nfinal Visitable arg) {
840        final MarkerAnnotationExpr n2 = (MarkerAnnotationExprarg;
841        if (!nodeEquals(n.getName(), n2.getName()))
842            return false;
843        if (!nodeEquals(n.getComment(), n2.getComment()))
844            return false;
845        return true;
846    }
847
848    @Override
849    public Boolean visit(final SingleMemberAnnotationExpr nfinal Visitable arg) {
850        final SingleMemberAnnotationExpr n2 = (SingleMemberAnnotationExprarg;
851        if (!nodeEquals(n.getMemberValue(), n2.getMemberValue()))
852            return false;
853        if (!nodeEquals(n.getName(), n2.getName()))
854            return false;
855        if (!nodeEquals(n.getComment(), n2.getComment()))
856            return false;
857        return true;
858    }
859
860    @Override
861    public Boolean visit(final NormalAnnotationExpr nfinal Visitable arg) {
862        final NormalAnnotationExpr n2 = (NormalAnnotationExprarg;
863        if (!nodesEquals(n.getPairs(), n2.getPairs()))
864            return false;
865        if (!nodeEquals(n.getName(), n2.getName()))
866            return false;
867        if (!nodeEquals(n.getComment(), n2.getComment()))
868            return false;
869        return true;
870    }
871
872    @Override
873    public Boolean visit(final MemberValuePair nfinal Visitable arg) {
874        final MemberValuePair n2 = (MemberValuePairarg;
875        if (!nodeEquals(n.getName(), n2.getName()))
876            return false;
877        if (!nodeEquals(n.getValue(), n2.getValue()))
878            return false;
879        if (!nodeEquals(n.getComment(), n2.getComment()))
880            return false;
881        return true;
882    }
883
884    @Override
885    public Boolean visit(final ExplicitConstructorInvocationStmt nfinal Visitable arg) {
886        final ExplicitConstructorInvocationStmt n2 = (ExplicitConstructorInvocationStmtarg;
887        if (!nodesEquals(n.getArguments(), n2.getArguments()))
888            return false;
889        if (!nodeEquals(n.getExpression(), n2.getExpression()))
890            return false;
891        if (!objEquals(n.isThis(), n2.isThis()))
892            return false;
893        if (!nodesEquals(n.getTypeArguments(), n2.getTypeArguments()))
894            return false;
895        if (!nodeEquals(n.getComment(), n2.getComment()))
896            return false;
897        return true;
898    }
899
900    @Override
901    public Boolean visit(final LocalClassDeclarationStmt nfinal Visitable arg) {
902        final LocalClassDeclarationStmt n2 = (LocalClassDeclarationStmtarg;
903        if (!nodeEquals(n.getClassDeclaration(), n2.getClassDeclaration()))
904            return false;
905        if (!nodeEquals(n.getComment(), n2.getComment()))
906            return false;
907        return true;
908    }
909
910    @Override
911    public Boolean visit(final AssertStmt nfinal Visitable arg) {
912        final AssertStmt n2 = (AssertStmtarg;
913        if (!nodeEquals(n.getCheck(), n2.getCheck()))
914            return false;
915        if (!nodeEquals(n.getMessage(), n2.getMessage()))
916            return false;
917        if (!nodeEquals(n.getComment(), n2.getComment()))
918            return false;
919        return true;
920    }
921
922    @Override
923    public Boolean visit(final BlockStmt nfinal Visitable arg) {
924        final BlockStmt n2 = (BlockStmtarg;
925        if (!nodesEquals(n.getStatements(), n2.getStatements()))
926            return false;
927        if (!nodeEquals(n.getComment(), n2.getComment()))
928            return false;
929        return true;
930    }
931
932    @Override
933    public Boolean visit(final LabeledStmt nfinal Visitable arg) {
934        final LabeledStmt n2 = (LabeledStmtarg;
935        if (!nodeEquals(n.getLabel(), n2.getLabel()))
936            return false;
937        if (!nodeEquals(n.getStatement(), n2.getStatement()))
938            return false;
939        if (!nodeEquals(n.getComment(), n2.getComment()))
940            return false;
941        return true;
942    }
943
944    @Override
945    public Boolean visit(final EmptyStmt nfinal Visitable arg) {
946        final EmptyStmt n2 = (EmptyStmtarg;
947        if (!nodeEquals(n.getComment(), n2.getComment()))
948            return false;
949        return true;
950    }
951
952    @Override
953    public Boolean visit(final ExpressionStmt nfinal Visitable arg) {
954        final ExpressionStmt n2 = (ExpressionStmtarg;
955        if (!nodeEquals(n.getExpression(), n2.getExpression()))
956            return false;
957        if (!nodeEquals(n.getComment(), n2.getComment()))
958            return false;
959        return true;
960    }
961
962    @Override
963    public Boolean visit(final SwitchStmt nfinal Visitable arg) {
964        final SwitchStmt n2 = (SwitchStmtarg;
965        if (!nodesEquals(n.getEntries(), n2.getEntries()))
966            return false;
967        if (!nodeEquals(n.getSelector(), n2.getSelector()))
968            return false;
969        if (!nodeEquals(n.getComment(), n2.getComment()))
970            return false;
971        return true;
972    }
973
974    @Override
975    public Boolean visit(final SwitchEntry nfinal Visitable arg) {
976        final SwitchEntry n2 = (SwitchEntryarg;
977        if (!nodesEquals(n.getLabels(), n2.getLabels()))
978            return false;
979        if (!nodesEquals(n.getStatements(), n2.getStatements()))
980            return false;
981        if (!objEquals(n.getType(), n2.getType()))
982            return false;
983        if (!nodeEquals(n.getComment(), n2.getComment()))
984            return false;
985        return true;
986    }
987
988    @Override
989    public Boolean visit(final BreakStmt nfinal Visitable arg) {
990        final BreakStmt n2 = (BreakStmtarg;
991        if (!nodeEquals(n.getLabel(), n2.getLabel()))
992            return false;
993        if (!nodeEquals(n.getComment(), n2.getComment()))
994            return false;
995        return true;
996    }
997
998    @Override
999    public Boolean visit(final ReturnStmt nfinal Visitable arg) {
1000        final ReturnStmt n2 = (ReturnStmtarg;
1001        if (!nodeEquals(n.getExpression(), n2.getExpression()))
1002            return false;
1003        if (!nodeEquals(n.getComment(), n2.getComment()))
1004            return false;
1005        return true;
1006    }
1007
1008    @Override
1009    public Boolean visit(final IfStmt nfinal Visitable arg) {
1010        final IfStmt n2 = (IfStmtarg;
1011        if (!nodeEquals(n.getCondition(), n2.getCondition()))
1012            return false;
1013        if (!nodeEquals(n.getElseStmt(), n2.getElseStmt()))
1014            return false;
1015        if (!nodeEquals(n.getThenStmt(), n2.getThenStmt()))
1016            return false;
1017        if (!nodeEquals(n.getComment(), n2.getComment()))
1018            return false;
1019        return true;
1020    }
1021
1022    @Override
1023    public Boolean visit(final WhileStmt nfinal Visitable arg) {
1024        final WhileStmt n2 = (WhileStmtarg;
1025        if (!nodeEquals(n.getBody(), n2.getBody()))
1026            return false;
1027        if (!nodeEquals(n.getCondition(), n2.getCondition()))
1028            return false;
1029        if (!nodeEquals(n.getComment(), n2.getComment()))
1030            return false;
1031        return true;
1032    }
1033
1034    @Override
1035    public Boolean visit(final ContinueStmt nfinal Visitable arg) {
1036        final ContinueStmt n2 = (ContinueStmtarg;
1037        if (!nodeEquals(n.getLabel(), n2.getLabel()))
1038            return false;
1039        if (!nodeEquals(n.getComment(), n2.getComment()))
1040            return false;
1041        return true;
1042    }
1043
1044    @Override
1045    public Boolean visit(final DoStmt nfinal Visitable arg) {
1046        final DoStmt n2 = (DoStmtarg;
1047        if (!nodeEquals(n.getBody(), n2.getBody()))
1048            return false;
1049        if (!nodeEquals(n.getCondition(), n2.getCondition()))
1050            return false;
1051        if (!nodeEquals(n.getComment(), n2.getComment()))
1052            return false;
1053        return true;
1054    }
1055
1056    @Override
1057    public Boolean visit(final ForEachStmt nfinal Visitable arg) {
1058        final ForEachStmt n2 = (ForEachStmtarg;
1059        if (!nodeEquals(n.getBody(), n2.getBody()))
1060            return false;
1061        if (!nodeEquals(n.getIterable(), n2.getIterable()))
1062            return false;
1063        if (!nodeEquals(n.getVariable(), n2.getVariable()))
1064            return false;
1065        if (!nodeEquals(n.getComment(), n2.getComment()))
1066            return false;
1067        return true;
1068    }
1069
1070    @Override
1071    public Boolean visit(final ForStmt nfinal Visitable arg) {
1072        final ForStmt n2 = (ForStmtarg;
1073        if (!nodeEquals(n.getBody(), n2.getBody()))
1074            return false;
1075        if (!nodeEquals(n.getCompare(), n2.getCompare()))
1076            return false;
1077        if (!nodesEquals(n.getInitialization(), n2.getInitialization()))
1078            return false;
1079        if (!nodesEquals(n.getUpdate(), n2.getUpdate()))
1080            return false;
1081        if (!nodeEquals(n.getComment(), n2.getComment()))
1082            return false;
1083        return true;
1084    }
1085
1086    @Override
1087    public Boolean visit(final ThrowStmt nfinal Visitable arg) {
1088        final ThrowStmt n2 = (ThrowStmtarg;
1089        if (!nodeEquals(n.getExpression(), n2.getExpression()))
1090            return false;
1091        if (!nodeEquals(n.getComment(), n2.getComment()))
1092            return false;
1093        return true;
1094    }
1095
1096    @Override
1097    public Boolean visit(final SynchronizedStmt nfinal Visitable arg) {
1098        final SynchronizedStmt n2 = (SynchronizedStmtarg;
1099        if (!nodeEquals(n.getBody(), n2.getBody()))
1100            return false;
1101        if (!nodeEquals(n.getExpression(), n2.getExpression()))
1102            return false;
1103        if (!nodeEquals(n.getComment(), n2.getComment()))
1104            return false;
1105        return true;
1106    }
1107
1108    @Override
1109    public Boolean visit(final TryStmt nfinal Visitable arg) {
1110        final TryStmt n2 = (TryStmtarg;
1111        if (!nodesEquals(n.getCatchClauses(), n2.getCatchClauses()))
1112            return false;
1113        if (!nodeEquals(n.getFinallyBlock(), n2.getFinallyBlock()))
1114            return false;
1115        if (!nodesEquals(n.getResources(), n2.getResources()))
1116            return false;
1117        if (!nodeEquals(n.getTryBlock(), n2.getTryBlock()))
1118            return false;
1119        if (!nodeEquals(n.getComment(), n2.getComment()))
1120            return false;
1121        return true;
1122    }
1123
1124    @Override
1125    public Boolean visit(final CatchClause nfinal Visitable arg) {
1126        final CatchClause n2 = (CatchClausearg;
1127        if (!nodeEquals(n.getBody(), n2.getBody()))
1128            return false;
1129        if (!nodeEquals(n.getParameter(), n2.getParameter()))
1130            return false;
1131        if (!nodeEquals(n.getComment(), n2.getComment()))
1132            return false;
1133        return true;
1134    }
1135
1136    @Override
1137    public Boolean visit(final LambdaExpr nfinal Visitable arg) {
1138        final LambdaExpr n2 = (LambdaExprarg;
1139        if (!nodeEquals(n.getBody(), n2.getBody()))
1140            return false;
1141        if (!objEquals(n.isEnclosingParameters(), n2.isEnclosingParameters()))
1142            return false;
1143        if (!nodesEquals(n.getParameters(), n2.getParameters()))
1144            return false;
1145        if (!nodeEquals(n.getComment(), n2.getComment()))
1146            return false;
1147        return true;
1148    }
1149
1150    @Override
1151    public Boolean visit(final MethodReferenceExpr nfinal Visitable arg) {
1152        final MethodReferenceExpr n2 = (MethodReferenceExprarg;
1153        if (!objEquals(n.getIdentifier(), n2.getIdentifier()))
1154            return false;
1155        if (!nodeEquals(n.getScope(), n2.getScope()))
1156            return false;
1157        if (!nodesEquals(n.getTypeArguments(), n2.getTypeArguments()))
1158            return false;
1159        if (!nodeEquals(n.getComment(), n2.getComment()))
1160            return false;
1161        return true;
1162    }
1163
1164    @Override
1165    public Boolean visit(final TypeExpr nfinal Visitable arg) {
1166        final TypeExpr n2 = (TypeExprarg;
1167        if (!nodeEquals(n.getType(), n2.getType()))
1168            return false;
1169        if (!nodeEquals(n.getComment(), n2.getComment()))
1170            return false;
1171        return true;
1172    }
1173
1174    @Override
1175    public Boolean visit(final ImportDeclaration nfinal Visitable arg) {
1176        final ImportDeclaration n2 = (ImportDeclarationarg;
1177        if (!objEquals(n.isAsterisk(), n2.isAsterisk()))
1178            return false;
1179        if (!objEquals(n.isStatic(), n2.isStatic()))
1180            return false;
1181        if (!nodeEquals(n.getName(), n2.getName()))
1182            return false;
1183        if (!nodeEquals(n.getComment(), n2.getComment()))
1184            return false;
1185        return true;
1186    }
1187
1188    @Override
1189    public Boolean visit(NodeList nVisitable arg) {
1190        return nodesEquals((NodeList<Node>) n, (NodeList<Node>) arg);
1191    }
1192
1193    @Override
1194    public Boolean visit(final ModuleDeclaration nfinal Visitable arg) {
1195        final ModuleDeclaration n2 = (ModuleDeclarationarg;
1196        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
1197            return false;
1198        if (!nodesEquals(n.getDirectives(), n2.getDirectives()))
1199            return false;
1200        if (!objEquals(n.isOpen(), n2.isOpen()))
1201            return false;
1202        if (!nodeEquals(n.getName(), n2.getName()))
1203            return false;
1204        if (!nodeEquals(n.getComment(), n2.getComment()))
1205            return false;
1206        return true;
1207    }
1208
1209    @Override
1210    public Boolean visit(final ModuleRequiresDirective nfinal Visitable arg) {
1211        final ModuleRequiresDirective n2 = (ModuleRequiresDirectivearg;
1212        if (!nodesEquals(n.getModifiers(), n2.getModifiers()))
1213            return false;
1214        if (!nodeEquals(n.getName(), n2.getName()))
1215            return false;
1216        if (!nodeEquals(n.getComment(), n2.getComment()))
1217            return false;
1218        return true;
1219    }
1220
1221    @Override()
1222    public Boolean visit(final ModuleExportsDirective nfinal Visitable arg) {
1223        final ModuleExportsDirective n2 = (ModuleExportsDirectivearg;
1224        if (!nodesEquals(n.getModuleNames(), n2.getModuleNames()))
1225            return false;
1226        if (!nodeEquals(n.getName(), n2.getName()))
1227            return false;
1228        if (!nodeEquals(n.getComment(), n2.getComment()))
1229            return false;
1230        return true;
1231    }
1232
1233    @Override()
1234    public Boolean visit(final ModuleProvidesDirective nfinal Visitable arg) {
1235        final ModuleProvidesDirective n2 = (ModuleProvidesDirectivearg;
1236        if (!nodeEquals(n.getName(), n2.getName()))
1237            return false;
1238        if (!nodesEquals(n.getWith(), n2.getWith()))
1239            return false;
1240        if (!nodeEquals(n.getComment(), n2.getComment()))
1241            return false;
1242        return true;
1243    }
1244
1245    @Override()
1246    public Boolean visit(final ModuleUsesDirective nfinal Visitable arg) {
1247        final ModuleUsesDirective n2 = (ModuleUsesDirectivearg;
1248        if (!nodeEquals(n.getName(), n2.getName()))
1249            return false;
1250        if (!nodeEquals(n.getComment(), n2.getComment()))
1251            return false;
1252        return true;
1253    }
1254
1255    @Override
1256    public Boolean visit(final ModuleOpensDirective nfinal Visitable arg) {
1257        final ModuleOpensDirective n2 = (ModuleOpensDirectivearg;
1258        if (!nodesEquals(n.getModuleNames(), n2.getModuleNames()))
1259            return false;
1260        if (!nodeEquals(n.getName(), n2.getName()))
1261            return false;
1262        if (!nodeEquals(n.getComment(), n2.getComment()))
1263            return false;
1264        return true;
1265    }
1266
1267    @Override
1268    public Boolean visit(final UnparsableStmt nfinal Visitable arg) {
1269        final UnparsableStmt n2 = (UnparsableStmtarg;
1270        if (!nodeEquals(n.getComment(), n2.getComment()))
1271            return false;
1272        return true;
1273    }
1274
1275    @Override
1276    public Boolean visit(final ReceiverParameter nfinal Visitable arg) {
1277        final ReceiverParameter n2 = (ReceiverParameterarg;
1278        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
1279            return false;
1280        if (!nodeEquals(n.getName(), n2.getName()))
1281            return false;
1282        if (!nodeEquals(n.getType(), n2.getType()))
1283            return false;
1284        if (!nodeEquals(n.getComment(), n2.getComment()))
1285            return false;
1286        return true;
1287    }
1288
1289    @Override
1290    public Boolean visit(final VarType nfinal Visitable arg) {
1291        final VarType n2 = (VarTypearg;
1292        if (!nodesEquals(n.getAnnotations(), n2.getAnnotations()))
1293            return false;
1294        if (!nodeEquals(n.getComment(), n2.getComment()))
1295            return false;
1296        return true;
1297    }
1298
1299    @Override
1300    public Boolean visit(final Modifier nfinal Visitable arg) {
1301        final Modifier n2 = (Modifierarg;
1302        if (!objEquals(n.getKeyword(), n2.getKeyword()))
1303            return false;
1304        if (!nodeEquals(n.getComment(), n2.getComment()))
1305            return false;
1306        return true;
1307    }
1308
1309    @Override
1310    public Boolean visit(final SwitchExpr nfinal Visitable arg) {
1311        final SwitchExpr n2 = (SwitchExprarg;
1312        if (!nodesEquals(n.getEntries(), n2.getEntries()))
1313            return false;
1314        if (!nodeEquals(n.getSelector(), n2.getSelector()))
1315            return false;
1316        if (!nodeEquals(n.getComment(), n2.getComment()))
1317            return false;
1318        return true;
1319    }
1320
1321    @Override
1322    public Boolean visit(final YieldStmt nfinal Visitable arg) {
1323        final YieldStmt n2 = (YieldStmtarg;
1324        if (!nodeEquals(n.getExpression(), n2.getExpression()))
1325            return false;
1326        if (!nodeEquals(n.getComment(), n2.getComment()))
1327            return false;
1328        return true;
1329    }
1330
1331    @Override
1332    public Boolean visit(final TextBlockLiteralExpr nfinal Visitable arg) {
1333        final TextBlockLiteralExpr n2 = (TextBlockLiteralExprarg;
1334        if (!objEquals(n.getValue(), n2.getValue()))
1335            return false;
1336        if (!nodeEquals(n.getComment(), n2.getComment()))
1337            return false;
1338        return true;
1339    }
1340}
1341
MembersX
EqualsVisitor:nodesEquals
EqualsVisitor:visit
EqualsVisitor:objEquals
EqualsVisitor:visit:Block:n2
EqualsVisitor:equals
EqualsVisitor:EqualsVisitor
EqualsVisitor:nodeEquals
EqualsVisitor:SINGLETON
EqualsVisitor:commonNodeEquality
Members
X