aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_new_src/javaparser-core/com/github/javaparser/ast/visitor/CloneVisitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_new_src/javaparser-core/com/github/javaparser/ast/visitor/CloneVisitor.java')
-rw-r--r--javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_new_src/javaparser-core/com/github/javaparser/ast/visitor/CloneVisitor.java1296
1 files changed, 1296 insertions, 0 deletions
diff --git a/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_new_src/javaparser-core/com/github/javaparser/ast/visitor/CloneVisitor.java b/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_new_src/javaparser-core/com/github/javaparser/ast/visitor/CloneVisitor.java
new file mode 100644
index 000000000..33ca0e02a
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_new_src/javaparser-core/com/github/javaparser/ast/visitor/CloneVisitor.java
@@ -0,0 +1,1296 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2016 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+
+package com.github.javaparser.ast.visitor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.github.javaparser.ast.*;
+import com.github.javaparser.ast.type.TypeParameter;
+import com.github.javaparser.ast.body.AnnotationDeclaration;
+import com.github.javaparser.ast.body.AnnotationMemberDeclaration;
+import com.github.javaparser.ast.body.BodyDeclaration;
+import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.EmptyMemberDeclaration;
+import com.github.javaparser.ast.body.EmptyTypeDeclaration;
+import com.github.javaparser.ast.body.EnumConstantDeclaration;
+import com.github.javaparser.ast.body.EnumDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
+import com.github.javaparser.ast.body.InitializerDeclaration;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.body.TypeDeclaration;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.body.VariableDeclaratorId;
+import com.github.javaparser.ast.comments.BlockComment;
+import com.github.javaparser.ast.comments.Comment;
+import com.github.javaparser.ast.comments.JavadocComment;
+import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.expr.AnnotationExpr;
+import com.github.javaparser.ast.expr.ArrayAccessExpr;
+import com.github.javaparser.ast.expr.ArrayCreationExpr;
+import com.github.javaparser.ast.expr.ArrayInitializerExpr;
+import com.github.javaparser.ast.expr.AssignExpr;
+import com.github.javaparser.ast.expr.BinaryExpr;
+import com.github.javaparser.ast.expr.BooleanLiteralExpr;
+import com.github.javaparser.ast.expr.CastExpr;
+import com.github.javaparser.ast.expr.CharLiteralExpr;
+import com.github.javaparser.ast.expr.ClassExpr;
+import com.github.javaparser.ast.expr.ConditionalExpr;
+import com.github.javaparser.ast.expr.DoubleLiteralExpr;
+import com.github.javaparser.ast.expr.EnclosedExpr;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.expr.FieldAccessExpr;
+import com.github.javaparser.ast.expr.InstanceOfExpr;
+import com.github.javaparser.ast.expr.IntegerLiteralExpr;
+import com.github.javaparser.ast.expr.IntegerLiteralMinValueExpr;
+import com.github.javaparser.ast.expr.LambdaExpr;
+import com.github.javaparser.ast.expr.LongLiteralExpr;
+import com.github.javaparser.ast.expr.LongLiteralMinValueExpr;
+import com.github.javaparser.ast.expr.MarkerAnnotationExpr;
+import com.github.javaparser.ast.expr.MemberValuePair;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.MethodReferenceExpr;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.expr.NormalAnnotationExpr;
+import com.github.javaparser.ast.expr.NullLiteralExpr;
+import com.github.javaparser.ast.expr.ObjectCreationExpr;
+import com.github.javaparser.ast.expr.QualifiedNameExpr;
+import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr;
+import com.github.javaparser.ast.expr.StringLiteralExpr;
+import com.github.javaparser.ast.expr.SuperExpr;
+import com.github.javaparser.ast.expr.ThisExpr;
+import com.github.javaparser.ast.expr.TypeExpr;
+import com.github.javaparser.ast.expr.UnaryExpr;
+import com.github.javaparser.ast.expr.VariableDeclarationExpr;
+import com.github.javaparser.ast.stmt.AssertStmt;
+import com.github.javaparser.ast.stmt.BlockStmt;
+import com.github.javaparser.ast.stmt.BreakStmt;
+import com.github.javaparser.ast.stmt.CatchClause;
+import com.github.javaparser.ast.stmt.ContinueStmt;
+import com.github.javaparser.ast.stmt.DoStmt;
+import com.github.javaparser.ast.stmt.EmptyStmt;
+import com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt;
+import com.github.javaparser.ast.stmt.ExpressionStmt;
+import com.github.javaparser.ast.stmt.ForStmt;
+import com.github.javaparser.ast.stmt.ForeachStmt;
+import com.github.javaparser.ast.stmt.IfStmt;
+import com.github.javaparser.ast.stmt.LabeledStmt;
+import com.github.javaparser.ast.stmt.ReturnStmt;
+import com.github.javaparser.ast.stmt.Statement;
+import com.github.javaparser.ast.stmt.SwitchEntryStmt;
+import com.github.javaparser.ast.stmt.SwitchStmt;
+import com.github.javaparser.ast.stmt.SynchronizedStmt;
+import com.github.javaparser.ast.stmt.ThrowStmt;
+import com.github.javaparser.ast.stmt.TryStmt;
+import com.github.javaparser.ast.stmt.TypeDeclarationStmt;
+import com.github.javaparser.ast.stmt.WhileStmt;
+import com.github.javaparser.ast.type.*;
+
+public class CloneVisitor implements GenericVisitor<Node, Object> {
+
+ @Override
+ public Node visit(CompilationUnit _n, Object _arg) {
+ PackageDeclaration package_ = cloneNodes(_n.getPackage(), _arg);
+ List<ImportDeclaration> imports = visit(_n.getImports(), _arg);
+ List<TypeDeclaration<?>> types = visit(_n.getTypes(), _arg);
+
+ return new CompilationUnit(
+ _n.getRange(),
+ package_, imports, types
+ );
+ }
+
+ @Override
+ public Node visit(PackageDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ NameExpr name = cloneNodes(_n.getName(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ PackageDeclaration r = new PackageDeclaration(
+ _n.getRange(),
+ annotations, name
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ImportDeclaration _n, Object _arg) {
+ NameExpr name = cloneNodes(_n.getName(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ImportDeclaration r = new ImportDeclaration(
+ _n.getRange(),
+ name, _n.isStatic(), _n.isAsterisk()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(TypeParameter _n, Object _arg) {
+ List<ClassOrInterfaceType> typeBound = visit(_n.getTypeBound(), _arg);
+
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ TypeParameter r = new TypeParameter(_n.getRange(),
+ _n.getName(), typeBound, annotations);
+
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(LineComment _n, Object _arg) {
+ return new LineComment(_n.getRange(), _n.getContent());
+ }
+
+ @Override
+ public Node visit(BlockComment _n, Object _arg) {
+ return new BlockComment(_n.getRange(), _n.getContent());
+ }
+
+ @Override
+ public Node visit(ClassOrInterfaceDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<TypeParameter> typeParameters = visit(_n.getTypeParameters(), _arg);
+ List<ClassOrInterfaceType> extendsList = visit(_n.getExtends(), _arg);
+ List<ClassOrInterfaceType> implementsList = visit(_n.getImplements(), _arg);
+ List<BodyDeclaration<?>> members = visit(_n.getMembers(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ClassOrInterfaceDeclaration r = new ClassOrInterfaceDeclaration(
+ _n.getRange(),
+ _n.getModifiers(), annotations, _n.isInterface(), _n.getName(), typeParameters, extendsList, implementsList, members
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(EnumDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<ClassOrInterfaceType> implementsList = visit(_n.getImplements(), _arg);
+ List<EnumConstantDeclaration> entries = visit(_n.getEntries(), _arg);
+ List<BodyDeclaration<?>> members = visit(_n.getMembers(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ EnumDeclaration r = new EnumDeclaration(
+ _n.getRange(),
+ _n.getModifiers(), annotations, _n.getName(), implementsList, entries, members
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(EmptyTypeDeclaration _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ EmptyTypeDeclaration r = new EmptyTypeDeclaration(
+ _n.getRange()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(EnumConstantDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<Expression> args = visit(_n.getArgs(), _arg);
+ List<BodyDeclaration<?>> classBody = visit(_n.getClassBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ EnumConstantDeclaration r = new EnumConstantDeclaration(
+ _n.getRange(),
+ annotations, _n.getName(), args, classBody
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(AnnotationDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<BodyDeclaration<?>> members = visit(_n.getMembers(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ AnnotationDeclaration r = new AnnotationDeclaration(
+ _n.getRange(),
+ _n.getModifiers(), annotations, _n.getName(), members
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(AnnotationMemberDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ Type<?> type_ = cloneNodes(_n.getType(), _arg);
+ Expression defaultValue = cloneNodes(_n.getDefaultValue(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ AnnotationMemberDeclaration r = new AnnotationMemberDeclaration(
+ _n.getRange(),
+ _n.getModifiers(), annotations, type_, _n.getName(), defaultValue
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(FieldDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations_ = visit(_n.getAnnotations(), _arg);
+ Type<?> elementType_ = cloneNodes(_n.getElementType(), _arg);
+ List<VariableDeclarator> variables_ = visit(_n.getVariables(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ List<ArrayBracketPair> arrayBracketPairsAfterType_ = visit(_n.getArrayBracketPairsAfterElementType(), _arg);
+
+ FieldDeclaration r = new FieldDeclaration(
+ _n.getRange(),
+ _n.getModifiers(),
+ annotations_,
+ elementType_,
+ variables_,
+ arrayBracketPairsAfterType_
+
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(VariableDeclarator _n, Object _arg) {
+ VariableDeclaratorId id = cloneNodes(_n.getId(), _arg);
+ Expression init = cloneNodes(_n.getInit(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ VariableDeclarator r = new VariableDeclarator(
+ _n.getRange(),
+ id, init
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(VariableDeclaratorId _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ List<ArrayBracketPair> arrayBracketPairsAfterId_ = visit(_n.getArrayBracketPairsAfterId(), _arg);
+
+ VariableDeclaratorId r = new VariableDeclaratorId(
+ _n.getRange(),
+ _n.getName(),
+ arrayBracketPairsAfterId_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ConstructorDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<TypeParameter> typeParameters = visit(_n.getTypeParameters(), _arg);
+ List<Parameter> parameters = visit(_n.getParameters(), _arg);
+ List<ReferenceType> throws_ = visit(_n.getThrows(), _arg);
+ BlockStmt block = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ConstructorDeclaration r = new ConstructorDeclaration(
+ _n.getRange(),
+ _n.getModifiers(), annotations, typeParameters, _n.getName(), parameters, throws_, block
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(MethodDeclaration _n, Object _arg) {
+ List<AnnotationExpr> annotations_ = visit(_n.getAnnotations(), _arg);
+ List<TypeParameter> typeParameters_ = visit(_n.getTypeParameters(), _arg);
+ Type<?> type_ = cloneNodes(_n.getElementType(), _arg);
+ NameExpr nameExpr_ = cloneNodes(_n.getNameExpr(), _arg);
+ List<Parameter> parameters_ = visit(_n.getParameters(), _arg);
+ List<ReferenceType> throws_ = visit(_n.getThrows(), _arg);
+ BlockStmt block_ = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ List<ArrayBracketPair> arrayBracketPairsAfterElementType_ = visit(_n.getArrayBracketPairsAfterElementType(), _arg);
+ List<ArrayBracketPair> arrayBracketPairsAfterParameterList_ = visit(_n.getArrayBracketPairsAfterParameterList(), _arg);
+
+ MethodDeclaration r = new MethodDeclaration(
+ _n.getRange(),
+ _n.getModifiers(),
+ annotations_,
+ typeParameters_,
+ type_,
+ arrayBracketPairsAfterElementType_,
+ nameExpr_,
+ parameters_,
+ arrayBracketPairsAfterParameterList_,
+ throws_,
+ block_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(Parameter _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ Type<?> type_ = cloneNodes(_n.getElementType(), _arg);
+ VariableDeclaratorId id = cloneNodes(_n.getId(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ List<ArrayBracketPair> arrayBracketPairsAfterType_ = visit(_n.getArrayBracketPairsAfterElementType(), _arg);
+
+ Parameter r = new Parameter(
+ _n.getRange(),
+ _n.getModifiers(),
+ annotations,
+ type_,
+ arrayBracketPairsAfterType_,
+ _n.isVarArgs(),
+ id
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(EmptyMemberDeclaration _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ EmptyMemberDeclaration r = new EmptyMemberDeclaration(
+ _n.getRange()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(InitializerDeclaration _n, Object _arg) {
+ BlockStmt block = cloneNodes(_n.getBlock(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ InitializerDeclaration r = new InitializerDeclaration(
+ _n.getRange(),
+ _n.isStatic(), block
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(JavadocComment _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ JavadocComment r = new JavadocComment(
+ _n.getRange(),
+ _n.getContent()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ClassOrInterfaceType _n, Object _arg) {
+ ClassOrInterfaceType scope = cloneNodes(_n.getScope(), _arg);
+ List<Type<?>> typeArguments_ = visit(_n.getTypeArguments(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ClassOrInterfaceType r = new ClassOrInterfaceType(
+ _n.getRange(),
+ scope,
+ _n.getName(),
+ _n.getTypeArguments()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(PrimitiveType _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+
+ PrimitiveType r = new PrimitiveType(
+ _n.getRange(),
+ _n.getType()
+ );
+ r.setComment(comment);
+ r.setAnnotations(annotations);
+ return r;
+ }
+
+ @Override
+ public Node visit(ArrayType _n, Object _arg) {
+ List<AnnotationExpr> ann = visit(_n.getAnnotations(), _arg);
+ Type<?> type_ = cloneNodes(_n.getComponentType(), _arg);
+
+ ArrayType r = new ArrayType(_n.getRange(), type_, ann);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ArrayCreationLevel _n, Object _arg) {
+ List<AnnotationExpr> ann = visit(_n.getAnnotations(), _arg);
+ Expression dimension_ = cloneNodes(_n.getDimension(), _arg);
+
+ ArrayCreationLevel r = new ArrayCreationLevel(_n.getRange(), dimension_, ann);
+
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(IntersectionType _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<ReferenceType> elements = visit(_n.getElements(), _arg);
+
+ IntersectionType r = new IntersectionType(_n.getRange(), elements);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ r.setComment(comment);
+ r.setAnnotations(annotations);
+ return r;
+ }
+
+ @Override
+ public Node visit(UnionType _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ List<ReferenceType> elements = visit(_n.getElements(), _arg);
+
+ UnionType r = new UnionType(_n.getRange(),
+ elements);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ r.setComment(comment);
+ r.setAnnotations(annotations);
+ return r;
+ }
+
+ @Override
+ public Node visit(VoidType _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ VoidType r = new VoidType(_n.getRange());
+ r.setAnnotations(annotations);
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(WildcardType _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ ReferenceType ext = cloneNodes(_n.getExtends(), _arg);
+ ReferenceType sup = cloneNodes(_n.getSuper(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ WildcardType r = new WildcardType(
+ _n.getRange(),
+ ext, sup
+ );
+ r.setComment(comment);
+ r.setAnnotations(annotations);
+ return r;
+ }
+
+ @Override
+ public Node visit(UnknownType _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ UnknownType r = new UnknownType();
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ArrayAccessExpr _n, Object _arg) {
+ Expression name = cloneNodes(_n.getName(), _arg);
+ Expression index = cloneNodes(_n.getIndex(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ArrayAccessExpr r = new ArrayAccessExpr(
+ _n.getRange(),
+ name, index
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ArrayCreationExpr _n, Object _arg) {
+ Type<?> type_ = cloneNodes(_n.getType(), _arg);
+ List<ArrayCreationLevel> levels_ = visit(_n.getLevels(), _arg);
+ ArrayInitializerExpr initializer_ = cloneNodes(_n.getInitializer(), _arg);
+
+ ArrayCreationExpr r = new ArrayCreationExpr(_n.getRange(), type_, levels_, initializer_);
+
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ArrayInitializerExpr _n, Object _arg) {
+ List<Expression> values = visit(_n.getValues(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ArrayInitializerExpr r = new ArrayInitializerExpr(
+ _n.getRange(),
+ values
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(AssignExpr _n, Object _arg) {
+ Expression target = cloneNodes(_n.getTarget(), _arg);
+ Expression value = cloneNodes(_n.getValue(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ AssignExpr r = new AssignExpr(
+ _n.getRange(),
+ target, value, _n.getOperator());
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(BinaryExpr _n, Object _arg) {
+ Expression left = cloneNodes(_n.getLeft(), _arg);
+ Expression right = cloneNodes(_n.getRight(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ BinaryExpr r = new BinaryExpr(
+ _n.getRange(),
+ left, right, _n.getOperator()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(CastExpr _n, Object _arg) {
+ Type<?> type_ = cloneNodes(_n.getType(), _arg);
+ Expression expr = cloneNodes(_n.getExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ CastExpr r = new CastExpr(
+ _n.getRange(),
+ type_, expr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ClassExpr _n, Object _arg) {
+ Type<?> type_ = cloneNodes(_n.getType(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ClassExpr r = new ClassExpr(
+ _n.getRange(),
+ type_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ConditionalExpr _n, Object _arg) {
+ Expression condition = cloneNodes(_n.getCondition(), _arg);
+ Expression thenExpr = cloneNodes(_n.getThenExpr(), _arg);
+ Expression elseExpr = cloneNodes(_n.getElseExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ConditionalExpr r = new ConditionalExpr(
+ _n.getRange(),
+ condition, thenExpr, elseExpr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(EnclosedExpr _n, Object _arg) {
+ Expression inner = cloneNodes(_n.getInner(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ EnclosedExpr r = new EnclosedExpr(
+ _n.getRange(),
+ inner
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(FieldAccessExpr _n, Object _arg) {
+ Expression scope_ = cloneNodes(_n.getScope(), _arg);
+ List<Type<?>> typeArguments_ = visit(_n.getTypeArguments(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ FieldAccessExpr r = new FieldAccessExpr(
+ _n.getRange(),
+ scope_,
+ typeArguments_,
+ _n.getField()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(InstanceOfExpr _n, Object _arg) {
+ Expression expr = cloneNodes(_n.getExpr(), _arg);
+ Type<?> type_ = cloneNodes(_n.getType(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ InstanceOfExpr r = new InstanceOfExpr(
+ _n.getRange(),
+ expr, type_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(StringLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ StringLiteralExpr r = new StringLiteralExpr(
+ _n.getRange(),
+ _n.getValue()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(IntegerLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ IntegerLiteralExpr r = new IntegerLiteralExpr(
+ _n.getRange(),
+ _n.getValue()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(LongLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ LongLiteralExpr r = new LongLiteralExpr(
+ _n.getRange(),
+ _n.getValue()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(IntegerLiteralMinValueExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ IntegerLiteralMinValueExpr r = new IntegerLiteralMinValueExpr(_n.getRange());
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(LongLiteralMinValueExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ LongLiteralMinValueExpr r = new LongLiteralMinValueExpr(_n.getRange());
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(CharLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ CharLiteralExpr r = new CharLiteralExpr(
+ _n.getRange(),
+ _n.getValue()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(DoubleLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ DoubleLiteralExpr r = new DoubleLiteralExpr(
+ _n.getRange(),
+ _n.getValue()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(BooleanLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ BooleanLiteralExpr r = new BooleanLiteralExpr(
+ _n.getRange(),
+ _n.getValue()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(NullLiteralExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ NullLiteralExpr r = new NullLiteralExpr(_n.getRange());
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(MethodCallExpr _n, Object _arg) {
+ Expression scope_ = cloneNodes(_n.getScope(), _arg);
+ List<Type<?>> typeArguments_ = visit(_n.getTypeArguments(), _arg);
+ List<Expression> args_ = visit(_n.getArgs(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ MethodCallExpr r = new MethodCallExpr(
+ _n.getRange(),
+ scope_,
+ typeArguments_,
+ _n.getName(),
+ args_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(NameExpr _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ NameExpr r = new NameExpr(
+ _n.getRange(),
+ _n.getName()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ObjectCreationExpr _n, Object _arg) {
+ Expression scope = cloneNodes(_n.getScope(), _arg);
+ ClassOrInterfaceType type_ = cloneNodes(_n.getType(), _arg);
+ List<Type<?>> typeArgs = visit(_n.getTypeArguments(), _arg);
+ List<Expression> args = visit(_n.getArgs(), _arg);
+ List<BodyDeclaration<?>> anonymousBody = visit(_n.getAnonymousClassBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ObjectCreationExpr r = new ObjectCreationExpr(
+ _n.getRange(),
+ scope, type_, typeArgs, args, anonymousBody
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(QualifiedNameExpr _n, Object _arg) {
+ NameExpr scope = cloneNodes(_n.getQualifier(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ QualifiedNameExpr r = new QualifiedNameExpr(
+ _n.getRange(),
+ scope, _n.getName()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ThisExpr _n, Object _arg) {
+ Expression classExpr = cloneNodes(_n.getClassExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ThisExpr r = new ThisExpr(
+ _n.getRange(),
+ classExpr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(SuperExpr _n, Object _arg) {
+ Expression classExpr = cloneNodes(_n.getClassExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ SuperExpr r = new SuperExpr(
+ _n.getRange(),
+ classExpr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(UnaryExpr _n, Object _arg) {
+ Expression expr = cloneNodes(_n.getExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ UnaryExpr r = new UnaryExpr(
+ _n.getRange(),
+ expr, _n.getOperator()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(VariableDeclarationExpr _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+ Type<?> type_ = cloneNodes(_n.getElementType(), _arg);
+ List<VariableDeclarator> vars = visit(_n.getVariables(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+ List<ArrayBracketPair> arrayBracketPairsAfterType_ = visit(_n.getArrayBracketPairsAfterElementType(), _arg);
+
+ VariableDeclarationExpr r = new VariableDeclarationExpr(
+ _n.getRange(),
+ _n.getModifiers(),
+ annotations,
+ type_,
+ vars,
+ arrayBracketPairsAfterType_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(MarkerAnnotationExpr _n, Object _arg) {
+ NameExpr name = cloneNodes(_n.getName(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ MarkerAnnotationExpr r = new MarkerAnnotationExpr(
+ _n.getRange(),
+ name
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(SingleMemberAnnotationExpr _n, Object _arg) {
+ NameExpr name = cloneNodes(_n.getName(), _arg);
+ Expression memberValue = cloneNodes(_n.getMemberValue(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ SingleMemberAnnotationExpr r = new SingleMemberAnnotationExpr(
+ _n.getRange(),
+ name, memberValue
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(NormalAnnotationExpr _n, Object _arg) {
+ NameExpr name = cloneNodes(_n.getName(), _arg);
+ List<MemberValuePair> pairs = visit(_n.getPairs(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ NormalAnnotationExpr r = new NormalAnnotationExpr(
+ _n.getRange(),
+ name, pairs
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(MemberValuePair _n, Object _arg) {
+ Expression value = cloneNodes(_n.getValue(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ MemberValuePair r = new MemberValuePair(
+ _n.getRange(),
+ _n.getName(), value
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ExplicitConstructorInvocationStmt _n, Object _arg) {
+ List<Type<?>> typeArguments_ = visit(_n.getTypeArguments(), _arg);
+ Expression expr_ = cloneNodes(_n.getExpr(), _arg);
+ List<Expression> args_ = visit(_n.getArgs(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ExplicitConstructorInvocationStmt r = new ExplicitConstructorInvocationStmt(
+ _n.getRange(),
+ typeArguments_,
+ _n.isThis(),
+ expr_,
+ args_
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(TypeDeclarationStmt _n, Object _arg) {
+ TypeDeclaration<?> typeDecl = cloneNodes(_n.getTypeDeclaration(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ TypeDeclarationStmt r = new TypeDeclarationStmt(
+ _n.getRange(),
+ typeDecl
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(AssertStmt _n, Object _arg) {
+ Expression check = cloneNodes(_n.getCheck(), _arg);
+ Expression message = cloneNodes(_n.getMessage(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ AssertStmt r = new AssertStmt(
+ _n.getRange(),
+ check, message
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(BlockStmt _n, Object _arg) {
+ List<Statement> stmts = visit(_n.getStmts(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ BlockStmt r = new BlockStmt(
+ _n.getRange(),
+ stmts
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(LabeledStmt _n, Object _arg) {
+ Statement stmt = cloneNodes(_n.getStmt(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ LabeledStmt r = new LabeledStmt(
+ _n.getRange(),
+ _n.getLabel(), stmt
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(EmptyStmt _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ EmptyStmt r = new EmptyStmt(_n.getRange());
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ExpressionStmt _n, Object _arg) {
+ Expression expr = cloneNodes(_n.getExpression(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ExpressionStmt r = new ExpressionStmt(
+ _n.getRange(),
+ expr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(SwitchStmt _n, Object _arg) {
+ Expression selector = cloneNodes(_n.getSelector(), _arg);
+ List<SwitchEntryStmt> entries = visit(_n.getEntries(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ SwitchStmt r = new SwitchStmt(
+ _n.getRange(),
+ selector, entries
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(SwitchEntryStmt _n, Object _arg) {
+ Expression label = cloneNodes(_n.getLabel(), _arg);
+ List<Statement> stmts = visit(_n.getStmts(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ SwitchEntryStmt r = new SwitchEntryStmt(
+ _n.getRange(),
+ label, stmts
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(BreakStmt _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ BreakStmt r = new BreakStmt(
+ _n.getRange(),
+ _n.getId()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ReturnStmt _n, Object _arg) {
+ Expression expr = cloneNodes(_n.getExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ReturnStmt r = new ReturnStmt(
+ _n.getRange(),
+ expr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(IfStmt _n, Object _arg) {
+ Expression condition = cloneNodes(_n.getCondition(), _arg);
+ Statement thenStmt = cloneNodes(_n.getThenStmt(), _arg);
+ Statement elseStmt = cloneNodes(_n.getElseStmt(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ IfStmt r = new IfStmt(
+ _n.getRange(),
+ condition, thenStmt, elseStmt
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(WhileStmt _n, Object _arg) {
+ Expression condition = cloneNodes(_n.getCondition(), _arg);
+ Statement body = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ WhileStmt r = new WhileStmt(
+ _n.getRange(),
+ condition, body
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ContinueStmt _n, Object _arg) {
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ContinueStmt r = new ContinueStmt(
+ _n.getRange(),
+ _n.getId()
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(DoStmt _n, Object _arg) {
+ Statement body = cloneNodes(_n.getBody(), _arg);
+ Expression condition = cloneNodes(_n.getCondition(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ DoStmt r = new DoStmt(
+ _n.getRange(),
+ body, condition
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ForeachStmt _n, Object _arg) {
+ VariableDeclarationExpr var = cloneNodes(_n.getVariable(), _arg);
+ Expression iterable = cloneNodes(_n.getIterable(), _arg);
+ Statement body = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ForeachStmt r = new ForeachStmt(
+ _n.getRange(),
+ var, iterable, body
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ForStmt _n, Object _arg) {
+ List<Expression> init = visit(_n.getInit(), _arg);
+ Expression compare = cloneNodes(_n.getCompare(), _arg);
+ List<Expression> update = visit(_n.getUpdate(), _arg);
+ Statement body = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ForStmt r = new ForStmt(
+ _n.getRange(),
+ init, compare, update, body
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(ThrowStmt _n, Object _arg) {
+ Expression expr = cloneNodes(_n.getExpr(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ ThrowStmt r = new ThrowStmt(
+ _n.getRange(),
+ expr
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(SynchronizedStmt _n, Object _arg) {
+ Expression expr = cloneNodes(_n.getExpr(), _arg);
+ BlockStmt block = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ SynchronizedStmt r = new SynchronizedStmt(
+ _n.getRange(),
+ expr, block
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(TryStmt _n, Object _arg) {
+ List<VariableDeclarationExpr> resources = visit(_n.getResources(),_arg);
+ BlockStmt tryBlock = cloneNodes(_n.getTryBlock(), _arg);
+ List<CatchClause> catchs = visit(_n.getCatchs(), _arg);
+ BlockStmt finallyBlock = cloneNodes(_n.getFinallyBlock(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ TryStmt r = new TryStmt(
+ _n.getRange(),
+ resources, tryBlock, catchs, finallyBlock
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(CatchClause _n, Object _arg) {
+ Parameter param = cloneNodes(_n.getParam(), _arg);
+ BlockStmt catchBlock = cloneNodes(_n.getBody(), _arg);
+ Comment comment = cloneNodes(_n.getComment(), _arg);
+
+ CatchClause r = new CatchClause(
+ _n.getRange(),
+ param.getModifiers(), param.getAnnotations(), param.getElementType(), param.getId(), catchBlock
+ );
+ r.setComment(comment);
+ return r;
+ }
+
+ @Override
+ public Node visit(LambdaExpr _n, Object _arg) {
+
+ List<Parameter> lambdaParameters = visit(_n.getParameters(), _arg);
+
+ Statement body = cloneNodes(_n.getBody(), _arg);
+
+ return new LambdaExpr(_n.getRange(), lambdaParameters, body,
+ _n.isParametersEnclosed());
+ }
+
+ @Override
+ public Node visit(MethodReferenceExpr _n, Object arg) {
+
+ Expression scope = cloneNodes(_n.getScope(), arg);
+
+ return new MethodReferenceExpr(_n.getRange(), scope,
+ _n.getTypeArguments(), _n.getIdentifier());
+ }
+
+ @Override
+ public Node visit(TypeExpr n, Object arg) {
+
+ Type<?> t = cloneNodes(n.getType(), arg);
+
+ return new TypeExpr(n.getRange(), t);
+ }
+
+ @Override
+ public Node visit(ArrayBracketPair _n, Object _arg) {
+ List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg);
+
+ return new ArrayBracketPair(_n.getRange(), annotations);
+ }
+
+ public <T extends Node> List<T> visit(List<T> _nodes, Object _arg) {
+ if (_nodes == null)
+ return null;
+ List<T> r = new ArrayList<>(_nodes.size());
+ for (T n : _nodes) {
+ T rN = cloneNodes(n, _arg);
+ if (rN != null)
+ r.add(rN);
+ }
+ return r;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected <T extends Node> T cloneNodes(T _node, Object _arg) {
+ if (_node == null)
+ return null;
+ Node r = _node.accept(this, _arg);
+ if (r == null)
+ return null;
+ return (T) r;
+ }
+}