  Line 120) list.size() ==> java.util.List.size()
  Line 121) list.get(i) ==> java.util.List.get(int)
  Line 122) list.remove(i) ==> java.util.List.remove(int)
  Line 128) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 129) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 130) n.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 132) members.size() ==> java.util.List.size()
  Line 133) members.set(i, (BodyDeclaration<?>) members.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 133) members.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 133) members.get(i) ==> java.util.List.get(int)
  Line 135) removeNulls(members) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 141) n.getAnnotations() ==> com.github.javaparser.ast.nodeTypes.NodeWithAnnotations.getAnnotations()
  Line 143) annotations.size() ==> java.util.List.size()
  Line 144) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 144) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 144) annotations.get(i) ==> java.util.List.get(int)
  Line 146) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 151) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 152) n.getAnnotations() ==> com.github.javaparser.ast.body.BodyDeclaration.getAnnotations()
  Line 154) annotations.size() ==> java.util.List.size()
  Line 155) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 155) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 155) annotations.get(i) ==> java.util.List.get(int)
  Line 157) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 159) n.setType((Type) n.getType().accept(this, arg)) ==> com.github.javaparser.ast.body.AnnotationMemberDeclaration.setType(com.github.javaparser.ast.type.Type)
  Line 159) n.getType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 159) n.getType() ==> com.github.javaparser.ast.body.AnnotationMemberDeclaration.getType()
  Line 160) n.getDefaultValue() ==> com.github.javaparser.ast.body.AnnotationMemberDeclaration.getDefaultValue()
  Line 161) n.setDefaultValue((Expression) n.getDefaultValue().accept(this, arg)) ==> com.github.javaparser.ast.body.AnnotationMemberDeclaration.setDefaultValue(com.github.javaparser.ast.expr.Expression)
  Line 161) n.getDefaultValue().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 161) n.getDefaultValue() ==> com.github.javaparser.ast.body.AnnotationMemberDeclaration.getDefaultValue()
  Line 167) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 168) n.setName((Expression) n.getName().accept(this, arg)) ==> com.github.javaparser.ast.expr.ArrayAccessExpr.setName(com.github.javaparser.ast.expr.Expression)
  Line 168) n.getName().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 168) n.getName() ==> com.github.javaparser.ast.expr.ArrayAccessExpr.getName()
  Line 169) n.setIndex((Expression) n.getIndex().accept(this, arg)) ==> com.github.javaparser.ast.expr.ArrayAccessExpr.setIndex(com.github.javaparser.ast.expr.Expression)
  Line 169) n.getIndex().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 169) n.getIndex() ==> com.github.javaparser.ast.expr.ArrayAccessExpr.getIndex()
  Line 174) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 175) n.setType((Type) n.getType().accept(this, arg)) ==> com.github.javaparser.ast.expr.ArrayCreationExpr.setType(com.github.javaparser.ast.type.Type)
  Line 175) n.getType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 175) n.getType() ==> com.github.javaparser.ast.expr.ArrayCreationExpr.getType()
  Line 177) n.getLevels() ==> com.github.javaparser.ast.expr.ArrayCreationExpr.getLevels()
  Line 178) values.size() ==> java.util.List.size()
  Line 179) values.set(i, (ArrayCreationLevel) values.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 179) values.get(i).accept(this, arg) ==> com.github.javaparser.ast.ArrayCreationLevel.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 179) values.get(i) ==> java.util.List.get(int)
  Line 181) removeNulls(values) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 183) n.getInitializer() ==> com.github.javaparser.ast.expr.ArrayCreationExpr.getInitializer()
  Line 184) n.setInitializer((ArrayInitializerExpr) n.getInitializer().accept(this, arg)) ==> com.github.javaparser.ast.expr.ArrayCreationExpr.setInitializer(com.github.javaparser.ast.expr.ArrayInitializerExpr)
  Line 184) n.getInitializer().accept(this, arg) ==> com.github.javaparser.ast.expr.ArrayInitializerExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 184) n.getInitializer() ==> com.github.javaparser.ast.expr.ArrayCreationExpr.getInitializer()
  Line 190) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 191) n.getValues() ==> com.github.javaparser.ast.expr.ArrayInitializerExpr.getValues()
  Line 192) n.getValues() ==> com.github.javaparser.ast.expr.ArrayInitializerExpr.getValues()
  Line 194) values.size() ==> java.util.List.size()
  Line 195) values.set(i, (Expression) values.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 195) values.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 195) values.get(i) ==> java.util.List.get(int)
  Line 197) removeNulls(values) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 204) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 205) n.setCheck((Expression) n.getCheck().accept(this, arg)) ==> com.github.javaparser.ast.stmt.AssertStmt.setCheck(com.github.javaparser.ast.expr.Expression)
  Line 205) n.getCheck().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 205) n.getCheck() ==> com.github.javaparser.ast.stmt.AssertStmt.getCheck()
  Line 206) n.getMessage() ==> com.github.javaparser.ast.stmt.AssertStmt.getMessage()
  Line 207) n.setMessage((Expression) n.getMessage().accept(this, arg)) ==> com.github.javaparser.ast.stmt.AssertStmt.setMessage(com.github.javaparser.ast.expr.Expression)
  Line 207) n.getMessage().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 207) n.getMessage() ==> com.github.javaparser.ast.stmt.AssertStmt.getMessage()
  Line 213) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 214) n.getTarget().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 214) n.getTarget() ==> com.github.javaparser.ast.expr.AssignExpr.getTarget()
  Line 218) n.setTarget(target) ==> com.github.javaparser.ast.expr.AssignExpr.setTarget(com.github.javaparser.ast.expr.Expression)
  Line 220) n.getValue().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 220) n.getValue() ==> com.github.javaparser.ast.expr.AssignExpr.getValue()
  Line 224) n.setValue(value) ==> com.github.javaparser.ast.expr.AssignExpr.setValue(com.github.javaparser.ast.expr.Expression)
  Line 230) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 231) n.getLeft().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 231) n.getLeft() ==> com.github.javaparser.ast.expr.BinaryExpr.getLeft()
  Line 232) n.getRight().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 232) n.getRight() ==> com.github.javaparser.ast.expr.BinaryExpr.getRight()
  Line 239) n.setLeft(left) ==> com.github.javaparser.ast.expr.BinaryExpr.setLeft(com.github.javaparser.ast.expr.Expression)
  Line 240) n.setRight(right) ==> com.github.javaparser.ast.expr.BinaryExpr.setRight(com.github.javaparser.ast.expr.Expression)
  Line 245) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 246) n.getStmts() ==> com.github.javaparser.ast.stmt.BlockStmt.getStmts()
  Line 248) stmts.size() ==> java.util.List.size()
  Line 249) stmts.set(i, (Statement) stmts.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 249) stmts.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 249) stmts.get(i) ==> java.util.List.get(int)
  Line 251) removeNulls(stmts) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 257) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 262) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 267) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 268) n.getType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 268) n.getType() ==> com.github.javaparser.ast.expr.CastExpr.getType()
  Line 269) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 269) n.getExpr() ==> com.github.javaparser.ast.expr.CastExpr.getExpr()
  Line 276) n.setType(type) ==> com.github.javaparser.ast.expr.CastExpr.setType(com.github.javaparser.ast.type.Type)
  Line 277) n.setExpr(expr) ==> com.github.javaparser.ast.expr.CastExpr.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 282) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 283) n.setParam((Parameter) n.getParam().accept(this, arg)) ==> com.github.javaparser.ast.stmt.CatchClause.setParam(com.github.javaparser.ast.body.Parameter)
  Line 283) n.getParam().accept(this, arg) ==> com.github.javaparser.ast.body.Parameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 283) n.getParam() ==> com.github.javaparser.ast.stmt.CatchClause.getParam()
  Line 284) n.setBody((BlockStmt) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.stmt.CatchClause.setBody(com.github.javaparser.ast.stmt.BlockStmt)
  Line 284) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 284) n.getBody() ==> com.github.javaparser.ast.stmt.CatchClause.getBody()
  Line 290) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 295) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 296) n.setType((Type) n.getType().accept(this, arg)) ==> com.github.javaparser.ast.expr.ClassExpr.setType(com.github.javaparser.ast.type.Type)
  Line 296) n.getType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 296) n.getType() ==> com.github.javaparser.ast.expr.ClassExpr.getType()
  Line 301) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 302) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 303) n.getTypeParameters() ==> com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.getTypeParameters()
  Line 305) typeParameters.size() ==> java.util.List.size()
  Line 306) typeParameters.set(i, (TypeParameter) typeParameters.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 306) typeParameters.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.TypeParameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 306) typeParameters.get(i) ==> java.util.List.get(int)
  Line 308) removeNulls(typeParameters) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 310) n.getExtends() ==> com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.getExtends()
  Line 312) extendz.size() ==> java.util.List.size()
  Line 313) extendz.set(i, (ClassOrInterfaceType) extendz.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 313) extendz.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 313) extendz.get(i) ==> java.util.List.get(int)
  Line 315) removeNulls(extendz) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 317) n.getImplements() ==> com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.getImplements()
  Line 319) implementz.size() ==> java.util.List.size()
  Line 320) implementz.set(i, (ClassOrInterfaceType) implementz.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 320) implementz.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 320) implementz.get(i) ==> java.util.List.get(int)
  Line 322) removeNulls(implementz) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 324) n.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 326) members.size() ==> java.util.List.size()
  Line 327) members.set(i, (BodyDeclaration<?>) members.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 327) members.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 327) members.get(i) ==> java.util.List.get(int)
  Line 329) removeNulls(members) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 335) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 336) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 337) n.getScope() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getScope()
  Line 338) n.setScope((ClassOrInterfaceType) n.getScope().accept(this, arg)) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.setScope(com.github.javaparser.ast.type.ClassOrInterfaceType)
  Line 338) n.getScope().accept(this, arg) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 338) n.getScope() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getScope()
  Line 340) n.getTypeArguments() ==> com.github.javaparser.ast.type.ClassOrInterfaceType.getTypeArguments()
  Line 342) typeArguments.size() ==> java.util.List.size()
  Line 343) typeArguments.set(i, (Type<?>) typeArguments.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 343) typeArguments.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 343) typeArguments.get(i) ==> java.util.List.get(int)
  Line 345) removeNulls(typeArguments) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 351) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 352) n.getPackage() ==> com.github.javaparser.ast.CompilationUnit.getPackage()
  Line 353) n.setPackage((PackageDeclaration) n.getPackage().accept(this, arg)) ==> com.github.javaparser.ast.CompilationUnit.setPackage(com.github.javaparser.ast.PackageDeclaration)
  Line 353) n.getPackage().accept(this, arg) ==> com.github.javaparser.ast.PackageDeclaration.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 353) n.getPackage() ==> com.github.javaparser.ast.CompilationUnit.getPackage()
  Line 355) n.getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 357) imports.size() ==> java.util.List.size()
  Line 358) imports.set(i, (ImportDeclaration) imports.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 358) imports.get(i).accept(this, arg) ==> com.github.javaparser.ast.ImportDeclaration.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 358) imports.get(i) ==> java.util.List.get(int)
  Line 360) removeNulls(imports) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 362) n.getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 364) types.size() ==> java.util.List.size()
  Line 365) types.set(i, (TypeDeclaration<?>) types.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 365) types.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 365) types.get(i) ==> java.util.List.get(int)
  Line 367) removeNulls(types) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 373) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 374) n.setCondition((Expression) n.getCondition().accept(this, arg)) ==> com.github.javaparser.ast.expr.ConditionalExpr.setCondition(com.github.javaparser.ast.expr.Expression)
  Line 374) n.getCondition().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 374) n.getCondition() ==> com.github.javaparser.ast.expr.ConditionalExpr.getCondition()
  Line 375) n.setThenExpr((Expression) n.getThenExpr().accept(this, arg)) ==> com.github.javaparser.ast.expr.ConditionalExpr.setThenExpr(com.github.javaparser.ast.expr.Expression)
  Line 375) n.getThenExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 375) n.getThenExpr() ==> com.github.javaparser.ast.expr.ConditionalExpr.getThenExpr()
  Line 376) n.setElseExpr((Expression) n.getElseExpr().accept(this, arg)) ==> com.github.javaparser.ast.expr.ConditionalExpr.setElseExpr(com.github.javaparser.ast.expr.Expression)
  Line 376) n.getElseExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 376) n.getElseExpr() ==> com.github.javaparser.ast.expr.ConditionalExpr.getElseExpr()
  Line 381) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 382) n.getAnnotations() ==> com.github.javaparser.ast.body.BodyDeclaration.getAnnotations()
  Line 384) annotations.size() ==> java.util.List.size()
  Line 385) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 385) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 385) annotations.get(i) ==> java.util.List.get(int)
  Line 387) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 389) n.getTypeParameters() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getTypeParameters()
  Line 391) typeParameters.size() ==> java.util.List.size()
  Line 392) typeParameters.set(i, (TypeParameter) typeParameters.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 392) typeParameters.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.TypeParameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 392) typeParameters.get(i) ==> java.util.List.get(int)
  Line 394) removeNulls(typeParameters) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 396) n.getParameters() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getParameters()
  Line 398) parameters.size() ==> java.util.List.size()
  Line 399) parameters.set(i, (Parameter) parameters.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 399) parameters.get(i).accept(this, arg) ==> com.github.javaparser.ast.body.Parameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 399) parameters.get(i) ==> java.util.List.get(int)
  Line 401) removeNulls(parameters) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 403) n.getThrows() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getThrows()
  Line 405) throwz.size() ==> java.util.List.size()
  Line 406) throwz.set(i, (ReferenceType) throwz.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 406) throwz.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 406) throwz.get(i) ==> java.util.List.get(int)
  Line 408) removeNulls(throwz) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 410) n.setBody((BlockStmt) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setBody(com.github.javaparser.ast.stmt.BlockStmt)
  Line 410) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 410) n.getBody() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getBody()
  Line 415) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 420) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 421) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 421) n.getBody() ==> com.github.javaparser.ast.stmt.DoStmt.getBody()
  Line 425) n.setBody(body) ==> com.github.javaparser.ast.stmt.DoStmt.setBody(com.github.javaparser.ast.stmt.Statement)
  Line 427) n.getCondition().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 427) n.getCondition() ==> com.github.javaparser.ast.stmt.DoStmt.getCondition()
  Line 431) n.setCondition(condition) ==> com.github.javaparser.ast.stmt.DoStmt.setCondition(com.github.javaparser.ast.expr.Expression)
  Line 437) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 442) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 447) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 452) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 457) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 458) n.setInner((Expression) n.getInner().accept(this, arg)) ==> com.github.javaparser.ast.expr.EnclosedExpr.setInner(com.github.javaparser.ast.expr.Expression)
  Line 458) n.getInner().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 458) n.getInner() ==> com.github.javaparser.ast.expr.EnclosedExpr.getInner()
  Line 463) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 464) n.getAnnotations() ==> com.github.javaparser.ast.body.BodyDeclaration.getAnnotations()
  Line 466) annotations.size() ==> java.util.List.size()
  Line 467) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 467) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 467) annotations.get(i) ==> java.util.List.get(int)
  Line 469) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 471) n.getArgs() ==> com.github.javaparser.ast.body.EnumConstantDeclaration.getArgs()
  Line 473) args.size() ==> java.util.List.size()
  Line 474) args.set(i, (Expression) args.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 474) args.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 474) args.get(i) ==> java.util.List.get(int)
  Line 476) removeNulls(args) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 478) n.getClassBody() ==> com.github.javaparser.ast.body.EnumConstantDeclaration.getClassBody()
  Line 480) classBody.size() ==> java.util.List.size()
  Line 481) classBody.set(i, (BodyDeclaration<?>) classBody.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 481) classBody.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 481) classBody.get(i) ==> java.util.List.get(int)
  Line 483) removeNulls(classBody) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 489) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 490) n.getAnnotations() ==> com.github.javaparser.ast.body.BodyDeclaration.getAnnotations()
  Line 492) annotations.size() ==> java.util.List.size()
  Line 493) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 493) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 493) annotations.get(i) ==> java.util.List.get(int)
  Line 495) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 497) n.getImplements() ==> com.github.javaparser.ast.body.EnumDeclaration.getImplements()
  Line 499) implementz.size() ==> java.util.List.size()
  Line 500) implementz.set(i, (ClassOrInterfaceType) implementz.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 500) implementz.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 500) implementz.get(i) ==> java.util.List.get(int)
  Line 502) removeNulls(implementz) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 504) n.getEntries() ==> com.github.javaparser.ast.body.EnumDeclaration.getEntries()
  Line 506) entries.size() ==> java.util.List.size()
  Line 507) entries.set(i, (EnumConstantDeclaration) entries.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 507) entries.get(i).accept(this, arg) ==> com.github.javaparser.ast.body.EnumConstantDeclaration.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 507) entries.get(i) ==> java.util.List.get(int)
  Line 509) removeNulls(entries) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 511) n.getMembers() ==> com.github.javaparser.ast.body.TypeDeclaration.getMembers()
  Line 513) members.size() ==> java.util.List.size()
  Line 514) members.set(i, (BodyDeclaration<?>) members.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 514) members.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 514) members.get(i) ==> java.util.List.get(int)
  Line 516) removeNulls(members) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 522) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 523) n.isThis() ==> com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt.isThis()
  Line 523) n.getExpr() ==> com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt.getExpr()
  Line 524) n.setExpr((Expression) n.getExpr().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 524) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 524) n.getExpr() ==> com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt.getExpr()
  Line 526) n.getTypeArguments() ==> com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt.getTypeArguments()
  Line 528) typeArguments.size() ==> java.util.List.size()
  Line 529) typeArguments.set(i, (Type<?>) typeArguments.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 529) typeArguments.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 529) typeArguments.get(i) ==> java.util.List.get(int)
  Line 531) removeNulls(typeArguments) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 533) n.getArgs() ==> com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt.getArgs()
  Line 535) args.size() ==> java.util.List.size()
  Line 536) args.set(i, (Expression) args.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 536) args.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 536) args.get(i) ==> java.util.List.get(int)
  Line 538) removeNulls(args) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 544) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 545) n.getExpression().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 545) n.getExpression() ==> com.github.javaparser.ast.stmt.ExpressionStmt.getExpression()
  Line 549) n.setExpression(expr) ==> com.github.javaparser.ast.stmt.ExpressionStmt.setExpression(com.github.javaparser.ast.expr.Expression)
  Line 554) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 555) n.getScope().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 555) n.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 559) n.setScope(scope) ==> com.github.javaparser.ast.expr.FieldAccessExpr.setScope(com.github.javaparser.ast.expr.Expression)
  Line 564) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 565) n.getAnnotations() ==> com.github.javaparser.ast.body.BodyDeclaration.getAnnotations()
  Line 567) annotations.size() ==> java.util.List.size()
  Line 568) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 568) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 568) annotations.get(i) ==> java.util.List.get(int)
  Line 570) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 572) n.setElementType((Type) n.getElementType().accept(this, arg)) ==> com.github.javaparser.ast.body.FieldDeclaration.setElementType(com.github.javaparser.ast.type.Type)
  Line 572) n.getElementType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 572) n.getElementType() ==> com.github.javaparser.ast.body.FieldDeclaration.getElementType()
  Line 573) n.getVariables() ==> com.github.javaparser.ast.body.FieldDeclaration.getVariables()
  Line 574) variables.size() ==> java.util.List.size()
  Line 575) variables.set(i, (VariableDeclarator) variables.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 575) variables.get(i).accept(this, arg) ==> com.github.javaparser.ast.body.VariableDeclarator.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 575) variables.get(i) ==> java.util.List.get(int)
  Line 577) removeNulls(variables) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 582) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 583) n.setVariable((VariableDeclarationExpr) n.getVariable().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ForeachStmt.setVariable(com.github.javaparser.ast.expr.VariableDeclarationExpr)
  Line 583) n.getVariable().accept(this, arg) ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 583) n.getVariable() ==> com.github.javaparser.ast.stmt.ForeachStmt.getVariable()
  Line 584) n.setIterable((Expression) n.getIterable().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ForeachStmt.setIterable(com.github.javaparser.ast.expr.Expression)
  Line 584) n.getIterable().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 584) n.getIterable() ==> com.github.javaparser.ast.stmt.ForeachStmt.getIterable()
  Line 585) n.setBody((Statement) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ForeachStmt.setBody(com.github.javaparser.ast.stmt.Statement)
  Line 585) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 585) n.getBody() ==> com.github.javaparser.ast.stmt.ForeachStmt.getBody()
  Line 590) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 591) n.getInit() ==> com.github.javaparser.ast.stmt.ForStmt.getInit()
  Line 593) init.size() ==> java.util.List.size()
  Line 594) init.set(i, (Expression) init.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 594) init.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 594) init.get(i) ==> java.util.List.get(int)
  Line 596) removeNulls(init) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 598) n.getCompare() ==> com.github.javaparser.ast.stmt.ForStmt.getCompare()
  Line 599) n.setCompare((Expression) n.getCompare().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ForStmt.setCompare(com.github.javaparser.ast.expr.Expression)
  Line 599) n.getCompare().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 599) n.getCompare() ==> com.github.javaparser.ast.stmt.ForStmt.getCompare()
  Line 601) n.getUpdate() ==> com.github.javaparser.ast.stmt.ForStmt.getUpdate()
  Line 603) update.size() ==> java.util.List.size()
  Line 604) update.set(i, (Expression) update.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 604) update.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 604) update.get(i) ==> java.util.List.get(int)
  Line 606) removeNulls(update) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 608) n.setBody((Statement) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ForStmt.setBody(com.github.javaparser.ast.stmt.Statement)
  Line 608) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 608) n.getBody() ==> com.github.javaparser.ast.stmt.ForStmt.getBody()
  Line 613) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 615) n.getCondition().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 615) n.getCondition() ==> com.github.javaparser.ast.stmt.IfStmt.getCondition()
  Line 619) n.setCondition(condition) ==> com.github.javaparser.ast.stmt.IfStmt.setCondition(com.github.javaparser.ast.expr.Expression)
  Line 620) n.getThenStmt().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 620) n.getThenStmt() ==> com.github.javaparser.ast.stmt.IfStmt.getThenStmt()
  Line 627) n.setThenStmt(thenStmt) ==> com.github.javaparser.ast.stmt.IfStmt.setThenStmt(com.github.javaparser.ast.stmt.Statement)
  Line 628) n.getElseStmt() ==> com.github.javaparser.ast.stmt.IfStmt.getElseStmt()
  Line 629) n.setElseStmt((Statement) n.getElseStmt().accept(this, arg)) ==> com.github.javaparser.ast.stmt.IfStmt.setElseStmt(com.github.javaparser.ast.stmt.Statement)
  Line 629) n.getElseStmt().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 629) n.getElseStmt() ==> com.github.javaparser.ast.stmt.IfStmt.getElseStmt()
  Line 635) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 636) n.setName((NameExpr) n.getName().accept(this, arg)) ==> com.github.javaparser.ast.ImportDeclaration.setName(com.github.javaparser.ast.expr.NameExpr)
  Line 636) n.getName().accept(this, arg) ==> com.github.javaparser.ast.expr.NameExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 636) n.getName() ==> com.github.javaparser.ast.ImportDeclaration.getName()
  Line 641) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 642) n.setBlock((BlockStmt) n.getBlock().accept(this, arg)) ==> com.github.javaparser.ast.body.InitializerDeclaration.setBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 642) n.getBlock().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 642) n.getBlock() ==> com.github.javaparser.ast.body.InitializerDeclaration.getBlock()
  Line 647) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 648) n.setExpr((Expression) n.getExpr().accept(this, arg)) ==> com.github.javaparser.ast.expr.InstanceOfExpr.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 648) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 648) n.getExpr() ==> com.github.javaparser.ast.expr.InstanceOfExpr.getExpr()
  Line 649) n.setType((Type) n.getType().accept(this, arg)) ==> com.github.javaparser.ast.expr.InstanceOfExpr.setType(com.github.javaparser.ast.type.Type)
  Line 649) n.getType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 649) n.getType() ==> com.github.javaparser.ast.expr.InstanceOfExpr.getType()
  Line 654) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 659) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 668) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 669) n.setStmt((Statement) n.getStmt().accept(this, arg)) ==> com.github.javaparser.ast.stmt.LabeledStmt.setStmt(com.github.javaparser.ast.stmt.Statement)
  Line 669) n.getStmt().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 669) n.getStmt() ==> com.github.javaparser.ast.stmt.LabeledStmt.getStmt()
  Line 674) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 679) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 684) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 685) n.setName((NameExpr) n.getName().accept(this, arg)) ==> com.github.javaparser.ast.expr.AnnotationExpr.setName(com.github.javaparser.ast.expr.NameExpr)
  Line 685) n.getName().accept(this, arg) ==> com.github.javaparser.ast.expr.NameExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 685) n.getName() ==> com.github.javaparser.ast.expr.AnnotationExpr.getName()
  Line 690) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 691) n.setValue((Expression) n.getValue().accept(this, arg)) ==> com.github.javaparser.ast.expr.MemberValuePair.setValue(com.github.javaparser.ast.expr.Expression)
  Line 691) n.getValue().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 691) n.getValue() ==> com.github.javaparser.ast.expr.MemberValuePair.getValue()
  Line 696) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 697) n.getScope() ==> com.github.javaparser.ast.expr.MethodCallExpr.getScope()
  Line 698) n.setScope((Expression) n.getScope().accept(this, arg)) ==> com.github.javaparser.ast.expr.MethodCallExpr.setScope(com.github.javaparser.ast.expr.Expression)
  Line 698) n.getScope().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 698) n.getScope() ==> com.github.javaparser.ast.expr.MethodCallExpr.getScope()
  Line 700) n.getTypeArguments() ==> com.github.javaparser.ast.expr.MethodCallExpr.getTypeArguments()
  Line 702) typeArguments.size() ==> java.util.List.size()
  Line 703) typeArguments.set(i, (Type<?>) typeArguments.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 703) typeArguments.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 703) typeArguments.get(i) ==> java.util.List.get(int)
  Line 705) removeNulls(typeArguments) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 707) n.getArgs() ==> com.github.javaparser.ast.expr.MethodCallExpr.getArgs()
  Line 709) args.size() ==> java.util.List.size()
  Line 710) args.set(i, (Expression) args.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 710) args.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 710) args.get(i) ==> java.util.List.get(int)
  Line 712) removeNulls(args) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 718) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 719) n.getAnnotations() ==> com.github.javaparser.ast.body.BodyDeclaration.getAnnotations()
  Line 721) annotations.size() ==> java.util.List.size()
  Line 722) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 722) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 722) annotations.get(i) ==> java.util.List.get(int)
  Line 724) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 726) n.getTypeParameters() ==> com.github.javaparser.ast.body.MethodDeclaration.getTypeParameters()
  Line 728) typeParameters.size() ==> java.util.List.size()
  Line 729) typeParameters.set(i, (TypeParameter) typeParameters.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 729) typeParameters.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.TypeParameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 729) typeParameters.get(i) ==> java.util.List.get(int)
  Line 731) removeNulls(typeParameters) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 733) n.setElementType((Type) n.getElementType().accept(this, arg)) ==> com.github.javaparser.ast.body.MethodDeclaration.setElementType(com.github.javaparser.ast.type.Type)
  Line 733) n.getElementType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 733) n.getElementType() ==> com.github.javaparser.ast.body.MethodDeclaration.getElementType()
  Line 734) n.getParameters() ==> com.github.javaparser.ast.body.MethodDeclaration.getParameters()
  Line 736) parameters.size() ==> java.util.List.size()
  Line 737) parameters.set(i, (Parameter) parameters.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 737) parameters.get(i).accept(this, arg) ==> com.github.javaparser.ast.body.Parameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 737) parameters.get(i) ==> java.util.List.get(int)
  Line 739) removeNulls(parameters) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 741) n.getThrows() ==> com.github.javaparser.ast.body.MethodDeclaration.getThrows()
  Line 743) throwz.size() ==> java.util.List.size()
  Line 744) throwz.set(i, (ReferenceType) throwz.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 744) throwz.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 744) throwz.get(i) ==> java.util.List.get(int)
  Line 746) removeNulls(throwz) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 748) n.getBody() ==> com.github.javaparser.ast.body.MethodDeclaration.getBody()
  Line 749) n.setBody((BlockStmt) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.body.MethodDeclaration.setBody(com.github.javaparser.ast.stmt.BlockStmt)
  Line 749) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 749) n.getBody() ==> com.github.javaparser.ast.body.MethodDeclaration.getBody()
  Line 755) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 760) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 761) n.setName((NameExpr) n.getName().accept(this, arg)) ==> com.github.javaparser.ast.expr.AnnotationExpr.setName(com.github.javaparser.ast.expr.NameExpr)
  Line 761) n.getName().accept(this, arg) ==> com.github.javaparser.ast.expr.NameExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 761) n.getName() ==> com.github.javaparser.ast.expr.AnnotationExpr.getName()
  Line 762) n.getPairs() ==> com.github.javaparser.ast.expr.NormalAnnotationExpr.getPairs()
  Line 764) pairs.size() ==> java.util.List.size()
  Line 765) pairs.set(i, (MemberValuePair) pairs.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 765) pairs.get(i).accept(this, arg) ==> com.github.javaparser.ast.expr.MemberValuePair.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 765) pairs.get(i) ==> java.util.List.get(int)
  Line 767) removeNulls(pairs) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 773) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 778) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 779) n.getScope() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getScope()
  Line 780) n.setScope((Expression) n.getScope().accept(this, arg)) ==> com.github.javaparser.ast.expr.ObjectCreationExpr.setScope(com.github.javaparser.ast.expr.Expression)
  Line 780) n.getScope().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 780) n.getScope() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getScope()
  Line 782) n.getTypeArguments() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getTypeArguments()
  Line 784) typeArguments.size() ==> java.util.List.size()
  Line 785) typeArguments.set(i, (Type<?>) typeArguments.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 785) typeArguments.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 785) typeArguments.get(i) ==> java.util.List.get(int)
  Line 787) removeNulls(typeArguments) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 789) n.setType((ClassOrInterfaceType) n.getType().accept(this, arg)) ==> com.github.javaparser.ast.expr.ObjectCreationExpr.setType(com.github.javaparser.ast.type.Type<?>)
  Line 789) n.getType().accept(this, arg) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 789) n.getType() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getType()
  Line 790) n.getArgs() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getArgs()
  Line 792) args.size() ==> java.util.List.size()
  Line 793) args.set(i, (Expression) args.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 793) args.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 793) args.get(i) ==> java.util.List.get(int)
  Line 795) removeNulls(args) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 797) n.getAnonymousClassBody() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getAnonymousClassBody()
  Line 799) anonymousClassBody.size() ==> java.util.List.size()
  Line 800) anonymousClassBody.set(i, (BodyDeclaration<?>) anonymousClassBody.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 800) anonymousClassBody.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 800) anonymousClassBody.get(i) ==> java.util.List.get(int)
  Line 802) removeNulls(anonymousClassBody) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 808) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 809) n.getAnnotations() ==> com.github.javaparser.ast.PackageDeclaration.getAnnotations()
  Line 811) annotations.size() ==> java.util.List.size()
  Line 812) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 812) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 812) annotations.get(i) ==> java.util.List.get(int)
  Line 814) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 816) n.setName((NameExpr) n.getName().accept(this, arg)) ==> com.github.javaparser.ast.PackageDeclaration.setName(com.github.javaparser.ast.expr.NameExpr)
  Line 816) n.getName().accept(this, arg) ==> com.github.javaparser.ast.expr.NameExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 816) n.getName() ==> com.github.javaparser.ast.PackageDeclaration.getName()
  Line 821) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 822) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 823) n.setId((VariableDeclaratorId) n.getId().accept(this, arg)) ==> com.github.javaparser.ast.body.Parameter.setId(com.github.javaparser.ast.body.VariableDeclaratorId)
  Line 823) n.getId().accept(this, arg) ==> com.github.javaparser.ast.body.VariableDeclaratorId.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 823) n.getId() ==> com.github.javaparser.ast.body.Parameter.getId()
  Line 824) n.setElementType((Type) n.getElementType().accept(this, arg)) ==> com.github.javaparser.ast.body.Parameter.setElementType(com.github.javaparser.ast.type.Type)
  Line 824) n.getElementType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 824) n.getElementType() ==> com.github.javaparser.ast.body.Parameter.getElementType()
  Line 829) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 830) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 835) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 836) n.setQualifier((NameExpr) n.getQualifier().accept(this, arg)) ==> com.github.javaparser.ast.expr.QualifiedNameExpr.setQualifier(com.github.javaparser.ast.expr.NameExpr)
  Line 836) n.getQualifier().accept(this, arg) ==> com.github.javaparser.ast.expr.NameExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 836) n.getQualifier() ==> com.github.javaparser.ast.expr.QualifiedNameExpr.getQualifier()
  Line 842) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 843) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 844) n.setComponentType((Type) n.getComponentType().accept(this, arg)) ==> com.github.javaparser.ast.type.ArrayType.setComponentType(com.github.javaparser.ast.type.Type)
  Line 844) n.getComponentType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 844) n.getComponentType() ==> com.github.javaparser.ast.type.ArrayType.getComponentType()
  Line 850) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 851) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 852) n.getDimension() ==> com.github.javaparser.ast.ArrayCreationLevel.getDimension()
  Line 853) n.setDimension((Expression) n.getDimension().accept(this, arg)) ==> com.github.javaparser.ast.ArrayCreationLevel.setDimension(com.github.javaparser.ast.expr.Expression)
  Line 853) n.getDimension().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 853) n.getDimension() ==> com.github.javaparser.ast.ArrayCreationLevel.getDimension()
  Line 860) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 861) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 862) n.getElements() ==> com.github.javaparser.ast.type.IntersectionType.getElements()
  Line 864) elements.size() ==> java.util.List.size()
  Line 865) elements.set(i, (ReferenceType) elements.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 865) elements.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 865) elements.get(i) ==> java.util.List.get(int)
  Line 867) removeNulls(elements) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 874) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 875) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 876) n.getElements() ==> com.github.javaparser.ast.type.UnionType.getElements()
  Line 878) elements.size() ==> java.util.List.size()
  Line 879) elements.set(i, (ReferenceType) elements.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 879) elements.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 879) elements.get(i) ==> java.util.List.get(int)
  Line 881) removeNulls(elements) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 887) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 888) n.getExpr() ==> com.github.javaparser.ast.stmt.ReturnStmt.getExpr()
  Line 889) n.setExpr((Expression) n.getExpr().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ReturnStmt.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 889) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 889) n.getExpr() ==> com.github.javaparser.ast.stmt.ReturnStmt.getExpr()
  Line 895) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 896) n.setName((NameExpr) n.getName().accept(this, arg)) ==> com.github.javaparser.ast.expr.AnnotationExpr.setName(com.github.javaparser.ast.expr.NameExpr)
  Line 896) n.getName().accept(this, arg) ==> com.github.javaparser.ast.expr.NameExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 896) n.getName() ==> com.github.javaparser.ast.expr.AnnotationExpr.getName()
  Line 897) n.setMemberValue((Expression) n.getMemberValue().accept(this, arg)) ==> com.github.javaparser.ast.expr.SingleMemberAnnotationExpr.setMemberValue(com.github.javaparser.ast.expr.Expression)
  Line 897) n.getMemberValue().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 897) n.getMemberValue() ==> com.github.javaparser.ast.expr.SingleMemberAnnotationExpr.getMemberValue()
  Line 902) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 907) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 908) n.getClassExpr() ==> com.github.javaparser.ast.expr.SuperExpr.getClassExpr()
  Line 909) n.setClassExpr((Expression) n.getClassExpr().accept(this, arg)) ==> com.github.javaparser.ast.expr.SuperExpr.setClassExpr(com.github.javaparser.ast.expr.Expression)
  Line 909) n.getClassExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 909) n.getClassExpr() ==> com.github.javaparser.ast.expr.SuperExpr.getClassExpr()
  Line 915) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 916) n.getLabel() ==> com.github.javaparser.ast.stmt.SwitchEntryStmt.getLabel()
  Line 917) n.setLabel((Expression) n.getLabel().accept(this, arg)) ==> com.github.javaparser.ast.stmt.SwitchEntryStmt.setLabel(com.github.javaparser.ast.expr.Expression)
  Line 917) n.getLabel().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 917) n.getLabel() ==> com.github.javaparser.ast.stmt.SwitchEntryStmt.getLabel()
  Line 919) n.getStmts() ==> com.github.javaparser.ast.stmt.SwitchEntryStmt.getStmts()
  Line 921) stmts.size() ==> java.util.List.size()
  Line 922) stmts.set(i, (Statement) stmts.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 922) stmts.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 922) stmts.get(i) ==> java.util.List.get(int)
  Line 924) removeNulls(stmts) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 930) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 931) n.setSelector((Expression) n.getSelector().accept(this, arg)) ==> com.github.javaparser.ast.stmt.SwitchStmt.setSelector(com.github.javaparser.ast.expr.Expression)
  Line 931) n.getSelector().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 931) n.getSelector() ==> com.github.javaparser.ast.stmt.SwitchStmt.getSelector()
  Line 932) n.getEntries() ==> com.github.javaparser.ast.stmt.SwitchStmt.getEntries()
  Line 934) entries.size() ==> java.util.List.size()
  Line 935) entries.set(i, (SwitchEntryStmt) entries.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 935) entries.get(i).accept(this, arg) ==> com.github.javaparser.ast.stmt.SwitchEntryStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 935) entries.get(i) ==> java.util.List.get(int)
  Line 937) removeNulls(entries) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 944) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 945) n.setExpr((Expression) n.getExpr().accept(this, arg)) ==> com.github.javaparser.ast.stmt.SynchronizedStmt.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 945) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 945) n.getExpr() ==> com.github.javaparser.ast.stmt.SynchronizedStmt.getExpr()
  Line 946) n.setBody((BlockStmt) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.stmt.SynchronizedStmt.setBody(com.github.javaparser.ast.stmt.BlockStmt)
  Line 946) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 946) n.getBody() ==> com.github.javaparser.ast.stmt.SynchronizedStmt.getBody()
  Line 951) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 952) n.getClassExpr() ==> com.github.javaparser.ast.expr.ThisExpr.getClassExpr()
  Line 953) n.setClassExpr((Expression) n.getClassExpr().accept(this, arg)) ==> com.github.javaparser.ast.expr.ThisExpr.setClassExpr(com.github.javaparser.ast.expr.Expression)
  Line 953) n.getClassExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 953) n.getClassExpr() ==> com.github.javaparser.ast.expr.ThisExpr.getClassExpr()
  Line 959) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 960) n.setExpr((Expression) n.getExpr().accept(this, arg)) ==> com.github.javaparser.ast.stmt.ThrowStmt.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 960) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 960) n.getExpr() ==> com.github.javaparser.ast.stmt.ThrowStmt.getExpr()
  Line 965) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 966) n.getResources() ==> com.github.javaparser.ast.stmt.TryStmt.getResources()
  Line 967) types.size() ==> java.util.List.size()
  Line 968) n.getResources().set(i, (VariableDeclarationExpr) n.getResources().get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 968) n.getResources() ==> com.github.javaparser.ast.stmt.TryStmt.getResources()
  Line 969) n.getResources().get(i).accept(this, arg) ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 969) n.getResources().get(i) ==> java.util.List.get(int)
  Line 969) n.getResources() ==> com.github.javaparser.ast.stmt.TryStmt.getResources()
  Line 971) n.setTryBlock((BlockStmt) n.getTryBlock().accept(this, arg)) ==> com.github.javaparser.ast.stmt.TryStmt.setTryBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 971) n.getTryBlock().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 971) n.getTryBlock() ==> com.github.javaparser.ast.stmt.TryStmt.getTryBlock()
  Line 972) n.getCatchs() ==> com.github.javaparser.ast.stmt.TryStmt.getCatchs()
  Line 974) catchs.size() ==> java.util.List.size()
  Line 975) catchs.set(i, (CatchClause) catchs.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 975) catchs.get(i).accept(this, arg) ==> com.github.javaparser.ast.stmt.CatchClause.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 975) catchs.get(i) ==> java.util.List.get(int)
  Line 977) removeNulls(catchs) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 979) n.getFinallyBlock() ==> com.github.javaparser.ast.stmt.TryStmt.getFinallyBlock()
  Line 980) n.setFinallyBlock((BlockStmt) n.getFinallyBlock().accept(this, arg)) ==> com.github.javaparser.ast.stmt.TryStmt.setFinallyBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 980) n.getFinallyBlock().accept(this, arg) ==> com.github.javaparser.ast.stmt.BlockStmt.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 980) n.getFinallyBlock() ==> com.github.javaparser.ast.stmt.TryStmt.getFinallyBlock()
  Line 986) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 987) n.setTypeDeclaration((TypeDeclaration<?>) n.getTypeDeclaration().accept(this, arg)) ==> com.github.javaparser.ast.stmt.TypeDeclarationStmt.setTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration)
  Line 987) n.getTypeDeclaration().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 987) n.getTypeDeclaration() ==> com.github.javaparser.ast.stmt.TypeDeclarationStmt.getTypeDeclaration()
  Line 992) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 993) n.getTypeBound() ==> com.github.javaparser.ast.type.TypeParameter.getTypeBound()
  Line 995) typeBound.size() ==> java.util.List.size()
  Line 996) typeBound.set(i, (ClassOrInterfaceType) typeBound.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 996) typeBound.get(i).accept(this, arg) ==> com.github.javaparser.ast.type.ClassOrInterfaceType.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 996) typeBound.get(i) ==> java.util.List.get(int)
  Line 998) removeNulls(typeBound) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 1004) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1005) n.setExpr((Expression) n.getExpr().accept(this, arg)) ==> com.github.javaparser.ast.expr.UnaryExpr.setExpr(com.github.javaparser.ast.expr.Expression)
  Line 1005) n.getExpr().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1005) n.getExpr() ==> com.github.javaparser.ast.expr.UnaryExpr.getExpr()
  Line 1010) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1015) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1016) n.getAnnotations() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getAnnotations()
  Line 1018) annotations.size() ==> java.util.List.size()
  Line 1019) annotations.set(i, (AnnotationExpr) annotations.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 1019) annotations.get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1019) annotations.get(i) ==> java.util.List.get(int)
  Line 1021) removeNulls(annotations) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 1024) n.getElementType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1024) n.getElementType() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getElementType()
  Line 1028) n.setElementType(type) ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.setElementType(com.github.javaparser.ast.type.Type)
  Line 1030) n.getVariables() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getVariables()
  Line 1031) vars.size() ==> java.util.List.size()
  Line 1033) vars.get(i).accept(this, arg) ==> com.github.javaparser.ast.body.VariableDeclarator.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1033) vars.get(i) ==> java.util.List.get(int)
  Line 1035) vars.remove(i) ==> java.util.List.remove(int)
  Line 1037) vars.set(i++, decl) ==> java.util.List.set(int, E)
  Line 1040) vars.isEmpty() ==> java.util.List.isEmpty()
  Line 1048) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1050) n.getId().accept(this, arg) ==> com.github.javaparser.ast.body.VariableDeclaratorId.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1050) n.getId() ==> com.github.javaparser.ast.body.VariableDeclarator.getId()
  Line 1054) n.setId(id) ==> com.github.javaparser.ast.body.VariableDeclarator.setId(com.github.javaparser.ast.body.VariableDeclaratorId)
  Line 1055) n.getInit() ==> com.github.javaparser.ast.body.VariableDeclarator.getInit()
  Line 1056) n.setInit((Expression) n.getInit().accept(this, arg)) ==> com.github.javaparser.ast.body.VariableDeclarator.setInit(com.github.javaparser.ast.expr.Expression)
  Line 1056) n.getInit().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1056) n.getInit() ==> com.github.javaparser.ast.body.VariableDeclarator.getInit()
  Line 1062) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1067) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1068) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 1073) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1074) n.setCondition((Expression) n.getCondition().accept(this, arg)) ==> com.github.javaparser.ast.stmt.WhileStmt.setCondition(com.github.javaparser.ast.expr.Expression)
  Line 1074) n.getCondition().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1074) n.getCondition() ==> com.github.javaparser.ast.stmt.WhileStmt.getCondition()
  Line 1075) n.setBody((Statement) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.stmt.WhileStmt.setBody(com.github.javaparser.ast.stmt.Statement)
  Line 1075) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1075) n.getBody() ==> com.github.javaparser.ast.stmt.WhileStmt.getBody()
  Line 1080) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1081) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 1082) n.getExtends() ==> com.github.javaparser.ast.type.WildcardType.getExtends()
  Line 1083) n.setExtends((ReferenceType) n.getExtends().accept(this, arg)) ==> com.github.javaparser.ast.type.WildcardType.setExtends(com.github.javaparser.ast.type.ReferenceType)
  Line 1083) n.getExtends().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1083) n.getExtends() ==> com.github.javaparser.ast.type.WildcardType.getExtends()
  Line 1085) n.getSuper() ==> com.github.javaparser.ast.type.WildcardType.getSuper()
  Line 1086) n.setSuper((ReferenceType) n.getSuper().accept(this, arg)) ==> com.github.javaparser.ast.type.WildcardType.setSuper(com.github.javaparser.ast.type.ReferenceType)
  Line 1086) n.getSuper().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1086) n.getSuper() ==> com.github.javaparser.ast.type.WildcardType.getSuper()
  Line 1093) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1094) n.getParameters() ==> com.github.javaparser.ast.expr.LambdaExpr.getParameters()
  Line 1095) parameters.size() ==> java.util.List.size()
  Line 1096) parameters.set(i, (Parameter) parameters.get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 1096) parameters.get(i).accept(this, arg) ==> com.github.javaparser.ast.body.Parameter.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1096) parameters.get(i) ==> java.util.List.get(int)
  Line 1098) removeNulls(parameters) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.removeNulls(java.util.List<?>)
  Line 1099) n.getBody() ==> com.github.javaparser.ast.expr.LambdaExpr.getBody()
  Line 1100) n.setBody((Statement) n.getBody().accept(this, arg)) ==> com.github.javaparser.ast.expr.LambdaExpr.setBody(com.github.javaparser.ast.stmt.Statement)
  Line 1100) n.getBody().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1100) n.getBody() ==> com.github.javaparser.ast.expr.LambdaExpr.getBody()
  Line 1107) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1108) n.getTypeArguments() ==> com.github.javaparser.ast.expr.MethodReferenceExpr.getTypeArguments()
  Line 1109) types.size() ==> java.util.List.size()
  Line 1110) n.getTypeArguments().set(i, (Type<?>) n.getTypeArguments().get(i).accept(this, arg)) ==> java.util.List.set(int, E)
  Line 1110) n.getTypeArguments() ==> com.github.javaparser.ast.expr.MethodReferenceExpr.getTypeArguments()
  Line 1111) n.getTypeArguments().get(i).accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1111) n.getTypeArguments().get(i) ==> java.util.List.get(int)
  Line 1111) n.getTypeArguments() ==> com.github.javaparser.ast.expr.MethodReferenceExpr.getTypeArguments()
  Line 1113) n.getScope() ==> com.github.javaparser.ast.expr.MethodReferenceExpr.getScope()
  Line 1114) n.setScope((Expression) n.getScope().accept(this, arg)) ==> com.github.javaparser.ast.expr.MethodReferenceExpr.setScope(com.github.javaparser.ast.expr.Expression)
  Line 1114) n.getScope().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1114) n.getScope() ==> com.github.javaparser.ast.expr.MethodReferenceExpr.getScope()
  Line 1121) visitComment(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitComment(com.github.javaparser.ast.Node, A)
  Line 1122) n.getType() ==> com.github.javaparser.ast.expr.TypeExpr.getType()
  Line 1123) n.setType((Type<?>) n.getType().accept(this, arg)) ==> com.github.javaparser.ast.expr.TypeExpr.setType(com.github.javaparser.ast.type.Type<?>)
  Line 1123) n.getType().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1123) n.getType() ==> com.github.javaparser.ast.expr.TypeExpr.getType()
  Line 1130) visitAnnotations(n, arg) ==> com.github.javaparser.ast.visitor.ModifierVisitorAdapter.visitAnnotations(com.github.javaparser.ast.nodeTypes.NodeWithAnnotations<?>, A)
  Line 1145) n.getComment() ==> com.github.javaparser.ast.Node.getComment()
  Line 1146) n.setComment((Comment) n.getComment().accept(this, arg)) ==> com.github.javaparser.ast.Node.setComment(com.github.javaparser.ast.comments.Comment)
  Line 1146) n.getComment().accept(this, arg) ==> com.github.javaparser.ast.Node.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 1146) n.getComment() ==> com.github.javaparser.ast.Node.getComment()
