Home | History | Annotate | Download | only in visitor
      1 /*
      2  * Copyright (C) 2007-2010 Jlio Vilmar Gesser.
      3  * Copyright (C) 2011, 2013-2016 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  */
     21 package com.github.javaparser.ast.visitor;
     22 
     23 import com.github.javaparser.ast.*;
     24 import com.github.javaparser.ast.body.*;
     25 import com.github.javaparser.ast.comments.*;
     26 import com.github.javaparser.ast.expr.*;
     27 import com.github.javaparser.ast.modules.*;
     28 import com.github.javaparser.ast.stmt.*;
     29 import com.github.javaparser.ast.type.*;
     30 import java.util.Optional;
     31 import javax.annotation.Generated;
     32 
     33 /**
     34  * A visitor that clones (copies) a node and all its children.
     35  */
     36 public class CloneVisitor implements GenericVisitor<Visitable, Object> {
     37 
     38     @Override
     39     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
     40     public Visitable visit(final CompilationUnit n, final Object arg) {
     41         NodeList<ImportDeclaration> imports = cloneList(n.getImports(), arg);
     42         ModuleDeclaration module = cloneNode(n.getModule(), arg);
     43         PackageDeclaration packageDeclaration = cloneNode(n.getPackageDeclaration(), arg);
     44         NodeList<TypeDeclaration<?>> types = cloneList(n.getTypes(), arg);
     45         Comment comment = cloneNode(n.getComment(), arg);
     46         CompilationUnit r = new CompilationUnit(n.getTokenRange().orElse(null), packageDeclaration, imports, types, module);
     47         r.setComment(comment);
     48         return r;
     49     }
     50 
     51     @Override
     52     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
     53     public Visitable visit(final PackageDeclaration n, final Object arg) {
     54         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
     55         Name name = cloneNode(n.getName(), arg);
     56         Comment comment = cloneNode(n.getComment(), arg);
     57         PackageDeclaration r = new PackageDeclaration(n.getTokenRange().orElse(null), annotations, name);
     58         r.setComment(comment);
     59         return r;
     60     }
     61 
     62     @Override
     63     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
     64     public Visitable visit(final TypeParameter n, final Object arg) {
     65         SimpleName name = cloneNode(n.getName(), arg);
     66         NodeList<ClassOrInterfaceType> typeBound = cloneList(n.getTypeBound(), arg);
     67         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
     68         Comment comment = cloneNode(n.getComment(), arg);
     69         TypeParameter r = new TypeParameter(n.getTokenRange().orElse(null), name, typeBound, annotations);
     70         r.setComment(comment);
     71         return r;
     72     }
     73 
     74     @Override
     75     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
     76     public Visitable visit(final LineComment n, final Object arg) {
     77         Comment comment = cloneNode(n.getComment(), arg);
     78         LineComment r = new LineComment(n.getTokenRange().orElse(null), n.getContent());
     79         r.setComment(comment);
     80         return r;
     81     }
     82 
     83     @Override
     84     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
     85     public Visitable visit(final BlockComment n, final Object arg) {
     86         Comment comment = cloneNode(n.getComment(), arg);
     87         BlockComment r = new BlockComment(n.getTokenRange().orElse(null), n.getContent());
     88         r.setComment(comment);
     89         return r;
     90     }
     91 
     92     @Override
     93     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
     94     public Visitable visit(final ClassOrInterfaceDeclaration n, final Object arg) {
     95         NodeList<ClassOrInterfaceType> extendedTypes = cloneList(n.getExtendedTypes(), arg);
     96         NodeList<ClassOrInterfaceType> implementedTypes = cloneList(n.getImplementedTypes(), arg);
     97         NodeList<TypeParameter> typeParameters = cloneList(n.getTypeParameters(), arg);
     98         NodeList<BodyDeclaration<?>> members = cloneList(n.getMembers(), arg);
     99         SimpleName name = cloneNode(n.getName(), arg);
    100         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    101         Comment comment = cloneNode(n.getComment(), arg);
    102         ClassOrInterfaceDeclaration r = new ClassOrInterfaceDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, n.isInterface(), name, typeParameters, extendedTypes, implementedTypes, members);
    103         r.setComment(comment);
    104         return r;
    105     }
    106 
    107     @Override
    108     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    109     public Visitable visit(final EnumDeclaration n, final Object arg) {
    110         NodeList<EnumConstantDeclaration> entries = cloneList(n.getEntries(), arg);
    111         NodeList<ClassOrInterfaceType> implementedTypes = cloneList(n.getImplementedTypes(), arg);
    112         NodeList<BodyDeclaration<?>> members = cloneList(n.getMembers(), arg);
    113         SimpleName name = cloneNode(n.getName(), arg);
    114         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    115         Comment comment = cloneNode(n.getComment(), arg);
    116         EnumDeclaration r = new EnumDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, name, implementedTypes, entries, members);
    117         r.setComment(comment);
    118         return r;
    119     }
    120 
    121     @Override
    122     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    123     public Visitable visit(final EnumConstantDeclaration n, final Object arg) {
    124         NodeList<Expression> arguments = cloneList(n.getArguments(), arg);
    125         NodeList<BodyDeclaration<?>> classBody = cloneList(n.getClassBody(), arg);
    126         SimpleName name = cloneNode(n.getName(), arg);
    127         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    128         Comment comment = cloneNode(n.getComment(), arg);
    129         EnumConstantDeclaration r = new EnumConstantDeclaration(n.getTokenRange().orElse(null), annotations, name, arguments, classBody);
    130         r.setComment(comment);
    131         return r;
    132     }
    133 
    134     @Override
    135     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    136     public Visitable visit(final AnnotationDeclaration n, final Object arg) {
    137         NodeList<BodyDeclaration<?>> members = cloneList(n.getMembers(), arg);
    138         SimpleName name = cloneNode(n.getName(), arg);
    139         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    140         Comment comment = cloneNode(n.getComment(), arg);
    141         AnnotationDeclaration r = new AnnotationDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, name, members);
    142         r.setComment(comment);
    143         return r;
    144     }
    145 
    146     @Override
    147     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    148     public Visitable visit(final AnnotationMemberDeclaration n, final Object arg) {
    149         Expression defaultValue = cloneNode(n.getDefaultValue(), arg);
    150         SimpleName name = cloneNode(n.getName(), arg);
    151         Type type = cloneNode(n.getType(), arg);
    152         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    153         Comment comment = cloneNode(n.getComment(), arg);
    154         AnnotationMemberDeclaration r = new AnnotationMemberDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, type, name, defaultValue);
    155         r.setComment(comment);
    156         return r;
    157     }
    158 
    159     @Override
    160     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    161     public Visitable visit(final FieldDeclaration n, final Object arg) {
    162         NodeList<VariableDeclarator> variables = cloneList(n.getVariables(), arg);
    163         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    164         Comment comment = cloneNode(n.getComment(), arg);
    165         FieldDeclaration r = new FieldDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, variables);
    166         r.setComment(comment);
    167         return r;
    168     }
    169 
    170     @Override
    171     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    172     public Visitable visit(final VariableDeclarator n, final Object arg) {
    173         Expression initializer = cloneNode(n.getInitializer(), arg);
    174         SimpleName name = cloneNode(n.getName(), arg);
    175         Type type = cloneNode(n.getType(), arg);
    176         Comment comment = cloneNode(n.getComment(), arg);
    177         VariableDeclarator r = new VariableDeclarator(n.getTokenRange().orElse(null), type, name, initializer);
    178         r.setComment(comment);
    179         return r;
    180     }
    181 
    182     @Override
    183     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    184     public Visitable visit(final ConstructorDeclaration n, final Object arg) {
    185         BlockStmt body = cloneNode(n.getBody(), arg);
    186         SimpleName name = cloneNode(n.getName(), arg);
    187         NodeList<Parameter> parameters = cloneList(n.getParameters(), arg);
    188         ReceiverParameter receiverParameter = cloneNode(n.getReceiverParameter(), arg);
    189         NodeList<ReferenceType> thrownExceptions = cloneList(n.getThrownExceptions(), arg);
    190         NodeList<TypeParameter> typeParameters = cloneList(n.getTypeParameters(), arg);
    191         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    192         Comment comment = cloneNode(n.getComment(), arg);
    193         ConstructorDeclaration r = new ConstructorDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, typeParameters, name, parameters, thrownExceptions, body, receiverParameter);
    194         r.setComment(comment);
    195         return r;
    196     }
    197 
    198     @Override
    199     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    200     public Visitable visit(final MethodDeclaration n, final Object arg) {
    201         BlockStmt body = cloneNode(n.getBody(), arg);
    202         Type type = cloneNode(n.getType(), arg);
    203         SimpleName name = cloneNode(n.getName(), arg);
    204         NodeList<Parameter> parameters = cloneList(n.getParameters(), arg);
    205         ReceiverParameter receiverParameter = cloneNode(n.getReceiverParameter(), arg);
    206         NodeList<ReferenceType> thrownExceptions = cloneList(n.getThrownExceptions(), arg);
    207         NodeList<TypeParameter> typeParameters = cloneList(n.getTypeParameters(), arg);
    208         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    209         Comment comment = cloneNode(n.getComment(), arg);
    210         MethodDeclaration r = new MethodDeclaration(n.getTokenRange().orElse(null), n.getModifiers(), annotations, typeParameters, type, name, parameters, thrownExceptions, body, receiverParameter);
    211         r.setComment(comment);
    212         return r;
    213     }
    214 
    215     @Override
    216     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    217     public Visitable visit(final Parameter n, final Object arg) {
    218         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    219         SimpleName name = cloneNode(n.getName(), arg);
    220         Type type = cloneNode(n.getType(), arg);
    221         NodeList<AnnotationExpr> varArgsAnnotations = cloneList(n.getVarArgsAnnotations(), arg);
    222         Comment comment = cloneNode(n.getComment(), arg);
    223         Parameter r = new Parameter(n.getTokenRange().orElse(null), n.getModifiers(), annotations, type, n.isVarArgs(), varArgsAnnotations, name);
    224         r.setComment(comment);
    225         return r;
    226     }
    227 
    228     @Override
    229     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    230     public Visitable visit(final InitializerDeclaration n, final Object arg) {
    231         BlockStmt body = cloneNode(n.getBody(), arg);
    232         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    233         Comment comment = cloneNode(n.getComment(), arg);
    234         InitializerDeclaration r = new InitializerDeclaration(n.getTokenRange().orElse(null), n.isStatic(), body);
    235         r.setComment(comment);
    236         return r;
    237     }
    238 
    239     @Override
    240     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    241     public Visitable visit(final JavadocComment n, final Object arg) {
    242         Comment comment = cloneNode(n.getComment(), arg);
    243         JavadocComment r = new JavadocComment(n.getTokenRange().orElse(null), n.getContent());
    244         r.setComment(comment);
    245         return r;
    246     }
    247 
    248     @Override
    249     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    250     public Visitable visit(final ClassOrInterfaceType n, final Object arg) {
    251         SimpleName name = cloneNode(n.getName(), arg);
    252         ClassOrInterfaceType scope = cloneNode(n.getScope(), arg);
    253         NodeList<Type> typeArguments = cloneList(n.getTypeArguments().orElse(null), arg);
    254         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    255         Comment comment = cloneNode(n.getComment(), arg);
    256         ClassOrInterfaceType r = new ClassOrInterfaceType(n.getTokenRange().orElse(null), scope, name, typeArguments, annotations);
    257         r.setComment(comment);
    258         return r;
    259     }
    260 
    261     @Override
    262     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    263     public Visitable visit(final PrimitiveType n, final Object arg) {
    264         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    265         Comment comment = cloneNode(n.getComment(), arg);
    266         PrimitiveType r = new PrimitiveType(n.getTokenRange().orElse(null), n.getType(), annotations);
    267         r.setComment(comment);
    268         return r;
    269     }
    270 
    271     @Override
    272     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    273     public Visitable visit(final ArrayType n, final Object arg) {
    274         Type componentType = cloneNode(n.getComponentType(), arg);
    275         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    276         Comment comment = cloneNode(n.getComment(), arg);
    277         ArrayType r = new ArrayType(n.getTokenRange().orElse(null), componentType, n.getOrigin(), annotations);
    278         r.setComment(comment);
    279         return r;
    280     }
    281 
    282     @Override
    283     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    284     public Visitable visit(final ArrayCreationLevel n, final Object arg) {
    285         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    286         Expression dimension = cloneNode(n.getDimension(), arg);
    287         Comment comment = cloneNode(n.getComment(), arg);
    288         ArrayCreationLevel r = new ArrayCreationLevel(n.getTokenRange().orElse(null), dimension, annotations);
    289         r.setComment(comment);
    290         return r;
    291     }
    292 
    293     @Override
    294     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    295     public Visitable visit(final IntersectionType n, final Object arg) {
    296         NodeList<ReferenceType> elements = cloneList(n.getElements(), arg);
    297         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    298         Comment comment = cloneNode(n.getComment(), arg);
    299         IntersectionType r = new IntersectionType(n.getTokenRange().orElse(null), elements);
    300         r.setComment(comment);
    301         return r;
    302     }
    303 
    304     @Override
    305     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    306     public Visitable visit(final UnionType n, final Object arg) {
    307         NodeList<ReferenceType> elements = cloneList(n.getElements(), arg);
    308         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    309         Comment comment = cloneNode(n.getComment(), arg);
    310         UnionType r = new UnionType(n.getTokenRange().orElse(null), elements);
    311         r.setComment(comment);
    312         return r;
    313     }
    314 
    315     @Override
    316     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    317     public Visitable visit(final VoidType n, final Object arg) {
    318         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    319         Comment comment = cloneNode(n.getComment(), arg);
    320         VoidType r = new VoidType(n.getTokenRange().orElse(null));
    321         r.setComment(comment);
    322         return r;
    323     }
    324 
    325     @Override
    326     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    327     public Visitable visit(final WildcardType n, final Object arg) {
    328         ReferenceType extendedType = cloneNode(n.getExtendedType(), arg);
    329         ReferenceType superType = cloneNode(n.getSuperType(), arg);
    330         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    331         Comment comment = cloneNode(n.getComment(), arg);
    332         WildcardType r = new WildcardType(n.getTokenRange().orElse(null), extendedType, superType, annotations);
    333         r.setComment(comment);
    334         return r;
    335     }
    336 
    337     @Override
    338     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    339     public Visitable visit(final UnknownType n, final Object arg) {
    340         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    341         Comment comment = cloneNode(n.getComment(), arg);
    342         UnknownType r = new UnknownType(n.getTokenRange().orElse(null));
    343         r.setComment(comment);
    344         return r;
    345     }
    346 
    347     @Override
    348     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    349     public Visitable visit(final ArrayAccessExpr n, final Object arg) {
    350         Expression index = cloneNode(n.getIndex(), arg);
    351         Expression name = cloneNode(n.getName(), arg);
    352         Comment comment = cloneNode(n.getComment(), arg);
    353         ArrayAccessExpr r = new ArrayAccessExpr(n.getTokenRange().orElse(null), name, index);
    354         r.setComment(comment);
    355         return r;
    356     }
    357 
    358     @Override
    359     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    360     public Visitable visit(final ArrayCreationExpr n, final Object arg) {
    361         Type elementType = cloneNode(n.getElementType(), arg);
    362         ArrayInitializerExpr initializer = cloneNode(n.getInitializer(), arg);
    363         NodeList<ArrayCreationLevel> levels = cloneList(n.getLevels(), arg);
    364         Comment comment = cloneNode(n.getComment(), arg);
    365         ArrayCreationExpr r = new ArrayCreationExpr(n.getTokenRange().orElse(null), elementType, levels, initializer);
    366         r.setComment(comment);
    367         return r;
    368     }
    369 
    370     @Override
    371     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    372     public Visitable visit(final ArrayInitializerExpr n, final Object arg) {
    373         NodeList<Expression> values = cloneList(n.getValues(), arg);
    374         Comment comment = cloneNode(n.getComment(), arg);
    375         ArrayInitializerExpr r = new ArrayInitializerExpr(n.getTokenRange().orElse(null), values);
    376         r.setComment(comment);
    377         return r;
    378     }
    379 
    380     @Override
    381     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    382     public Visitable visit(final AssignExpr n, final Object arg) {
    383         Expression target = cloneNode(n.getTarget(), arg);
    384         Expression value = cloneNode(n.getValue(), arg);
    385         Comment comment = cloneNode(n.getComment(), arg);
    386         AssignExpr r = new AssignExpr(n.getTokenRange().orElse(null), target, value, n.getOperator());
    387         r.setComment(comment);
    388         return r;
    389     }
    390 
    391     @Override
    392     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    393     public Visitable visit(final BinaryExpr n, final Object arg) {
    394         Expression left = cloneNode(n.getLeft(), arg);
    395         Expression right = cloneNode(n.getRight(), arg);
    396         Comment comment = cloneNode(n.getComment(), arg);
    397         BinaryExpr r = new BinaryExpr(n.getTokenRange().orElse(null), left, right, n.getOperator());
    398         r.setComment(comment);
    399         return r;
    400     }
    401 
    402     @Override
    403     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    404     public Visitable visit(final CastExpr n, final Object arg) {
    405         Expression expression = cloneNode(n.getExpression(), arg);
    406         Type type = cloneNode(n.getType(), arg);
    407         Comment comment = cloneNode(n.getComment(), arg);
    408         CastExpr r = new CastExpr(n.getTokenRange().orElse(null), type, expression);
    409         r.setComment(comment);
    410         return r;
    411     }
    412 
    413     @Override
    414     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    415     public Visitable visit(final ClassExpr n, final Object arg) {
    416         Type type = cloneNode(n.getType(), arg);
    417         Comment comment = cloneNode(n.getComment(), arg);
    418         ClassExpr r = new ClassExpr(n.getTokenRange().orElse(null), type);
    419         r.setComment(comment);
    420         return r;
    421     }
    422 
    423     @Override
    424     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    425     public Visitable visit(final ConditionalExpr n, final Object arg) {
    426         Expression condition = cloneNode(n.getCondition(), arg);
    427         Expression elseExpr = cloneNode(n.getElseExpr(), arg);
    428         Expression thenExpr = cloneNode(n.getThenExpr(), arg);
    429         Comment comment = cloneNode(n.getComment(), arg);
    430         ConditionalExpr r = new ConditionalExpr(n.getTokenRange().orElse(null), condition, thenExpr, elseExpr);
    431         r.setComment(comment);
    432         return r;
    433     }
    434 
    435     @Override
    436     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    437     public Visitable visit(final EnclosedExpr n, final Object arg) {
    438         Expression inner = cloneNode(n.getInner(), arg);
    439         Comment comment = cloneNode(n.getComment(), arg);
    440         EnclosedExpr r = new EnclosedExpr(n.getTokenRange().orElse(null), inner);
    441         r.setComment(comment);
    442         return r;
    443     }
    444 
    445     @Override
    446     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    447     public Visitable visit(final FieldAccessExpr n, final Object arg) {
    448         SimpleName name = cloneNode(n.getName(), arg);
    449         Expression scope = cloneNode(n.getScope(), arg);
    450         NodeList<Type> typeArguments = cloneList(n.getTypeArguments().orElse(null), arg);
    451         Comment comment = cloneNode(n.getComment(), arg);
    452         FieldAccessExpr r = new FieldAccessExpr(n.getTokenRange().orElse(null), scope, typeArguments, name);
    453         r.setComment(comment);
    454         return r;
    455     }
    456 
    457     @Override
    458     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    459     public Visitable visit(final InstanceOfExpr n, final Object arg) {
    460         Expression expression = cloneNode(n.getExpression(), arg);
    461         ReferenceType type = cloneNode(n.getType(), arg);
    462         Comment comment = cloneNode(n.getComment(), arg);
    463         InstanceOfExpr r = new InstanceOfExpr(n.getTokenRange().orElse(null), expression, type);
    464         r.setComment(comment);
    465         return r;
    466     }
    467 
    468     @Override
    469     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    470     public Visitable visit(final StringLiteralExpr n, final Object arg) {
    471         Comment comment = cloneNode(n.getComment(), arg);
    472         StringLiteralExpr r = new StringLiteralExpr(n.getTokenRange().orElse(null), n.getValue());
    473         r.setComment(comment);
    474         return r;
    475     }
    476 
    477     @Override
    478     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    479     public Visitable visit(final IntegerLiteralExpr n, final Object arg) {
    480         Comment comment = cloneNode(n.getComment(), arg);
    481         IntegerLiteralExpr r = new IntegerLiteralExpr(n.getTokenRange().orElse(null), n.getValue());
    482         r.setComment(comment);
    483         return r;
    484     }
    485 
    486     @Override
    487     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    488     public Visitable visit(final LongLiteralExpr n, final Object arg) {
    489         Comment comment = cloneNode(n.getComment(), arg);
    490         LongLiteralExpr r = new LongLiteralExpr(n.getTokenRange().orElse(null), n.getValue());
    491         r.setComment(comment);
    492         return r;
    493     }
    494 
    495     @Override
    496     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    497     public Visitable visit(final CharLiteralExpr n, final Object arg) {
    498         Comment comment = cloneNode(n.getComment(), arg);
    499         CharLiteralExpr r = new CharLiteralExpr(n.getTokenRange().orElse(null), n.getValue());
    500         r.setComment(comment);
    501         return r;
    502     }
    503 
    504     @Override
    505     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    506     public Visitable visit(final DoubleLiteralExpr n, final Object arg) {
    507         Comment comment = cloneNode(n.getComment(), arg);
    508         DoubleLiteralExpr r = new DoubleLiteralExpr(n.getTokenRange().orElse(null), n.getValue());
    509         r.setComment(comment);
    510         return r;
    511     }
    512 
    513     @Override
    514     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    515     public Visitable visit(final BooleanLiteralExpr n, final Object arg) {
    516         Comment comment = cloneNode(n.getComment(), arg);
    517         BooleanLiteralExpr r = new BooleanLiteralExpr(n.getTokenRange().orElse(null), n.getValue());
    518         r.setComment(comment);
    519         return r;
    520     }
    521 
    522     @Override
    523     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    524     public Visitable visit(final NullLiteralExpr n, final Object arg) {
    525         Comment comment = cloneNode(n.getComment(), arg);
    526         NullLiteralExpr r = new NullLiteralExpr(n.getTokenRange().orElse(null));
    527         r.setComment(comment);
    528         return r;
    529     }
    530 
    531     @Override
    532     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    533     public Visitable visit(final MethodCallExpr n, final Object arg) {
    534         NodeList<Expression> arguments = cloneList(n.getArguments(), arg);
    535         SimpleName name = cloneNode(n.getName(), arg);
    536         Expression scope = cloneNode(n.getScope(), arg);
    537         NodeList<Type> typeArguments = cloneList(n.getTypeArguments().orElse(null), arg);
    538         Comment comment = cloneNode(n.getComment(), arg);
    539         MethodCallExpr r = new MethodCallExpr(n.getTokenRange().orElse(null), scope, typeArguments, name, arguments);
    540         r.setComment(comment);
    541         return r;
    542     }
    543 
    544     @Override
    545     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    546     public Visitable visit(final NameExpr n, final Object arg) {
    547         SimpleName name = cloneNode(n.getName(), arg);
    548         Comment comment = cloneNode(n.getComment(), arg);
    549         NameExpr r = new NameExpr(n.getTokenRange().orElse(null), name);
    550         r.setComment(comment);
    551         return r;
    552     }
    553 
    554     @Override
    555     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    556     public Visitable visit(final ObjectCreationExpr n, final Object arg) {
    557         NodeList<BodyDeclaration<?>> anonymousClassBody = cloneList(n.getAnonymousClassBody().orElse(null), arg);
    558         NodeList<Expression> arguments = cloneList(n.getArguments(), arg);
    559         Expression scope = cloneNode(n.getScope(), arg);
    560         ClassOrInterfaceType type = cloneNode(n.getType(), arg);
    561         NodeList<Type> typeArguments = cloneList(n.getTypeArguments().orElse(null), arg);
    562         Comment comment = cloneNode(n.getComment(), arg);
    563         ObjectCreationExpr r = new ObjectCreationExpr(n.getTokenRange().orElse(null), scope, type, typeArguments, arguments, anonymousClassBody);
    564         r.setComment(comment);
    565         return r;
    566     }
    567 
    568     @Override
    569     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    570     public Visitable visit(final Name n, final Object arg) {
    571         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    572         Name qualifier = cloneNode(n.getQualifier(), arg);
    573         Comment comment = cloneNode(n.getComment(), arg);
    574         Name r = new Name(n.getTokenRange().orElse(null), qualifier, n.getIdentifier(), annotations);
    575         r.setComment(comment);
    576         return r;
    577     }
    578 
    579     @Override
    580     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    581     public Visitable visit(final SimpleName n, final Object arg) {
    582         Comment comment = cloneNode(n.getComment(), arg);
    583         SimpleName r = new SimpleName(n.getTokenRange().orElse(null), n.getIdentifier());
    584         r.setComment(comment);
    585         return r;
    586     }
    587 
    588     @Override
    589     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    590     public Visitable visit(final ThisExpr n, final Object arg) {
    591         Expression classExpr = cloneNode(n.getClassExpr(), arg);
    592         Comment comment = cloneNode(n.getComment(), arg);
    593         ThisExpr r = new ThisExpr(n.getTokenRange().orElse(null), classExpr);
    594         r.setComment(comment);
    595         return r;
    596     }
    597 
    598     @Override
    599     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    600     public Visitable visit(final SuperExpr n, final Object arg) {
    601         Expression classExpr = cloneNode(n.getClassExpr(), arg);
    602         Comment comment = cloneNode(n.getComment(), arg);
    603         SuperExpr r = new SuperExpr(n.getTokenRange().orElse(null), classExpr);
    604         r.setComment(comment);
    605         return r;
    606     }
    607 
    608     @Override
    609     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    610     public Visitable visit(final UnaryExpr n, final Object arg) {
    611         Expression expression = cloneNode(n.getExpression(), arg);
    612         Comment comment = cloneNode(n.getComment(), arg);
    613         UnaryExpr r = new UnaryExpr(n.getTokenRange().orElse(null), expression, n.getOperator());
    614         r.setComment(comment);
    615         return r;
    616     }
    617 
    618     @Override
    619     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    620     public Visitable visit(final VariableDeclarationExpr n, final Object arg) {
    621         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    622         NodeList<VariableDeclarator> variables = cloneList(n.getVariables(), arg);
    623         Comment comment = cloneNode(n.getComment(), arg);
    624         VariableDeclarationExpr r = new VariableDeclarationExpr(n.getTokenRange().orElse(null), n.getModifiers(), annotations, variables);
    625         r.setComment(comment);
    626         return r;
    627     }
    628 
    629     @Override
    630     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    631     public Visitable visit(final MarkerAnnotationExpr n, final Object arg) {
    632         Name name = cloneNode(n.getName(), arg);
    633         Comment comment = cloneNode(n.getComment(), arg);
    634         MarkerAnnotationExpr r = new MarkerAnnotationExpr(n.getTokenRange().orElse(null), name);
    635         r.setComment(comment);
    636         return r;
    637     }
    638 
    639     @Override
    640     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    641     public Visitable visit(final SingleMemberAnnotationExpr n, final Object arg) {
    642         Expression memberValue = cloneNode(n.getMemberValue(), arg);
    643         Name name = cloneNode(n.getName(), arg);
    644         Comment comment = cloneNode(n.getComment(), arg);
    645         SingleMemberAnnotationExpr r = new SingleMemberAnnotationExpr(n.getTokenRange().orElse(null), name, memberValue);
    646         r.setComment(comment);
    647         return r;
    648     }
    649 
    650     @Override
    651     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    652     public Visitable visit(final NormalAnnotationExpr n, final Object arg) {
    653         NodeList<MemberValuePair> pairs = cloneList(n.getPairs(), arg);
    654         Name name = cloneNode(n.getName(), arg);
    655         Comment comment = cloneNode(n.getComment(), arg);
    656         NormalAnnotationExpr r = new NormalAnnotationExpr(n.getTokenRange().orElse(null), name, pairs);
    657         r.setComment(comment);
    658         return r;
    659     }
    660 
    661     @Override
    662     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    663     public Visitable visit(final MemberValuePair n, final Object arg) {
    664         SimpleName name = cloneNode(n.getName(), arg);
    665         Expression value = cloneNode(n.getValue(), arg);
    666         Comment comment = cloneNode(n.getComment(), arg);
    667         MemberValuePair r = new MemberValuePair(n.getTokenRange().orElse(null), name, value);
    668         r.setComment(comment);
    669         return r;
    670     }
    671 
    672     @Override
    673     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    674     public Visitable visit(final ExplicitConstructorInvocationStmt n, final Object arg) {
    675         NodeList<Expression> arguments = cloneList(n.getArguments(), arg);
    676         Expression expression = cloneNode(n.getExpression(), arg);
    677         NodeList<Type> typeArguments = cloneList(n.getTypeArguments().orElse(null), arg);
    678         Comment comment = cloneNode(n.getComment(), arg);
    679         ExplicitConstructorInvocationStmt r = new ExplicitConstructorInvocationStmt(n.getTokenRange().orElse(null), typeArguments, n.isThis(), expression, arguments);
    680         r.setComment(comment);
    681         return r;
    682     }
    683 
    684     @Override
    685     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    686     public Visitable visit(final LocalClassDeclarationStmt n, final Object arg) {
    687         ClassOrInterfaceDeclaration classDeclaration = cloneNode(n.getClassDeclaration(), arg);
    688         Comment comment = cloneNode(n.getComment(), arg);
    689         LocalClassDeclarationStmt r = new LocalClassDeclarationStmt(n.getTokenRange().orElse(null), classDeclaration);
    690         r.setComment(comment);
    691         return r;
    692     }
    693 
    694     @Override
    695     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    696     public Visitable visit(final AssertStmt n, final Object arg) {
    697         Expression check = cloneNode(n.getCheck(), arg);
    698         Expression message = cloneNode(n.getMessage(), arg);
    699         Comment comment = cloneNode(n.getComment(), arg);
    700         AssertStmt r = new AssertStmt(n.getTokenRange().orElse(null), check, message);
    701         r.setComment(comment);
    702         return r;
    703     }
    704 
    705     @Override
    706     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    707     public Visitable visit(final BlockStmt n, final Object arg) {
    708         NodeList<Statement> statements = cloneList(n.getStatements(), arg);
    709         Comment comment = cloneNode(n.getComment(), arg);
    710         BlockStmt r = new BlockStmt(n.getTokenRange().orElse(null), statements);
    711         r.setComment(comment);
    712         return r;
    713     }
    714 
    715     @Override
    716     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    717     public Visitable visit(final LabeledStmt n, final Object arg) {
    718         SimpleName label = cloneNode(n.getLabel(), arg);
    719         Statement statement = cloneNode(n.getStatement(), arg);
    720         Comment comment = cloneNode(n.getComment(), arg);
    721         LabeledStmt r = new LabeledStmt(n.getTokenRange().orElse(null), label, statement);
    722         r.setComment(comment);
    723         return r;
    724     }
    725 
    726     @Override
    727     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    728     public Visitable visit(final EmptyStmt n, final Object arg) {
    729         Comment comment = cloneNode(n.getComment(), arg);
    730         EmptyStmt r = new EmptyStmt(n.getTokenRange().orElse(null));
    731         r.setComment(comment);
    732         return r;
    733     }
    734 
    735     @Override
    736     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    737     public Visitable visit(final ExpressionStmt n, final Object arg) {
    738         Expression expression = cloneNode(n.getExpression(), arg);
    739         Comment comment = cloneNode(n.getComment(), arg);
    740         ExpressionStmt r = new ExpressionStmt(n.getTokenRange().orElse(null), expression);
    741         r.setComment(comment);
    742         return r;
    743     }
    744 
    745     @Override
    746     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    747     public Visitable visit(final SwitchStmt n, final Object arg) {
    748         NodeList<SwitchEntryStmt> entries = cloneList(n.getEntries(), arg);
    749         Expression selector = cloneNode(n.getSelector(), arg);
    750         Comment comment = cloneNode(n.getComment(), arg);
    751         SwitchStmt r = new SwitchStmt(n.getTokenRange().orElse(null), selector, entries);
    752         r.setComment(comment);
    753         return r;
    754     }
    755 
    756     @Override
    757     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    758     public Visitable visit(final SwitchEntryStmt n, final Object arg) {
    759         Expression label = cloneNode(n.getLabel(), arg);
    760         NodeList<Statement> statements = cloneList(n.getStatements(), arg);
    761         Comment comment = cloneNode(n.getComment(), arg);
    762         SwitchEntryStmt r = new SwitchEntryStmt(n.getTokenRange().orElse(null), label, statements);
    763         r.setComment(comment);
    764         return r;
    765     }
    766 
    767     @Override
    768     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    769     public Visitable visit(final BreakStmt n, final Object arg) {
    770         SimpleName label = cloneNode(n.getLabel(), arg);
    771         Comment comment = cloneNode(n.getComment(), arg);
    772         BreakStmt r = new BreakStmt(n.getTokenRange().orElse(null), label);
    773         r.setComment(comment);
    774         return r;
    775     }
    776 
    777     @Override
    778     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    779     public Visitable visit(final ReturnStmt n, final Object arg) {
    780         Expression expression = cloneNode(n.getExpression(), arg);
    781         Comment comment = cloneNode(n.getComment(), arg);
    782         ReturnStmt r = new ReturnStmt(n.getTokenRange().orElse(null), expression);
    783         r.setComment(comment);
    784         return r;
    785     }
    786 
    787     @Override
    788     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    789     public Visitable visit(final IfStmt n, final Object arg) {
    790         Expression condition = cloneNode(n.getCondition(), arg);
    791         Statement elseStmt = cloneNode(n.getElseStmt(), arg);
    792         Statement thenStmt = cloneNode(n.getThenStmt(), arg);
    793         Comment comment = cloneNode(n.getComment(), arg);
    794         IfStmt r = new IfStmt(n.getTokenRange().orElse(null), condition, thenStmt, elseStmt);
    795         r.setComment(comment);
    796         return r;
    797     }
    798 
    799     @Override
    800     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    801     public Visitable visit(final WhileStmt n, final Object arg) {
    802         Statement body = cloneNode(n.getBody(), arg);
    803         Expression condition = cloneNode(n.getCondition(), arg);
    804         Comment comment = cloneNode(n.getComment(), arg);
    805         WhileStmt r = new WhileStmt(n.getTokenRange().orElse(null), condition, body);
    806         r.setComment(comment);
    807         return r;
    808     }
    809 
    810     @Override
    811     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    812     public Visitable visit(final ContinueStmt n, final Object arg) {
    813         SimpleName label = cloneNode(n.getLabel(), arg);
    814         Comment comment = cloneNode(n.getComment(), arg);
    815         ContinueStmt r = new ContinueStmt(n.getTokenRange().orElse(null), label);
    816         r.setComment(comment);
    817         return r;
    818     }
    819 
    820     @Override
    821     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    822     public Visitable visit(final DoStmt n, final Object arg) {
    823         Statement body = cloneNode(n.getBody(), arg);
    824         Expression condition = cloneNode(n.getCondition(), arg);
    825         Comment comment = cloneNode(n.getComment(), arg);
    826         DoStmt r = new DoStmt(n.getTokenRange().orElse(null), body, condition);
    827         r.setComment(comment);
    828         return r;
    829     }
    830 
    831     @Override
    832     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    833     public Visitable visit(final ForeachStmt n, final Object arg) {
    834         Statement body = cloneNode(n.getBody(), arg);
    835         Expression iterable = cloneNode(n.getIterable(), arg);
    836         VariableDeclarationExpr variable = cloneNode(n.getVariable(), arg);
    837         Comment comment = cloneNode(n.getComment(), arg);
    838         ForeachStmt r = new ForeachStmt(n.getTokenRange().orElse(null), variable, iterable, body);
    839         r.setComment(comment);
    840         return r;
    841     }
    842 
    843     @Override
    844     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    845     public Visitable visit(final ForStmt n, final Object arg) {
    846         Statement body = cloneNode(n.getBody(), arg);
    847         Expression compare = cloneNode(n.getCompare(), arg);
    848         NodeList<Expression> initialization = cloneList(n.getInitialization(), arg);
    849         NodeList<Expression> update = cloneList(n.getUpdate(), arg);
    850         Comment comment = cloneNode(n.getComment(), arg);
    851         ForStmt r = new ForStmt(n.getTokenRange().orElse(null), initialization, compare, update, body);
    852         r.setComment(comment);
    853         return r;
    854     }
    855 
    856     @Override
    857     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    858     public Visitable visit(final ThrowStmt n, final Object arg) {
    859         Expression expression = cloneNode(n.getExpression(), arg);
    860         Comment comment = cloneNode(n.getComment(), arg);
    861         ThrowStmt r = new ThrowStmt(n.getTokenRange().orElse(null), expression);
    862         r.setComment(comment);
    863         return r;
    864     }
    865 
    866     @Override
    867     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    868     public Visitable visit(final SynchronizedStmt n, final Object arg) {
    869         BlockStmt body = cloneNode(n.getBody(), arg);
    870         Expression expression = cloneNode(n.getExpression(), arg);
    871         Comment comment = cloneNode(n.getComment(), arg);
    872         SynchronizedStmt r = new SynchronizedStmt(n.getTokenRange().orElse(null), expression, body);
    873         r.setComment(comment);
    874         return r;
    875     }
    876 
    877     @Override
    878     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    879     public Visitable visit(final TryStmt n, final Object arg) {
    880         NodeList<CatchClause> catchClauses = cloneList(n.getCatchClauses(), arg);
    881         BlockStmt finallyBlock = cloneNode(n.getFinallyBlock(), arg);
    882         NodeList<Expression> resources = cloneList(n.getResources(), arg);
    883         BlockStmt tryBlock = cloneNode(n.getTryBlock(), arg);
    884         Comment comment = cloneNode(n.getComment(), arg);
    885         TryStmt r = new TryStmt(n.getTokenRange().orElse(null), resources, tryBlock, catchClauses, finallyBlock);
    886         r.setComment(comment);
    887         return r;
    888     }
    889 
    890     @Override
    891     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    892     public Visitable visit(final CatchClause n, final Object arg) {
    893         BlockStmt body = cloneNode(n.getBody(), arg);
    894         Parameter parameter = cloneNode(n.getParameter(), arg);
    895         Comment comment = cloneNode(n.getComment(), arg);
    896         CatchClause r = new CatchClause(n.getTokenRange().orElse(null), parameter, body);
    897         r.setComment(comment);
    898         return r;
    899     }
    900 
    901     @Override
    902     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    903     public Visitable visit(final LambdaExpr n, final Object arg) {
    904         Statement body = cloneNode(n.getBody(), arg);
    905         NodeList<Parameter> parameters = cloneList(n.getParameters(), arg);
    906         Comment comment = cloneNode(n.getComment(), arg);
    907         LambdaExpr r = new LambdaExpr(n.getTokenRange().orElse(null), parameters, body, n.isEnclosingParameters());
    908         r.setComment(comment);
    909         return r;
    910     }
    911 
    912     @Override
    913     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    914     public Visitable visit(final MethodReferenceExpr n, final Object arg) {
    915         Expression scope = cloneNode(n.getScope(), arg);
    916         NodeList<Type> typeArguments = cloneList(n.getTypeArguments().orElse(null), arg);
    917         Comment comment = cloneNode(n.getComment(), arg);
    918         MethodReferenceExpr r = new MethodReferenceExpr(n.getTokenRange().orElse(null), scope, typeArguments, n.getIdentifier());
    919         r.setComment(comment);
    920         return r;
    921     }
    922 
    923     @Override
    924     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    925     public Visitable visit(final TypeExpr n, final Object arg) {
    926         Type type = cloneNode(n.getType(), arg);
    927         Comment comment = cloneNode(n.getComment(), arg);
    928         TypeExpr r = new TypeExpr(n.getTokenRange().orElse(null), type);
    929         r.setComment(comment);
    930         return r;
    931     }
    932 
    933     @Override
    934     public Visitable visit(NodeList n, Object arg) {
    935         NodeList<Node> newNodes = new NodeList<>();
    936         for (Object node : n) {
    937             Node resultNode = (Node) ((Node) node).accept(this, arg);
    938             if (resultNode != null) {
    939                 newNodes.add(resultNode);
    940             }
    941         }
    942         return newNodes;
    943     }
    944 
    945     @Override
    946     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    947     public Node visit(final ImportDeclaration n, final Object arg) {
    948         Name name = cloneNode(n.getName(), arg);
    949         Comment comment = cloneNode(n.getComment(), arg);
    950         ImportDeclaration r = new ImportDeclaration(n.getTokenRange().orElse(null), name, n.isStatic(), n.isAsterisk());
    951         r.setComment(comment);
    952         return r;
    953     }
    954 
    955     @Override
    956     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    957     public Visitable visit(final ModuleDeclaration n, final Object arg) {
    958         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
    959         NodeList<ModuleStmt> moduleStmts = cloneList(n.getModuleStmts(), arg);
    960         Name name = cloneNode(n.getName(), arg);
    961         Comment comment = cloneNode(n.getComment(), arg);
    962         ModuleDeclaration r = new ModuleDeclaration(n.getTokenRange().orElse(null), annotations, name, n.isOpen(), moduleStmts);
    963         r.setComment(comment);
    964         return r;
    965     }
    966 
    967     @Override
    968     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
    969     public Visitable visit(final ModuleRequiresStmt n, final Object arg) {
    970         Name name = cloneNode(n.getName(), arg);
    971         Comment comment = cloneNode(n.getComment(), arg);
    972         ModuleRequiresStmt r = new ModuleRequiresStmt(n.getTokenRange().orElse(null), n.getModifiers(), name);
    973         r.setComment(comment);
    974         return r;
    975     }
    976 
    977     @SuppressWarnings("unchecked")
    978     protected <T extends Node> T cloneNode(Optional<T> node, Object arg) {
    979         if (!node.isPresent()) {
    980             return null;
    981         }
    982         Node r = (Node) node.get().accept(this, arg);
    983         if (r == null) {
    984             return null;
    985         }
    986         return (T) r;
    987     }
    988 
    989     @SuppressWarnings("unchecked")
    990     protected <T extends Node> T cloneNode(T node, Object arg) {
    991         if (node == null) {
    992             return null;
    993         }
    994         Node r = (Node) node.accept(this, arg);
    995         if (r == null) {
    996             return null;
    997         }
    998         return (T) r;
    999     }
   1000 
   1001     private <N extends Node> NodeList<N> cloneList(NodeList<N> list, Object arg) {
   1002         if (list == null) {
   1003             return null;
   1004         }
   1005         return (NodeList<N>) list.accept(this, arg);
   1006     }
   1007 
   1008     @Override
   1009     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
   1010     public Visitable visit(final ModuleExportsStmt n, final Object arg) {
   1011         NodeList<Name> moduleNames = cloneList(n.getModuleNames(), arg);
   1012         Name name = cloneNode(n.getName(), arg);
   1013         Comment comment = cloneNode(n.getComment(), arg);
   1014         ModuleExportsStmt r = new ModuleExportsStmt(n.getTokenRange().orElse(null), name, moduleNames);
   1015         r.setComment(comment);
   1016         return r;
   1017     }
   1018 
   1019     @Override
   1020     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
   1021     public Visitable visit(final ModuleProvidesStmt n, final Object arg) {
   1022         Type type = cloneNode(n.getType(), arg);
   1023         NodeList<Type> withTypes = cloneList(n.getWithTypes(), arg);
   1024         Comment comment = cloneNode(n.getComment(), arg);
   1025         ModuleProvidesStmt r = new ModuleProvidesStmt(n.getTokenRange().orElse(null), type, withTypes);
   1026         r.setComment(comment);
   1027         return r;
   1028     }
   1029 
   1030     @Override
   1031     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
   1032     public Visitable visit(final ModuleUsesStmt n, final Object arg) {
   1033         Type type = cloneNode(n.getType(), arg);
   1034         Comment comment = cloneNode(n.getComment(), arg);
   1035         ModuleUsesStmt r = new ModuleUsesStmt(n.getTokenRange().orElse(null), type);
   1036         r.setComment(comment);
   1037         return r;
   1038     }
   1039 
   1040     @Override
   1041     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
   1042     public Visitable visit(final ModuleOpensStmt n, final Object arg) {
   1043         NodeList<Name> moduleNames = cloneList(n.getModuleNames(), arg);
   1044         Name name = cloneNode(n.getName(), arg);
   1045         Comment comment = cloneNode(n.getComment(), arg);
   1046         ModuleOpensStmt r = new ModuleOpensStmt(n.getTokenRange().orElse(null), name, moduleNames);
   1047         r.setComment(comment);
   1048         return r;
   1049     }
   1050 
   1051     @Override
   1052     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
   1053     public Visitable visit(final UnparsableStmt n, final Object arg) {
   1054         Comment comment = cloneNode(n.getComment(), arg);
   1055         UnparsableStmt r = new UnparsableStmt(n.getTokenRange().orElse(null));
   1056         r.setComment(comment);
   1057         return r;
   1058     }
   1059 
   1060     @Override
   1061     @Generated("com.github.javaparser.generator.core.visitor.CloneVisitorGenerator")
   1062     public Visitable visit(final ReceiverParameter n, final Object arg) {
   1063         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
   1064         Name name = cloneNode(n.getName(), arg);
   1065         Type type = cloneNode(n.getType(), arg);
   1066         Comment comment = cloneNode(n.getComment(), arg);
   1067         ReceiverParameter r = new ReceiverParameter(n.getTokenRange().orElse(null), annotations, type, name);
   1068         r.setComment(comment);
   1069         return r;
   1070     }
   1071 
   1072     @Override
   1073     public Visitable visit(final VarType n, final Object arg) {
   1074         NodeList<AnnotationExpr> annotations = cloneList(n.getAnnotations(), arg);
   1075         Comment comment = cloneNode(n.getComment(), arg);
   1076         VarType r = new VarType(n.getTokenRange().orElse(null));
   1077         r.setComment(comment);
   1078         return r;
   1079     }
   1080 }
   1081