1 /* 2 * Copyright (C) 2007-2010 Júlio 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.BlockComment; 26 import com.github.javaparser.ast.comments.Comment; 27 import com.github.javaparser.ast.comments.JavadocComment; 28 import com.github.javaparser.ast.comments.LineComment; 29 import com.github.javaparser.ast.expr.*; 30 import com.github.javaparser.ast.modules.*; 31 import com.github.javaparser.ast.stmt.*; 32 import com.github.javaparser.ast.type.*; 33 import com.github.javaparser.utils.Pair; 34 import java.util.ArrayList; 35 import java.util.List; 36 import java.util.Optional; 37 import static com.github.javaparser.utils.Utils.removeElementByObjectIdentity; 38 import static com.github.javaparser.utils.Utils.replaceElementByObjectIdentity; 39 40 /** 41 * This visitor can be used to save time when some specific nodes needs 42 * to be changed. To do that just extend this class and override the methods 43 * from the nodes who needs to be changed, returning the changed node. 44 * Returning null will remove the node. 45 * <p> 46 * If a node is removed that was required in its parent node, 47 * the parent node will be removed too. 48 * 49 * @author Julio Vilmar Gesser 50 */ 51 public class ModifierVisitor<A> implements GenericVisitor<Visitable, A> { 52 53 @Override visit(final AnnotationDeclaration n, final A arg)54 public Visitable visit(final AnnotationDeclaration n, final A arg) { 55 NodeList<BodyDeclaration<?>> members = modifyList(n.getMembers(), arg); 56 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 57 SimpleName name = (SimpleName) n.getName().accept(this, arg); 58 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 59 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 60 if (name == null) 61 return null; 62 n.setMembers(members); 63 n.setModifiers(modifiers); 64 n.setName(name); 65 n.setAnnotations(annotations); 66 n.setComment(comment); 67 return n; 68 } 69 70 @Override visit(final AnnotationMemberDeclaration n, final A arg)71 public Visitable visit(final AnnotationMemberDeclaration n, final A arg) { 72 Expression defaultValue = n.getDefaultValue().map(s -> (Expression) s.accept(this, arg)).orElse(null); 73 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 74 SimpleName name = (SimpleName) n.getName().accept(this, arg); 75 Type type = (Type) n.getType().accept(this, arg); 76 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 77 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 78 if (name == null || type == null) 79 return null; 80 n.setDefaultValue(defaultValue); 81 n.setModifiers(modifiers); 82 n.setName(name); 83 n.setType(type); 84 n.setAnnotations(annotations); 85 n.setComment(comment); 86 return n; 87 } 88 89 @Override visit(final ArrayAccessExpr n, final A arg)90 public Visitable visit(final ArrayAccessExpr n, final A arg) { 91 Expression index = (Expression) n.getIndex().accept(this, arg); 92 Expression name = (Expression) n.getName().accept(this, arg); 93 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 94 if (index == null || name == null) 95 return null; 96 n.setIndex(index); 97 n.setName(name); 98 n.setComment(comment); 99 return n; 100 } 101 102 @Override visit(final ArrayCreationExpr n, final A arg)103 public Visitable visit(final ArrayCreationExpr n, final A arg) { 104 Type elementType = (Type) n.getElementType().accept(this, arg); 105 ArrayInitializerExpr initializer = n.getInitializer().map(s -> (ArrayInitializerExpr) s.accept(this, arg)).orElse(null); 106 NodeList<ArrayCreationLevel> levels = modifyList(n.getLevels(), arg); 107 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 108 if (elementType == null || levels.isEmpty()) 109 return null; 110 n.setElementType(elementType); 111 n.setInitializer(initializer); 112 n.setLevels(levels); 113 n.setComment(comment); 114 return n; 115 } 116 117 @Override visit(final ArrayInitializerExpr n, final A arg)118 public Visitable visit(final ArrayInitializerExpr n, final A arg) { 119 NodeList<Expression> values = modifyList(n.getValues(), arg); 120 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 121 n.setValues(values); 122 n.setComment(comment); 123 return n; 124 } 125 126 @Override visit(final AssertStmt n, final A arg)127 public Visitable visit(final AssertStmt n, final A arg) { 128 Expression check = (Expression) n.getCheck().accept(this, arg); 129 Expression message = n.getMessage().map(s -> (Expression) s.accept(this, arg)).orElse(null); 130 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 131 if (check == null) 132 return null; 133 n.setCheck(check); 134 n.setMessage(message); 135 n.setComment(comment); 136 return n; 137 } 138 139 @Override visit(final AssignExpr n, final A arg)140 public Visitable visit(final AssignExpr n, final A arg) { 141 Expression target = (Expression) n.getTarget().accept(this, arg); 142 Expression value = (Expression) n.getValue().accept(this, arg); 143 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 144 if (target == null || value == null) 145 return null; 146 n.setTarget(target); 147 n.setValue(value); 148 n.setComment(comment); 149 return n; 150 } 151 152 @Override visit(final BinaryExpr n, final A arg)153 public Visitable visit(final BinaryExpr n, final A arg) { 154 Expression left = (Expression) n.getLeft().accept(this, arg); 155 Expression right = (Expression) n.getRight().accept(this, arg); 156 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 157 if (left == null) 158 return right; 159 if (right == null) 160 return left; 161 n.setLeft(left); 162 n.setRight(right); 163 n.setComment(comment); 164 return n; 165 } 166 167 @Override visit(final BlockStmt n, final A arg)168 public Visitable visit(final BlockStmt n, final A arg) { 169 NodeList<Statement> statements = modifyList(n.getStatements(), arg); 170 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 171 n.setStatements(statements); 172 n.setComment(comment); 173 return n; 174 } 175 176 @Override visit(final BooleanLiteralExpr n, final A arg)177 public Visitable visit(final BooleanLiteralExpr n, final A arg) { 178 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 179 n.setComment(comment); 180 return n; 181 } 182 183 @Override visit(final BreakStmt n, final A arg)184 public Visitable visit(final BreakStmt n, final A arg) { 185 Expression value = n.getValue().map(s -> (Expression) s.accept(this, arg)).orElse(null); 186 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 187 n.setValue(value); 188 n.setComment(comment); 189 return n; 190 } 191 192 @Override visit(final CastExpr n, final A arg)193 public Visitable visit(final CastExpr n, final A arg) { 194 Expression expression = (Expression) n.getExpression().accept(this, arg); 195 Type type = (Type) n.getType().accept(this, arg); 196 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 197 if (expression == null || type == null) 198 return null; 199 n.setExpression(expression); 200 n.setType(type); 201 n.setComment(comment); 202 return n; 203 } 204 205 @Override visit(final CatchClause n, final A arg)206 public Visitable visit(final CatchClause n, final A arg) { 207 BlockStmt body = (BlockStmt) n.getBody().accept(this, arg); 208 Parameter parameter = (Parameter) n.getParameter().accept(this, arg); 209 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 210 if (body == null || parameter == null) 211 return null; 212 n.setBody(body); 213 n.setParameter(parameter); 214 n.setComment(comment); 215 return n; 216 } 217 218 @Override visit(final CharLiteralExpr n, final A arg)219 public Visitable visit(final CharLiteralExpr n, final A arg) { 220 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 221 n.setComment(comment); 222 return n; 223 } 224 225 @Override visit(final ClassExpr n, final A arg)226 public Visitable visit(final ClassExpr n, final A arg) { 227 Type type = (Type) n.getType().accept(this, arg); 228 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 229 if (type == null) 230 return null; 231 n.setType(type); 232 n.setComment(comment); 233 return n; 234 } 235 236 @Override visit(final ClassOrInterfaceDeclaration n, final A arg)237 public Visitable visit(final ClassOrInterfaceDeclaration n, final A arg) { 238 NodeList<ClassOrInterfaceType> extendedTypes = modifyList(n.getExtendedTypes(), arg); 239 NodeList<ClassOrInterfaceType> implementedTypes = modifyList(n.getImplementedTypes(), arg); 240 NodeList<TypeParameter> typeParameters = modifyList(n.getTypeParameters(), arg); 241 NodeList<BodyDeclaration<?>> members = modifyList(n.getMembers(), arg); 242 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 243 SimpleName name = (SimpleName) n.getName().accept(this, arg); 244 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 245 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 246 if (name == null) 247 return null; 248 n.setExtendedTypes(extendedTypes); 249 n.setImplementedTypes(implementedTypes); 250 n.setTypeParameters(typeParameters); 251 n.setMembers(members); 252 n.setModifiers(modifiers); 253 n.setName(name); 254 n.setAnnotations(annotations); 255 n.setComment(comment); 256 return n; 257 } 258 259 @Override visit(final ClassOrInterfaceType n, final A arg)260 public Visitable visit(final ClassOrInterfaceType n, final A arg) { 261 SimpleName name = (SimpleName) n.getName().accept(this, arg); 262 ClassOrInterfaceType scope = n.getScope().map(s -> (ClassOrInterfaceType) s.accept(this, arg)).orElse(null); 263 NodeList<Type> typeArguments = modifyList(n.getTypeArguments(), arg); 264 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 265 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 266 if (name == null) 267 return null; 268 n.setName(name); 269 n.setScope(scope); 270 n.setTypeArguments(typeArguments); 271 n.setAnnotations(annotations); 272 n.setComment(comment); 273 return n; 274 } 275 276 @Override visit(final CompilationUnit n, final A arg)277 public Visitable visit(final CompilationUnit n, final A arg) { 278 NodeList<ImportDeclaration> imports = modifyList(n.getImports(), arg); 279 ModuleDeclaration module = n.getModule().map(s -> (ModuleDeclaration) s.accept(this, arg)).orElse(null); 280 PackageDeclaration packageDeclaration = n.getPackageDeclaration().map(s -> (PackageDeclaration) s.accept(this, arg)).orElse(null); 281 NodeList<TypeDeclaration<?>> types = modifyList(n.getTypes(), arg); 282 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 283 n.setImports(imports); 284 n.setModule(module); 285 n.setPackageDeclaration(packageDeclaration); 286 n.setTypes(types); 287 n.setComment(comment); 288 return n; 289 } 290 291 @Override visit(final ConditionalExpr n, final A arg)292 public Visitable visit(final ConditionalExpr n, final A arg) { 293 Expression condition = (Expression) n.getCondition().accept(this, arg); 294 Expression elseExpr = (Expression) n.getElseExpr().accept(this, arg); 295 Expression thenExpr = (Expression) n.getThenExpr().accept(this, arg); 296 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 297 if (condition == null || elseExpr == null || thenExpr == null) 298 return null; 299 n.setCondition(condition); 300 n.setElseExpr(elseExpr); 301 n.setThenExpr(thenExpr); 302 n.setComment(comment); 303 return n; 304 } 305 306 @Override visit(final ConstructorDeclaration n, final A arg)307 public Visitable visit(final ConstructorDeclaration n, final A arg) { 308 BlockStmt body = (BlockStmt) n.getBody().accept(this, arg); 309 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 310 SimpleName name = (SimpleName) n.getName().accept(this, arg); 311 NodeList<Parameter> parameters = modifyList(n.getParameters(), arg); 312 ReceiverParameter receiverParameter = n.getReceiverParameter().map(s -> (ReceiverParameter) s.accept(this, arg)).orElse(null); 313 NodeList<ReferenceType> thrownExceptions = modifyList(n.getThrownExceptions(), arg); 314 NodeList<TypeParameter> typeParameters = modifyList(n.getTypeParameters(), arg); 315 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 316 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 317 if (body == null || name == null) 318 return null; 319 n.setBody(body); 320 n.setModifiers(modifiers); 321 n.setName(name); 322 n.setParameters(parameters); 323 n.setReceiverParameter(receiverParameter); 324 n.setThrownExceptions(thrownExceptions); 325 n.setTypeParameters(typeParameters); 326 n.setAnnotations(annotations); 327 n.setComment(comment); 328 return n; 329 } 330 331 @Override visit(final ContinueStmt n, final A arg)332 public Visitable visit(final ContinueStmt n, final A arg) { 333 SimpleName label = n.getLabel().map(s -> (SimpleName) s.accept(this, arg)).orElse(null); 334 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 335 n.setLabel(label); 336 n.setComment(comment); 337 return n; 338 } 339 340 @Override visit(final DoStmt n, final A arg)341 public Visitable visit(final DoStmt n, final A arg) { 342 Statement body = (Statement) n.getBody().accept(this, arg); 343 Expression condition = (Expression) n.getCondition().accept(this, arg); 344 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 345 if (body == null || condition == null) 346 return null; 347 n.setBody(body); 348 n.setCondition(condition); 349 n.setComment(comment); 350 return n; 351 } 352 353 @Override visit(final DoubleLiteralExpr n, final A arg)354 public Visitable visit(final DoubleLiteralExpr n, final A arg) { 355 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 356 n.setComment(comment); 357 return n; 358 } 359 360 @Override visit(final EmptyStmt n, final A arg)361 public Visitable visit(final EmptyStmt n, final A arg) { 362 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 363 n.setComment(comment); 364 return n; 365 } 366 367 @Override visit(final EnclosedExpr n, final A arg)368 public Visitable visit(final EnclosedExpr n, final A arg) { 369 Expression inner = (Expression) n.getInner().accept(this, arg); 370 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 371 if (inner == null) 372 return null; 373 n.setInner(inner); 374 n.setComment(comment); 375 return n; 376 } 377 378 @Override visit(final EnumConstantDeclaration n, final A arg)379 public Visitable visit(final EnumConstantDeclaration n, final A arg) { 380 NodeList<Expression> arguments = modifyList(n.getArguments(), arg); 381 NodeList<BodyDeclaration<?>> classBody = modifyList(n.getClassBody(), arg); 382 SimpleName name = (SimpleName) n.getName().accept(this, arg); 383 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 384 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 385 if (name == null) 386 return null; 387 n.setArguments(arguments); 388 n.setClassBody(classBody); 389 n.setName(name); 390 n.setAnnotations(annotations); 391 n.setComment(comment); 392 return n; 393 } 394 395 @Override visit(final EnumDeclaration n, final A arg)396 public Visitable visit(final EnumDeclaration n, final A arg) { 397 NodeList<EnumConstantDeclaration> entries = modifyList(n.getEntries(), arg); 398 NodeList<ClassOrInterfaceType> implementedTypes = modifyList(n.getImplementedTypes(), arg); 399 NodeList<BodyDeclaration<?>> members = modifyList(n.getMembers(), arg); 400 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 401 SimpleName name = (SimpleName) n.getName().accept(this, arg); 402 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 403 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 404 if (name == null) 405 return null; 406 n.setEntries(entries); 407 n.setImplementedTypes(implementedTypes); 408 n.setMembers(members); 409 n.setModifiers(modifiers); 410 n.setName(name); 411 n.setAnnotations(annotations); 412 n.setComment(comment); 413 return n; 414 } 415 416 @Override visit(final ExplicitConstructorInvocationStmt n, final A arg)417 public Visitable visit(final ExplicitConstructorInvocationStmt n, final A arg) { 418 NodeList<Expression> arguments = modifyList(n.getArguments(), arg); 419 Expression expression = n.getExpression().map(s -> (Expression) s.accept(this, arg)).orElse(null); 420 NodeList<Type> typeArguments = modifyList(n.getTypeArguments(), arg); 421 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 422 n.setArguments(arguments); 423 n.setExpression(expression); 424 n.setTypeArguments(typeArguments); 425 n.setComment(comment); 426 return n; 427 } 428 429 @Override visit(final ExpressionStmt n, final A arg)430 public Visitable visit(final ExpressionStmt n, final A arg) { 431 Expression expression = (Expression) n.getExpression().accept(this, arg); 432 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 433 if (expression == null) 434 return null; 435 n.setExpression(expression); 436 n.setComment(comment); 437 return n; 438 } 439 440 @Override visit(final FieldAccessExpr n, final A arg)441 public Visitable visit(final FieldAccessExpr n, final A arg) { 442 SimpleName name = (SimpleName) n.getName().accept(this, arg); 443 Expression scope = (Expression) n.getScope().accept(this, arg); 444 NodeList<Type> typeArguments = modifyList(n.getTypeArguments(), arg); 445 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 446 if (name == null || scope == null) 447 return null; 448 n.setName(name); 449 n.setScope(scope); 450 n.setTypeArguments(typeArguments); 451 n.setComment(comment); 452 return n; 453 } 454 455 @Override visit(final FieldDeclaration n, final A arg)456 public Visitable visit(final FieldDeclaration n, final A arg) { 457 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 458 NodeList<VariableDeclarator> variables = modifyList(n.getVariables(), arg); 459 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 460 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 461 if (variables.isEmpty()) 462 return null; 463 n.setModifiers(modifiers); 464 n.setVariables(variables); 465 n.setAnnotations(annotations); 466 n.setComment(comment); 467 return n; 468 } 469 470 @Override visit(final ForEachStmt n, final A arg)471 public Visitable visit(final ForEachStmt n, final A arg) { 472 Statement body = (Statement) n.getBody().accept(this, arg); 473 Expression iterable = (Expression) n.getIterable().accept(this, arg); 474 VariableDeclarationExpr variable = (VariableDeclarationExpr) n.getVariable().accept(this, arg); 475 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 476 if (body == null || iterable == null || variable == null) 477 return null; 478 n.setBody(body); 479 n.setIterable(iterable); 480 n.setVariable(variable); 481 n.setComment(comment); 482 return n; 483 } 484 485 @Override visit(final ForStmt n, final A arg)486 public Visitable visit(final ForStmt n, final A arg) { 487 Statement body = (Statement) n.getBody().accept(this, arg); 488 Expression compare = n.getCompare().map(s -> (Expression) s.accept(this, arg)).orElse(null); 489 NodeList<Expression> initialization = modifyList(n.getInitialization(), arg); 490 NodeList<Expression> update = modifyList(n.getUpdate(), arg); 491 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 492 if (body == null) 493 return null; 494 n.setBody(body); 495 n.setCompare(compare); 496 n.setInitialization(initialization); 497 n.setUpdate(update); 498 n.setComment(comment); 499 return n; 500 } 501 502 @Override visit(final IfStmt n, final A arg)503 public Visitable visit(final IfStmt n, final A arg) { 504 Expression condition = (Expression) n.getCondition().accept(this, arg); 505 Statement elseStmt = n.getElseStmt().map(s -> (Statement) s.accept(this, arg)).orElse(null); 506 Statement thenStmt = (Statement) n.getThenStmt().accept(this, arg); 507 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 508 if (condition == null || thenStmt == null) 509 return null; 510 n.setCondition(condition); 511 n.setElseStmt(elseStmt); 512 n.setThenStmt(thenStmt); 513 n.setComment(comment); 514 return n; 515 } 516 517 @Override visit(final InitializerDeclaration n, final A arg)518 public Visitable visit(final InitializerDeclaration n, final A arg) { 519 BlockStmt body = (BlockStmt) n.getBody().accept(this, arg); 520 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 521 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 522 if (body == null) 523 return null; 524 n.setBody(body); 525 n.setAnnotations(annotations); 526 n.setComment(comment); 527 return n; 528 } 529 530 @Override visit(final InstanceOfExpr n, final A arg)531 public Visitable visit(final InstanceOfExpr n, final A arg) { 532 Expression expression = (Expression) n.getExpression().accept(this, arg); 533 ReferenceType type = (ReferenceType) n.getType().accept(this, arg); 534 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 535 if (expression == null || type == null) 536 return null; 537 n.setExpression(expression); 538 n.setType(type); 539 n.setComment(comment); 540 return n; 541 } 542 543 @Override visit(final IntegerLiteralExpr n, final A arg)544 public Visitable visit(final IntegerLiteralExpr n, final A arg) { 545 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 546 n.setComment(comment); 547 return n; 548 } 549 550 @Override visit(final JavadocComment n, final A arg)551 public Visitable visit(final JavadocComment n, final A arg) { 552 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 553 n.setComment(comment); 554 return n; 555 } 556 557 @Override visit(final LabeledStmt n, final A arg)558 public Visitable visit(final LabeledStmt n, final A arg) { 559 SimpleName label = (SimpleName) n.getLabel().accept(this, arg); 560 Statement statement = (Statement) n.getStatement().accept(this, arg); 561 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 562 if (label == null || statement == null) 563 return null; 564 n.setLabel(label); 565 n.setStatement(statement); 566 n.setComment(comment); 567 return n; 568 } 569 570 @Override visit(final LongLiteralExpr n, final A arg)571 public Visitable visit(final LongLiteralExpr n, final A arg) { 572 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 573 n.setComment(comment); 574 return n; 575 } 576 577 @Override visit(final MarkerAnnotationExpr n, final A arg)578 public Visitable visit(final MarkerAnnotationExpr n, final A arg) { 579 Name name = (Name) n.getName().accept(this, arg); 580 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 581 if (name == null) 582 return null; 583 n.setName(name); 584 n.setComment(comment); 585 return n; 586 } 587 588 @Override visit(final MemberValuePair n, final A arg)589 public Visitable visit(final MemberValuePair n, final A arg) { 590 SimpleName name = (SimpleName) n.getName().accept(this, arg); 591 Expression value = (Expression) n.getValue().accept(this, arg); 592 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 593 if (name == null || value == null) 594 return null; 595 n.setName(name); 596 n.setValue(value); 597 n.setComment(comment); 598 return n; 599 } 600 601 @Override visit(final MethodCallExpr n, final A arg)602 public Visitable visit(final MethodCallExpr n, final A arg) { 603 NodeList<Expression> arguments = modifyList(n.getArguments(), arg); 604 SimpleName name = (SimpleName) n.getName().accept(this, arg); 605 Expression scope = n.getScope().map(s -> (Expression) s.accept(this, arg)).orElse(null); 606 NodeList<Type> typeArguments = modifyList(n.getTypeArguments(), arg); 607 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 608 if (name == null) 609 return null; 610 n.setArguments(arguments); 611 n.setName(name); 612 n.setScope(scope); 613 n.setTypeArguments(typeArguments); 614 n.setComment(comment); 615 return n; 616 } 617 618 @Override visit(final MethodDeclaration n, final A arg)619 public Visitable visit(final MethodDeclaration n, final A arg) { 620 BlockStmt body = n.getBody().map(s -> (BlockStmt) s.accept(this, arg)).orElse(null); 621 Type type = (Type) n.getType().accept(this, arg); 622 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 623 SimpleName name = (SimpleName) n.getName().accept(this, arg); 624 NodeList<Parameter> parameters = modifyList(n.getParameters(), arg); 625 ReceiverParameter receiverParameter = n.getReceiverParameter().map(s -> (ReceiverParameter) s.accept(this, arg)).orElse(null); 626 NodeList<ReferenceType> thrownExceptions = modifyList(n.getThrownExceptions(), arg); 627 NodeList<TypeParameter> typeParameters = modifyList(n.getTypeParameters(), arg); 628 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 629 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 630 if (type == null || name == null) 631 return null; 632 n.setBody(body); 633 n.setType(type); 634 n.setModifiers(modifiers); 635 n.setName(name); 636 n.setParameters(parameters); 637 n.setReceiverParameter(receiverParameter); 638 n.setThrownExceptions(thrownExceptions); 639 n.setTypeParameters(typeParameters); 640 n.setAnnotations(annotations); 641 n.setComment(comment); 642 return n; 643 } 644 645 @Override visit(final NameExpr n, final A arg)646 public Visitable visit(final NameExpr n, final A arg) { 647 SimpleName name = (SimpleName) n.getName().accept(this, arg); 648 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 649 if (name == null) 650 return null; 651 n.setName(name); 652 n.setComment(comment); 653 return n; 654 } 655 656 @Override visit(final NormalAnnotationExpr n, final A arg)657 public Visitable visit(final NormalAnnotationExpr n, final A arg) { 658 NodeList<MemberValuePair> pairs = modifyList(n.getPairs(), arg); 659 Name name = (Name) n.getName().accept(this, arg); 660 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 661 if (name == null) 662 return null; 663 n.setPairs(pairs); 664 n.setName(name); 665 n.setComment(comment); 666 return n; 667 } 668 669 @Override visit(final NullLiteralExpr n, final A arg)670 public Visitable visit(final NullLiteralExpr n, final A arg) { 671 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 672 n.setComment(comment); 673 return n; 674 } 675 676 @Override visit(final ObjectCreationExpr n, final A arg)677 public Visitable visit(final ObjectCreationExpr n, final A arg) { 678 NodeList<BodyDeclaration<?>> anonymousClassBody = modifyList(n.getAnonymousClassBody(), arg); 679 NodeList<Expression> arguments = modifyList(n.getArguments(), arg); 680 Expression scope = n.getScope().map(s -> (Expression) s.accept(this, arg)).orElse(null); 681 ClassOrInterfaceType type = (ClassOrInterfaceType) n.getType().accept(this, arg); 682 NodeList<Type> typeArguments = modifyList(n.getTypeArguments(), arg); 683 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 684 if (type == null) 685 return null; 686 n.setAnonymousClassBody(anonymousClassBody); 687 n.setArguments(arguments); 688 n.setScope(scope); 689 n.setType(type); 690 n.setTypeArguments(typeArguments); 691 n.setComment(comment); 692 return n; 693 } 694 695 @Override visit(final PackageDeclaration n, final A arg)696 public Visitable visit(final PackageDeclaration n, final A arg) { 697 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 698 Name name = (Name) n.getName().accept(this, arg); 699 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 700 if (name == null) 701 return null; 702 n.setAnnotations(annotations); 703 n.setName(name); 704 n.setComment(comment); 705 return n; 706 } 707 708 @Override visit(final Parameter n, final A arg)709 public Visitable visit(final Parameter n, final A arg) { 710 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 711 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 712 SimpleName name = (SimpleName) n.getName().accept(this, arg); 713 Type type = (Type) n.getType().accept(this, arg); 714 NodeList<AnnotationExpr> varArgsAnnotations = modifyList(n.getVarArgsAnnotations(), arg); 715 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 716 if (name == null || type == null) 717 return null; 718 n.setAnnotations(annotations); 719 n.setModifiers(modifiers); 720 n.setName(name); 721 n.setType(type); 722 n.setVarArgsAnnotations(varArgsAnnotations); 723 n.setComment(comment); 724 return n; 725 } 726 727 @Override visit(final Name n, final A arg)728 public Visitable visit(final Name n, final A arg) { 729 Name qualifier = n.getQualifier().map(s -> (Name) s.accept(this, arg)).orElse(null); 730 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 731 n.setQualifier(qualifier); 732 n.setComment(comment); 733 return n; 734 } 735 736 @Override visit(final PrimitiveType n, final A arg)737 public Visitable visit(final PrimitiveType n, final A arg) { 738 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 739 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 740 n.setAnnotations(annotations); 741 n.setComment(comment); 742 return n; 743 } 744 745 @Override visit(final SimpleName n, final A arg)746 public Visitable visit(final SimpleName n, final A arg) { 747 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 748 n.setComment(comment); 749 return n; 750 } 751 752 @Override visit(final ArrayType n, final A arg)753 public Visitable visit(final ArrayType n, final A arg) { 754 Type componentType = (Type) n.getComponentType().accept(this, arg); 755 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 756 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 757 if (componentType == null) 758 return null; 759 n.setComponentType(componentType); 760 n.setAnnotations(annotations); 761 n.setComment(comment); 762 return n; 763 } 764 765 @Override visit(final ArrayCreationLevel n, final A arg)766 public Visitable visit(final ArrayCreationLevel n, final A arg) { 767 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 768 Expression dimension = n.getDimension().map(s -> (Expression) s.accept(this, arg)).orElse(null); 769 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 770 n.setAnnotations(annotations); 771 n.setDimension(dimension); 772 n.setComment(comment); 773 return n; 774 } 775 776 @Override visit(final IntersectionType n, final A arg)777 public Visitable visit(final IntersectionType n, final A arg) { 778 NodeList<ReferenceType> elements = modifyList(n.getElements(), arg); 779 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 780 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 781 if (elements.isEmpty()) 782 return null; 783 n.setElements(elements); 784 n.setAnnotations(annotations); 785 n.setComment(comment); 786 return n; 787 } 788 789 @Override visit(final UnionType n, final A arg)790 public Visitable visit(final UnionType n, final A arg) { 791 NodeList<ReferenceType> elements = modifyList(n.getElements(), arg); 792 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 793 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 794 if (elements.isEmpty()) 795 return null; 796 n.setElements(elements); 797 n.setAnnotations(annotations); 798 n.setComment(comment); 799 return n; 800 } 801 802 @Override visit(final ReturnStmt n, final A arg)803 public Visitable visit(final ReturnStmt n, final A arg) { 804 Expression expression = n.getExpression().map(s -> (Expression) s.accept(this, arg)).orElse(null); 805 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 806 n.setExpression(expression); 807 n.setComment(comment); 808 return n; 809 } 810 811 @Override visit(final SingleMemberAnnotationExpr n, final A arg)812 public Visitable visit(final SingleMemberAnnotationExpr n, final A arg) { 813 Expression memberValue = (Expression) n.getMemberValue().accept(this, arg); 814 Name name = (Name) n.getName().accept(this, arg); 815 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 816 if (memberValue == null || name == null) 817 return null; 818 n.setMemberValue(memberValue); 819 n.setName(name); 820 n.setComment(comment); 821 return n; 822 } 823 824 @Override visit(final StringLiteralExpr n, final A arg)825 public Visitable visit(final StringLiteralExpr n, final A arg) { 826 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 827 n.setComment(comment); 828 return n; 829 } 830 831 @Override visit(final SuperExpr n, final A arg)832 public Visitable visit(final SuperExpr n, final A arg) { 833 Name typeName = n.getTypeName().map(s -> (Name) s.accept(this, arg)).orElse(null); 834 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 835 n.setTypeName(typeName); 836 n.setComment(comment); 837 return n; 838 } 839 840 @Override visit(final SwitchEntry n, final A arg)841 public Visitable visit(final SwitchEntry n, final A arg) { 842 NodeList<Expression> labels = modifyList(n.getLabels(), arg); 843 NodeList<Statement> statements = modifyList(n.getStatements(), arg); 844 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 845 n.setLabels(labels); 846 n.setStatements(statements); 847 n.setComment(comment); 848 return n; 849 } 850 851 @Override visit(final SwitchStmt n, final A arg)852 public Visitable visit(final SwitchStmt n, final A arg) { 853 NodeList<SwitchEntry> entries = modifyList(n.getEntries(), arg); 854 Expression selector = (Expression) n.getSelector().accept(this, arg); 855 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 856 if (selector == null) 857 return null; 858 n.setEntries(entries); 859 n.setSelector(selector); 860 n.setComment(comment); 861 return n; 862 } 863 864 @Override visit(final SynchronizedStmt n, final A arg)865 public Visitable visit(final SynchronizedStmt n, final A arg) { 866 BlockStmt body = (BlockStmt) n.getBody().accept(this, arg); 867 Expression expression = (Expression) n.getExpression().accept(this, arg); 868 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 869 if (body == null || expression == null) 870 return null; 871 n.setBody(body); 872 n.setExpression(expression); 873 n.setComment(comment); 874 return n; 875 } 876 877 @Override visit(final ThisExpr n, final A arg)878 public Visitable visit(final ThisExpr n, final A arg) { 879 Name typeName = n.getTypeName().map(s -> (Name) s.accept(this, arg)).orElse(null); 880 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 881 n.setTypeName(typeName); 882 n.setComment(comment); 883 return n; 884 } 885 886 @Override visit(final ThrowStmt n, final A arg)887 public Visitable visit(final ThrowStmt n, final A arg) { 888 Expression expression = (Expression) n.getExpression().accept(this, arg); 889 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 890 if (expression == null) 891 return null; 892 n.setExpression(expression); 893 n.setComment(comment); 894 return n; 895 } 896 897 @Override visit(final TryStmt n, final A arg)898 public Visitable visit(final TryStmt n, final A arg) { 899 NodeList<CatchClause> catchClauses = modifyList(n.getCatchClauses(), arg); 900 BlockStmt finallyBlock = n.getFinallyBlock().map(s -> (BlockStmt) s.accept(this, arg)).orElse(null); 901 NodeList<Expression> resources = modifyList(n.getResources(), arg); 902 BlockStmt tryBlock = (BlockStmt) n.getTryBlock().accept(this, arg); 903 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 904 if (tryBlock == null) 905 return null; 906 n.setCatchClauses(catchClauses); 907 n.setFinallyBlock(finallyBlock); 908 n.setResources(resources); 909 n.setTryBlock(tryBlock); 910 n.setComment(comment); 911 return n; 912 } 913 914 @Override visit(final LocalClassDeclarationStmt n, final A arg)915 public Visitable visit(final LocalClassDeclarationStmt n, final A arg) { 916 ClassOrInterfaceDeclaration classDeclaration = (ClassOrInterfaceDeclaration) n.getClassDeclaration().accept(this, arg); 917 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 918 if (classDeclaration == null) 919 return null; 920 n.setClassDeclaration(classDeclaration); 921 n.setComment(comment); 922 return n; 923 } 924 925 @Override visit(final TypeParameter n, final A arg)926 public Visitable visit(final TypeParameter n, final A arg) { 927 SimpleName name = (SimpleName) n.getName().accept(this, arg); 928 NodeList<ClassOrInterfaceType> typeBound = modifyList(n.getTypeBound(), arg); 929 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 930 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 931 if (name == null) 932 return null; 933 n.setName(name); 934 n.setTypeBound(typeBound); 935 n.setAnnotations(annotations); 936 n.setComment(comment); 937 return n; 938 } 939 940 @Override visit(final UnaryExpr n, final A arg)941 public Visitable visit(final UnaryExpr n, final A arg) { 942 Expression expression = (Expression) n.getExpression().accept(this, arg); 943 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 944 if (expression == null) 945 return null; 946 n.setExpression(expression); 947 n.setComment(comment); 948 return n; 949 } 950 951 @Override visit(final UnknownType n, final A arg)952 public Visitable visit(final UnknownType n, final A arg) { 953 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 954 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 955 n.setAnnotations(annotations); 956 n.setComment(comment); 957 return n; 958 } 959 960 @Override visit(final VariableDeclarationExpr n, final A arg)961 public Visitable visit(final VariableDeclarationExpr n, final A arg) { 962 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 963 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 964 NodeList<VariableDeclarator> variables = modifyList(n.getVariables(), arg); 965 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 966 if (variables.isEmpty()) 967 return null; 968 n.setAnnotations(annotations); 969 n.setModifiers(modifiers); 970 n.setVariables(variables); 971 n.setComment(comment); 972 return n; 973 } 974 975 @Override visit(final VariableDeclarator n, final A arg)976 public Visitable visit(final VariableDeclarator n, final A arg) { 977 Expression initializer = n.getInitializer().map(s -> (Expression) s.accept(this, arg)).orElse(null); 978 SimpleName name = (SimpleName) n.getName().accept(this, arg); 979 Type type = (Type) n.getType().accept(this, arg); 980 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 981 if (name == null || type == null) 982 return null; 983 n.setInitializer(initializer); 984 n.setName(name); 985 n.setType(type); 986 n.setComment(comment); 987 return n; 988 } 989 990 @Override visit(final VoidType n, final A arg)991 public Visitable visit(final VoidType n, final A arg) { 992 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 993 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 994 n.setAnnotations(annotations); 995 n.setComment(comment); 996 return n; 997 } 998 999 @Override visit(final WhileStmt n, final A arg)1000 public Visitable visit(final WhileStmt n, final A arg) { 1001 Statement body = (Statement) n.getBody().accept(this, arg); 1002 Expression condition = (Expression) n.getCondition().accept(this, arg); 1003 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1004 if (body == null || condition == null) 1005 return null; 1006 n.setBody(body); 1007 n.setCondition(condition); 1008 n.setComment(comment); 1009 return n; 1010 } 1011 1012 @Override visit(final WildcardType n, final A arg)1013 public Visitable visit(final WildcardType n, final A arg) { 1014 ReferenceType extendedType = n.getExtendedType().map(s -> (ReferenceType) s.accept(this, arg)).orElse(null); 1015 ReferenceType superType = n.getSuperType().map(s -> (ReferenceType) s.accept(this, arg)).orElse(null); 1016 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 1017 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1018 n.setExtendedType(extendedType); 1019 n.setSuperType(superType); 1020 n.setAnnotations(annotations); 1021 n.setComment(comment); 1022 return n; 1023 } 1024 1025 @Override visit(final LambdaExpr n, final A arg)1026 public Visitable visit(final LambdaExpr n, final A arg) { 1027 Statement body = (Statement) n.getBody().accept(this, arg); 1028 NodeList<Parameter> parameters = modifyList(n.getParameters(), arg); 1029 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1030 if (body == null) 1031 return null; 1032 n.setBody(body); 1033 n.setParameters(parameters); 1034 n.setComment(comment); 1035 return n; 1036 } 1037 1038 @Override visit(final MethodReferenceExpr n, final A arg)1039 public Visitable visit(final MethodReferenceExpr n, final A arg) { 1040 Expression scope = (Expression) n.getScope().accept(this, arg); 1041 NodeList<Type> typeArguments = modifyList(n.getTypeArguments(), arg); 1042 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1043 if (scope == null) 1044 return null; 1045 n.setScope(scope); 1046 n.setTypeArguments(typeArguments); 1047 n.setComment(comment); 1048 return n; 1049 } 1050 1051 @Override visit(final TypeExpr n, final A arg)1052 public Visitable visit(final TypeExpr n, final A arg) { 1053 Type type = (Type) n.getType().accept(this, arg); 1054 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1055 if (type == null) 1056 return null; 1057 n.setType(type); 1058 n.setComment(comment); 1059 return n; 1060 } 1061 1062 @Override visit(NodeList n, A arg)1063 public Visitable visit(NodeList n, A arg) { 1064 if (n.isEmpty()) { 1065 return n; 1066 } 1067 final List<Pair<Node, Node>> changeList = new ArrayList<>(); 1068 final List<Node> listCopy = new ArrayList<>(n); 1069 for (Node node : listCopy) { 1070 final Node newNode = (Node) node.accept(this, arg); 1071 changeList.add(new Pair<>(node, newNode)); 1072 } 1073 for (Pair<Node, Node> change : changeList) { 1074 if (change.b == null) { 1075 removeElementByObjectIdentity(n, change.a); 1076 } else { 1077 replaceElementByObjectIdentity(n, change.a, change.b); 1078 } 1079 } 1080 return n; 1081 } 1082 1083 @Override visit(final ImportDeclaration n, final A arg)1084 public Node visit(final ImportDeclaration n, final A arg) { 1085 Name name = (Name) n.getName().accept(this, arg); 1086 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1087 if (name == null) 1088 return null; 1089 n.setName(name); 1090 n.setComment(comment); 1091 return n; 1092 } 1093 1094 @Override visit(final BlockComment n, final A arg)1095 public Visitable visit(final BlockComment n, final A arg) { 1096 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1097 n.setComment(comment); 1098 return n; 1099 } 1100 1101 @Override visit(final LineComment n, final A arg)1102 public Visitable visit(final LineComment n, final A arg) { 1103 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1104 n.setComment(comment); 1105 return n; 1106 } 1107 modifyList(NodeList<N> list, A arg)1108 private <N extends Node> NodeList<N> modifyList(NodeList<N> list, A arg) { 1109 return (NodeList<N>) list.accept(this, arg); 1110 } 1111 modifyList(Optional<NodeList<N>> list, A arg)1112 private <N extends Node> NodeList<N> modifyList(Optional<NodeList<N>> list, A arg) { 1113 return list.map(ns -> modifyList(ns, arg)).orElse(null); 1114 } 1115 visit(final ModuleDeclaration n, final A arg)1116 public Visitable visit(final ModuleDeclaration n, final A arg) { 1117 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 1118 NodeList<ModuleDirective> directives = modifyList(n.getDirectives(), arg); 1119 Name name = (Name) n.getName().accept(this, arg); 1120 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1121 if (name == null) 1122 return null; 1123 n.setAnnotations(annotations); 1124 n.setDirectives(directives); 1125 n.setName(name); 1126 n.setComment(comment); 1127 return n; 1128 } 1129 visit(final ModuleRequiresDirective n, final A arg)1130 public Visitable visit(final ModuleRequiresDirective n, final A arg) { 1131 NodeList<Modifier> modifiers = modifyList(n.getModifiers(), arg); 1132 Name name = (Name) n.getName().accept(this, arg); 1133 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1134 if (name == null) 1135 return null; 1136 n.setModifiers(modifiers); 1137 n.setName(name); 1138 n.setComment(comment); 1139 return n; 1140 } 1141 1142 @Override() visit(final ModuleExportsDirective n, final A arg)1143 public Visitable visit(final ModuleExportsDirective n, final A arg) { 1144 NodeList<Name> moduleNames = modifyList(n.getModuleNames(), arg); 1145 Name name = (Name) n.getName().accept(this, arg); 1146 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1147 if (name == null) 1148 return null; 1149 n.setModuleNames(moduleNames); 1150 n.setName(name); 1151 n.setComment(comment); 1152 return n; 1153 } 1154 1155 @Override() visit(final ModuleProvidesDirective n, final A arg)1156 public Visitable visit(final ModuleProvidesDirective n, final A arg) { 1157 Name name = (Name) n.getName().accept(this, arg); 1158 NodeList<Name> with = modifyList(n.getWith(), arg); 1159 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1160 if (name == null) 1161 return null; 1162 n.setName(name); 1163 n.setWith(with); 1164 n.setComment(comment); 1165 return n; 1166 } 1167 1168 @Override() visit(final ModuleUsesDirective n, final A arg)1169 public Visitable visit(final ModuleUsesDirective n, final A arg) { 1170 Name name = (Name) n.getName().accept(this, arg); 1171 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1172 if (name == null) 1173 return null; 1174 n.setName(name); 1175 n.setComment(comment); 1176 return n; 1177 } 1178 1179 @Override visit(final ModuleOpensDirective n, final A arg)1180 public Visitable visit(final ModuleOpensDirective n, final A arg) { 1181 NodeList<Name> moduleNames = modifyList(n.getModuleNames(), arg); 1182 Name name = (Name) n.getName().accept(this, arg); 1183 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1184 if (name == null) 1185 return null; 1186 n.setModuleNames(moduleNames); 1187 n.setName(name); 1188 n.setComment(comment); 1189 return n; 1190 } 1191 1192 @Override visit(final UnparsableStmt n, final A arg)1193 public Visitable visit(final UnparsableStmt n, final A arg) { 1194 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1195 n.setComment(comment); 1196 return n; 1197 } 1198 1199 @Override visit(final ReceiverParameter n, final A arg)1200 public Visitable visit(final ReceiverParameter n, final A arg) { 1201 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 1202 Name name = (Name) n.getName().accept(this, arg); 1203 Type type = (Type) n.getType().accept(this, arg); 1204 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1205 if (name == null || type == null) 1206 return null; 1207 n.setAnnotations(annotations); 1208 n.setName(name); 1209 n.setType(type); 1210 n.setComment(comment); 1211 return n; 1212 } 1213 1214 @Override visit(final VarType n, final A arg)1215 public Visitable visit(final VarType n, final A arg) { 1216 NodeList<AnnotationExpr> annotations = modifyList(n.getAnnotations(), arg); 1217 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1218 n.setAnnotations(annotations); 1219 n.setComment(comment); 1220 return n; 1221 } 1222 1223 @Override visit(final Modifier n, final A arg)1224 public Visitable visit(final Modifier n, final A arg) { 1225 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1226 n.setComment(comment); 1227 return n; 1228 } 1229 1230 @Override visit(final SwitchExpr n, final A arg)1231 public Visitable visit(final SwitchExpr n, final A arg) { 1232 NodeList<SwitchEntry> entries = modifyList(n.getEntries(), arg); 1233 Expression selector = (Expression) n.getSelector().accept(this, arg); 1234 Comment comment = n.getComment().map(s -> (Comment) s.accept(this, arg)).orElse(null); 1235 if (selector == null) 1236 return null; 1237 n.setEntries(entries); 1238 n.setSelector(selector); 1239 n.setComment(comment); 1240 return n; 1241 } 1242 } 1243