| package org.checkerframework.framework.ajava; |
| |
| import com.github.javaparser.ast.ArrayCreationLevel; |
| import com.github.javaparser.ast.CompilationUnit; |
| import com.github.javaparser.ast.ImportDeclaration; |
| import com.github.javaparser.ast.Modifier; |
| import com.github.javaparser.ast.Node; |
| import com.github.javaparser.ast.PackageDeclaration; |
| import com.github.javaparser.ast.body.AnnotationDeclaration; |
| import com.github.javaparser.ast.body.AnnotationMemberDeclaration; |
| import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; |
| import com.github.javaparser.ast.body.ConstructorDeclaration; |
| import com.github.javaparser.ast.body.EnumConstantDeclaration; |
| import com.github.javaparser.ast.body.EnumDeclaration; |
| import com.github.javaparser.ast.body.FieldDeclaration; |
| import com.github.javaparser.ast.body.InitializerDeclaration; |
| import com.github.javaparser.ast.body.MethodDeclaration; |
| import com.github.javaparser.ast.body.Parameter; |
| import com.github.javaparser.ast.body.ReceiverParameter; |
| import com.github.javaparser.ast.body.VariableDeclarator; |
| import com.github.javaparser.ast.comments.BlockComment; |
| import com.github.javaparser.ast.comments.JavadocComment; |
| import com.github.javaparser.ast.comments.LineComment; |
| import com.github.javaparser.ast.expr.ArrayAccessExpr; |
| import com.github.javaparser.ast.expr.ArrayCreationExpr; |
| import com.github.javaparser.ast.expr.ArrayInitializerExpr; |
| import com.github.javaparser.ast.expr.AssignExpr; |
| import com.github.javaparser.ast.expr.BinaryExpr; |
| import com.github.javaparser.ast.expr.BooleanLiteralExpr; |
| import com.github.javaparser.ast.expr.CastExpr; |
| import com.github.javaparser.ast.expr.CharLiteralExpr; |
| import com.github.javaparser.ast.expr.ClassExpr; |
| import com.github.javaparser.ast.expr.ConditionalExpr; |
| import com.github.javaparser.ast.expr.DoubleLiteralExpr; |
| import com.github.javaparser.ast.expr.EnclosedExpr; |
| import com.github.javaparser.ast.expr.FieldAccessExpr; |
| import com.github.javaparser.ast.expr.InstanceOfExpr; |
| import com.github.javaparser.ast.expr.IntegerLiteralExpr; |
| import com.github.javaparser.ast.expr.LambdaExpr; |
| import com.github.javaparser.ast.expr.LongLiteralExpr; |
| import com.github.javaparser.ast.expr.MarkerAnnotationExpr; |
| import com.github.javaparser.ast.expr.MemberValuePair; |
| import com.github.javaparser.ast.expr.MethodCallExpr; |
| import com.github.javaparser.ast.expr.MethodReferenceExpr; |
| import com.github.javaparser.ast.expr.Name; |
| import com.github.javaparser.ast.expr.NameExpr; |
| import com.github.javaparser.ast.expr.NormalAnnotationExpr; |
| import com.github.javaparser.ast.expr.NullLiteralExpr; |
| import com.github.javaparser.ast.expr.ObjectCreationExpr; |
| import com.github.javaparser.ast.expr.SimpleName; |
| import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr; |
| import com.github.javaparser.ast.expr.StringLiteralExpr; |
| import com.github.javaparser.ast.expr.SuperExpr; |
| import com.github.javaparser.ast.expr.SwitchExpr; |
| import com.github.javaparser.ast.expr.TextBlockLiteralExpr; |
| import com.github.javaparser.ast.expr.ThisExpr; |
| import com.github.javaparser.ast.expr.TypeExpr; |
| import com.github.javaparser.ast.expr.UnaryExpr; |
| import com.github.javaparser.ast.expr.VariableDeclarationExpr; |
| import com.github.javaparser.ast.modules.ModuleDeclaration; |
| import com.github.javaparser.ast.modules.ModuleExportsDirective; |
| import com.github.javaparser.ast.modules.ModuleOpensDirective; |
| import com.github.javaparser.ast.modules.ModuleProvidesDirective; |
| import com.github.javaparser.ast.modules.ModuleRequiresDirective; |
| import com.github.javaparser.ast.modules.ModuleUsesDirective; |
| import com.github.javaparser.ast.stmt.AssertStmt; |
| import com.github.javaparser.ast.stmt.BlockStmt; |
| import com.github.javaparser.ast.stmt.BreakStmt; |
| import com.github.javaparser.ast.stmt.CatchClause; |
| import com.github.javaparser.ast.stmt.ContinueStmt; |
| import com.github.javaparser.ast.stmt.DoStmt; |
| import com.github.javaparser.ast.stmt.EmptyStmt; |
| import com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt; |
| import com.github.javaparser.ast.stmt.ExpressionStmt; |
| import com.github.javaparser.ast.stmt.ForEachStmt; |
| import com.github.javaparser.ast.stmt.ForStmt; |
| import com.github.javaparser.ast.stmt.IfStmt; |
| import com.github.javaparser.ast.stmt.LabeledStmt; |
| import com.github.javaparser.ast.stmt.LocalClassDeclarationStmt; |
| import com.github.javaparser.ast.stmt.ReturnStmt; |
| import com.github.javaparser.ast.stmt.SwitchEntry; |
| import com.github.javaparser.ast.stmt.SwitchStmt; |
| import com.github.javaparser.ast.stmt.SynchronizedStmt; |
| import com.github.javaparser.ast.stmt.ThrowStmt; |
| import com.github.javaparser.ast.stmt.TryStmt; |
| import com.github.javaparser.ast.stmt.UnparsableStmt; |
| import com.github.javaparser.ast.stmt.WhileStmt; |
| import com.github.javaparser.ast.stmt.YieldStmt; |
| import com.github.javaparser.ast.type.ArrayType; |
| import com.github.javaparser.ast.type.ClassOrInterfaceType; |
| import com.github.javaparser.ast.type.IntersectionType; |
| import com.github.javaparser.ast.type.PrimitiveType; |
| import com.github.javaparser.ast.type.TypeParameter; |
| import com.github.javaparser.ast.type.UnionType; |
| import com.github.javaparser.ast.type.UnknownType; |
| import com.github.javaparser.ast.type.VarType; |
| import com.github.javaparser.ast.type.VoidType; |
| import com.github.javaparser.ast.type.WildcardType; |
| import com.github.javaparser.ast.visitor.VoidVisitorAdapter; |
| import java.util.List; |
| |
| /** |
| * A visitor that visits two JavaParser ASTs simultaneously that almost match. When calling a visit |
| * method, the secondary argument must be another JavaParser {@code Node} that represents an AST |
| * identical to the first argument except for the exceptions allowed between an ajava file and its |
| * corresponding Java file, see the linked section of the manual. |
| * |
| * <p>To use this class, extend it and override {@link #defaultAction(Node, Node)}. This method will |
| * be called on every pair of nodes in the two ASTs. This class does not visit annotations, since |
| * those may differ between the two ASTs. |
| * |
| * @checker_framework.manual #ajava-contents ways in which the two visited ASTs may differ |
| */ |
| public abstract class DoubleJavaParserVisitor extends VoidVisitorAdapter<Node> { |
| /** |
| * Default action performed on all pairs of nodes from matching ASTs. |
| * |
| * @param node1 first node in pair |
| * @param node2 second node in pair |
| * @param <T> the Node type of {@code node1} and {@code node2} |
| */ |
| public abstract <T extends Node> void defaultAction(T node1, T node2); |
| |
| /** |
| * Given two lists with the same size where corresponding elements represent nodes with |
| * almost-identical ASTs as specified in this class's description, visits each pair of |
| * corresponding elements in order. |
| * |
| * @param list1 first list of nodes |
| * @param list2 second list of nodes |
| */ |
| private void visitLists(List<? extends Node> list1, List<? extends Node> list2) { |
| assert list1.size() == list2.size(); |
| for (int i = 0; i < list1.size(); i++) { |
| list1.get(i).accept(this, list2.get(i)); |
| } |
| } |
| |
| @Override |
| public void visit(final AnnotationDeclaration node1, final Node other) { |
| AnnotationDeclaration node2 = (AnnotationDeclaration) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getMembers(), node2.getMembers()); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final AnnotationMemberDeclaration node1, final Node other) { |
| AnnotationMemberDeclaration node2 = (AnnotationMemberDeclaration) other; |
| defaultAction(node1, node2); |
| node1.getDefaultValue().ifPresent(l -> l.accept(this, node2.getDefaultValue().get())); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final ArrayAccessExpr node1, final Node other) { |
| ArrayAccessExpr node2 = (ArrayAccessExpr) other; |
| defaultAction(node1, node2); |
| node1.getIndex().accept(this, node2.getIndex()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ArrayCreationExpr node1, final Node other) { |
| ArrayCreationExpr node2 = (ArrayCreationExpr) other; |
| defaultAction(node1, node2); |
| node1.getElementType().accept(this, node2.getElementType()); |
| node1.getInitializer().ifPresent(l -> l.accept(this, node2.getInitializer().get())); |
| visitLists(node1.getLevels(), node2.getLevels()); |
| } |
| |
| @Override |
| public void visit(final ArrayInitializerExpr node1, final Node other) { |
| ArrayInitializerExpr node2 = (ArrayInitializerExpr) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getValues(), node2.getValues()); |
| } |
| |
| @Override |
| public void visit(final AssertStmt node1, final Node other) { |
| AssertStmt node2 = (AssertStmt) other; |
| defaultAction(node1, node2); |
| node1.getCheck().accept(this, node2.getCheck()); |
| node1.getMessage().ifPresent(l -> l.accept(this, node2.getMessage().get())); |
| } |
| |
| @Override |
| public void visit(final AssignExpr node1, final Node other) { |
| AssignExpr node2 = (AssignExpr) other; |
| defaultAction(node1, node2); |
| node1.getTarget().accept(this, node2.getTarget()); |
| node1.getValue().accept(this, node2.getValue()); |
| } |
| |
| @Override |
| public void visit(final BinaryExpr node1, final Node other) { |
| BinaryExpr node2 = (BinaryExpr) other; |
| defaultAction(node1, node2); |
| node1.getLeft().accept(this, node2.getLeft()); |
| node1.getRight().accept(this, node2.getRight()); |
| } |
| |
| @Override |
| public void visit(final BlockComment node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final BlockStmt node1, final Node other) { |
| BlockStmt node2 = (BlockStmt) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getStatements(), node2.getStatements()); |
| } |
| |
| @Override |
| public void visit(final BooleanLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final BreakStmt node1, final Node other) { |
| BreakStmt node2 = (BreakStmt) other; |
| defaultAction(node1, node2); |
| node1.getLabel().ifPresent(l -> l.accept(this, node2.getLabel().get())); |
| } |
| |
| @Override |
| public void visit(final CastExpr node1, final Node other) { |
| CastExpr node2 = (CastExpr) other; |
| defaultAction(node1, node2); |
| node1.getExpression().accept(this, node2.getExpression()); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final CatchClause node1, final Node other) { |
| CatchClause node2 = (CatchClause) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| node1.getParameter().accept(this, node2.getParameter()); |
| } |
| |
| @Override |
| public void visit(final CharLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final ClassExpr node1, final Node other) { |
| ClassExpr node2 = (ClassExpr) other; |
| defaultAction(node1, node2); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final ClassOrInterfaceDeclaration node1, final Node other) { |
| ClassOrInterfaceDeclaration node2 = (ClassOrInterfaceDeclaration) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getExtendedTypes(), node2.getExtendedTypes()); |
| visitLists(node1.getImplementedTypes(), node2.getImplementedTypes()); |
| visitLists(node1.getTypeParameters(), node2.getTypeParameters()); |
| visitLists(node1.getMembers(), node2.getMembers()); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ClassOrInterfaceType node1, final Node other) { |
| ClassOrInterfaceType node2 = (ClassOrInterfaceType) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| node1.getScope().ifPresent(l -> l.accept(this, node2.getScope().get())); |
| node1.getTypeArguments().ifPresent(l -> visitLists(l, node2.getTypeArguments().get())); |
| } |
| |
| @Override |
| public void visit(final CompilationUnit node1, final Node other) { |
| CompilationUnit node2 = (CompilationUnit) other; |
| defaultAction(node1, node2); |
| node1.getModule().ifPresent(l -> l.accept(this, node2.getModule().get())); |
| node1 |
| .getPackageDeclaration() |
| .ifPresent(l -> l.accept(this, node2.getPackageDeclaration().get())); |
| visitLists(node1.getTypes(), node2.getTypes()); |
| } |
| |
| @Override |
| public void visit(final ConditionalExpr node1, final Node other) { |
| ConditionalExpr node2 = (ConditionalExpr) other; |
| defaultAction(node1, node2); |
| node1.getCondition().accept(this, node2.getCondition()); |
| node1.getElseExpr().accept(this, node2.getElseExpr()); |
| node1.getThenExpr().accept(this, node2.getThenExpr()); |
| } |
| |
| @Override |
| public void visit(final ConstructorDeclaration node1, final Node other) { |
| ConstructorDeclaration node2 = (ConstructorDeclaration) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| visitLists(node1.getParameters(), node2.getParameters()); |
| if (node1.getReceiverParameter().isPresent() && node2.getReceiverParameter().isPresent()) { |
| node1.getReceiverParameter().get().accept(this, node2.getReceiverParameter().get()); |
| } |
| |
| visitLists(node1.getThrownExceptions(), node2.getThrownExceptions()); |
| visitLists(node1.getTypeParameters(), node2.getTypeParameters()); |
| } |
| |
| @Override |
| public void visit(final ContinueStmt node1, final Node other) { |
| ContinueStmt node2 = (ContinueStmt) other; |
| defaultAction(node1, node2); |
| node1.getLabel().ifPresent(l -> l.accept(this, node2.getLabel().get())); |
| } |
| |
| @Override |
| public void visit(final DoStmt node1, final Node other) { |
| DoStmt node2 = (DoStmt) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| node1.getCondition().accept(this, node2.getCondition()); |
| } |
| |
| @Override |
| public void visit(final DoubleLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final EmptyStmt node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final EnclosedExpr node1, final Node other) { |
| EnclosedExpr node2 = (EnclosedExpr) other; |
| defaultAction(node1, node2); |
| node1.getInner().accept(this, node2.getInner()); |
| } |
| |
| @Override |
| public void visit(final EnumConstantDeclaration node1, final Node other) { |
| EnumConstantDeclaration node2 = (EnumConstantDeclaration) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getArguments(), node2.getArguments()); |
| visitLists(node1.getClassBody(), node2.getClassBody()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final EnumDeclaration node1, final Node other) { |
| EnumDeclaration node2 = (EnumDeclaration) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getEntries(), node2.getEntries()); |
| visitLists(node1.getImplementedTypes(), node2.getImplementedTypes()); |
| visitLists(node1.getMembers(), node2.getMembers()); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ExplicitConstructorInvocationStmt node1, final Node other) { |
| ExplicitConstructorInvocationStmt node2 = (ExplicitConstructorInvocationStmt) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getArguments(), node2.getArguments()); |
| node1.getExpression().ifPresent(l -> l.accept(this, node2.getExpression().get())); |
| node1.getTypeArguments().ifPresent(l -> visitLists(l, node2.getTypeArguments().get())); |
| } |
| |
| @Override |
| public void visit(final ExpressionStmt node1, final Node other) { |
| ExpressionStmt node2 = (ExpressionStmt) other; |
| defaultAction(node1, node2); |
| node1.getExpression().accept(this, node2.getExpression()); |
| } |
| |
| @Override |
| public void visit(final FieldAccessExpr node1, final Node other) { |
| FieldAccessExpr node2 = (FieldAccessExpr) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| node1.getScope().accept(this, node2.getScope()); |
| node1.getTypeArguments().ifPresent(l -> visitLists(l, node2.getTypeArguments().get())); |
| } |
| |
| @Override |
| public void visit(final FieldDeclaration node1, final Node other) { |
| FieldDeclaration node2 = (FieldDeclaration) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| visitLists(node1.getVariables(), node2.getVariables()); |
| } |
| |
| @Override |
| public void visit(final ForEachStmt node1, final Node other) { |
| ForEachStmt node2 = (ForEachStmt) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| node1.getIterable().accept(this, node2.getIterable()); |
| node1.getVariable().accept(this, node2.getVariable()); |
| } |
| |
| @Override |
| public void visit(final ForStmt node1, final Node other) { |
| ForStmt node2 = (ForStmt) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| node1.getCompare().ifPresent(l -> l.accept(this, node2.getCompare().get())); |
| visitLists(node1.getInitialization(), node2.getInitialization()); |
| visitLists(node1.getUpdate(), node2.getUpdate()); |
| } |
| |
| @Override |
| public void visit(final IfStmt node1, final Node other) { |
| IfStmt node2 = (IfStmt) other; |
| defaultAction(node1, node2); |
| node1.getCondition().accept(this, node2.getCondition()); |
| node1.getElseStmt().ifPresent(l -> l.accept(this, node2.getElseStmt().get())); |
| node1.getThenStmt().accept(this, node2.getThenStmt()); |
| } |
| |
| @Override |
| public void visit(final InitializerDeclaration node1, final Node other) { |
| InitializerDeclaration node2 = (InitializerDeclaration) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| } |
| |
| @Override |
| public void visit(final InstanceOfExpr node1, final Node other) { |
| InstanceOfExpr node2 = (InstanceOfExpr) other; |
| defaultAction(node1, node2); |
| node1.getExpression().accept(this, node2.getExpression()); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final IntegerLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final JavadocComment node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final LabeledStmt node1, final Node other) { |
| LabeledStmt node2 = (LabeledStmt) other; |
| defaultAction(node1, node2); |
| node1.getLabel().accept(this, node2.getLabel()); |
| node1.getStatement().accept(this, node2.getStatement()); |
| } |
| |
| @Override |
| public void visit(final LineComment node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final LongLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final MarkerAnnotationExpr node1, final Node other) { |
| MarkerAnnotationExpr node2 = (MarkerAnnotationExpr) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final MemberValuePair node1, final Node other) { |
| MemberValuePair node2 = (MemberValuePair) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| node1.getValue().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final MethodCallExpr node1, final Node other) { |
| MethodCallExpr node2 = (MethodCallExpr) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getArguments(), node2.getArguments()); |
| node1.getName().accept(this, node2.getName()); |
| node1.getScope().ifPresent(l -> l.accept(this, node2.getScope().get())); |
| node1.getTypeArguments().ifPresent(l -> visitLists(l, node2.getTypeArguments().get())); |
| } |
| |
| @Override |
| public void visit(final MethodDeclaration node1, final Node other) { |
| MethodDeclaration node2 = (MethodDeclaration) other; |
| defaultAction(node1, node2); |
| node1.getBody().ifPresent(l -> l.accept(this, node2.getBody().get())); |
| node1.getType().accept(this, node2.getType()); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| visitLists(node1.getParameters(), node2.getParameters()); |
| if (node1.getReceiverParameter().isPresent() && node2.getReceiverParameter().isPresent()) { |
| node1.getReceiverParameter().get().accept(this, node2.getReceiverParameter().get()); |
| } |
| |
| visitLists(node1.getThrownExceptions(), node2.getThrownExceptions()); |
| visitLists(node1.getTypeParameters(), node2.getTypeParameters()); |
| } |
| |
| @Override |
| public void visit(final NameExpr node1, final Node other) { |
| NameExpr node2 = (NameExpr) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final NormalAnnotationExpr node1, final Node other) { |
| NormalAnnotationExpr node2 = (NormalAnnotationExpr) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getPairs(), node2.getPairs()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final NullLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final ObjectCreationExpr node1, final Node other) { |
| ObjectCreationExpr node2 = (ObjectCreationExpr) other; |
| defaultAction(node1, node2); |
| node1 |
| .getAnonymousClassBody() |
| .ifPresent(l -> visitLists(l, node2.getAnonymousClassBody().get())); |
| visitLists(node1.getArguments(), node2.getArguments()); |
| node1.getScope().ifPresent(l -> l.accept(this, node2.getScope().get())); |
| node1.getType().accept(this, node2.getType()); |
| node1.getTypeArguments().ifPresent(l -> visitLists(l, node2.getTypeArguments().get())); |
| } |
| |
| @Override |
| public void visit(final PackageDeclaration node1, final Node other) { |
| PackageDeclaration node2 = (PackageDeclaration) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final Parameter node1, final Node other) { |
| Parameter node2 = (Parameter) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final PrimitiveType node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final Name node1, final Node other) { |
| Name node2 = (Name) other; |
| defaultAction(node1, node2); |
| node1.getQualifier().ifPresent(l -> l.accept(this, node2.getQualifier().get())); |
| } |
| |
| @Override |
| public void visit(final SimpleName node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final ArrayType node1, final Node other) { |
| ArrayType node2 = (ArrayType) other; |
| defaultAction(node1, node2); |
| node1.getComponentType().accept(this, node2.getComponentType()); |
| } |
| |
| @Override |
| public void visit(final ArrayCreationLevel node1, final Node other) { |
| ArrayCreationLevel node2 = (ArrayCreationLevel) other; |
| defaultAction(node1, node2); |
| node1.getDimension().ifPresent(l -> l.accept(this, node2.getDimension().get())); |
| } |
| |
| @Override |
| public void visit(final IntersectionType node1, final Node other) { |
| IntersectionType node2 = (IntersectionType) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getElements(), node2.getElements()); |
| } |
| |
| @Override |
| public void visit(final UnionType node1, final Node other) { |
| UnionType node2 = (UnionType) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getElements(), node2.getElements()); |
| } |
| |
| @Override |
| public void visit(final ReturnStmt node1, final Node other) { |
| ReturnStmt node2 = (ReturnStmt) other; |
| defaultAction(node1, node2); |
| node1.getExpression().ifPresent(l -> l.accept(this, node2.getExpression().get())); |
| } |
| |
| @Override |
| public void visit(final SingleMemberAnnotationExpr node1, final Node other) { |
| SingleMemberAnnotationExpr node2 = (SingleMemberAnnotationExpr) other; |
| defaultAction(node1, node2); |
| node1.getMemberValue().accept(this, node2.getMemberValue()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final StringLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final SuperExpr node1, final Node other) { |
| SuperExpr node2 = (SuperExpr) other; |
| defaultAction(node1, node2); |
| node1.getTypeName().ifPresent(l -> l.accept(this, node2.getTypeName().get())); |
| } |
| |
| @Override |
| public void visit(final SwitchEntry node1, final Node other) { |
| SwitchEntry node2 = (SwitchEntry) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getLabels(), node2.getLabels()); |
| visitLists(node1.getStatements(), node2.getStatements()); |
| } |
| |
| @Override |
| public void visit(final SwitchStmt node1, final Node other) { |
| SwitchStmt node2 = (SwitchStmt) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getEntries(), node2.getEntries()); |
| node1.getSelector().accept(this, node2.getSelector()); |
| } |
| |
| @Override |
| public void visit(final SynchronizedStmt node1, final Node other) { |
| SynchronizedStmt node2 = (SynchronizedStmt) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| node1.getExpression().accept(this, node2.getExpression()); |
| } |
| |
| @Override |
| public void visit(final ThisExpr node1, final Node other) { |
| ThisExpr node2 = (ThisExpr) other; |
| defaultAction(node1, node2); |
| node1.getTypeName().ifPresent(l -> l.accept(this, node2.getTypeName().get())); |
| } |
| |
| @Override |
| public void visit(final ThrowStmt node1, final Node other) { |
| ThrowStmt node2 = (ThrowStmt) other; |
| defaultAction(node1, node2); |
| node1.getExpression().accept(this, node2.getExpression()); |
| } |
| |
| @Override |
| public void visit(final TryStmt node1, final Node other) { |
| TryStmt node2 = (TryStmt) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getCatchClauses(), node2.getCatchClauses()); |
| node1.getFinallyBlock().ifPresent(l -> l.accept(this, node2.getFinallyBlock().get())); |
| visitLists(node1.getResources(), node2.getResources()); |
| node1.getTryBlock().accept(this, node2.getTryBlock()); |
| } |
| |
| @Override |
| public void visit(final LocalClassDeclarationStmt node1, final Node other) { |
| LocalClassDeclarationStmt node2 = (LocalClassDeclarationStmt) other; |
| defaultAction(node1, node2); |
| node1.getClassDeclaration().accept(this, node2.getClassDeclaration()); |
| } |
| |
| @Override |
| public void visit(final TypeParameter node1, final Node other) { |
| TypeParameter node2 = (TypeParameter) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| // Since ajava files and its corresponding Java file may differ in whether they contain a type |
| // bound, only visit type bounds if they're present in both nodes. |
| if (node1.getTypeBound().isEmpty() == node2.getTypeBound().isEmpty()) { |
| visitLists(node1.getTypeBound(), node2.getTypeBound()); |
| } |
| } |
| |
| @Override |
| public void visit(final UnaryExpr node1, final Node other) { |
| UnaryExpr node2 = (UnaryExpr) other; |
| defaultAction(node1, node2); |
| node1.getExpression().accept(this, node2.getExpression()); |
| } |
| |
| @Override |
| public void visit(final UnknownType node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final VariableDeclarationExpr node1, final Node other) { |
| VariableDeclarationExpr node2 = (VariableDeclarationExpr) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| visitLists(node1.getVariables(), node2.getVariables()); |
| } |
| |
| @Override |
| public void visit(final VariableDeclarator node1, final Node other) { |
| VariableDeclarator node2 = (VariableDeclarator) other; |
| defaultAction(node1, node2); |
| node1.getInitializer().ifPresent(l -> l.accept(this, node2.getInitializer().get())); |
| node1.getName().accept(this, node2.getName()); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final VoidType node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final WhileStmt node1, final Node other) { |
| WhileStmt node2 = (WhileStmt) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| node1.getCondition().accept(this, node2.getCondition()); |
| } |
| |
| @Override |
| public void visit(final WildcardType node1, final Node other) { |
| WildcardType node2 = (WildcardType) other; |
| defaultAction(node1, node2); |
| node1.getExtendedType().ifPresent(l -> l.accept(this, node2.getExtendedType().get())); |
| node1.getSuperType().ifPresent(l -> l.accept(this, node2.getSuperType().get())); |
| } |
| |
| @Override |
| public void visit(final LambdaExpr node1, final Node other) { |
| LambdaExpr node2 = (LambdaExpr) other; |
| defaultAction(node1, node2); |
| node1.getBody().accept(this, node2.getBody()); |
| visitLists(node1.getParameters(), node2.getParameters()); |
| } |
| |
| @Override |
| public void visit(final MethodReferenceExpr node1, final Node other) { |
| MethodReferenceExpr node2 = (MethodReferenceExpr) other; |
| defaultAction(node1, node2); |
| node1.getScope().accept(this, node2.getScope()); |
| node1.getTypeArguments().ifPresent(l -> visitLists(l, node2.getTypeArguments().get())); |
| } |
| |
| @Override |
| public void visit(final TypeExpr node1, final Node other) { |
| TypeExpr node2 = (TypeExpr) other; |
| defaultAction(node1, node2); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final ImportDeclaration node1, final Node other) { |
| ImportDeclaration node2 = (ImportDeclaration) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ModuleDeclaration node1, final Node other) { |
| ModuleDeclaration node2 = (ModuleDeclaration) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getDirectives(), node2.getDirectives()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ModuleRequiresDirective node1, final Node other) { |
| ModuleRequiresDirective node2 = (ModuleRequiresDirective) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getModifiers(), node2.getModifiers()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ModuleExportsDirective node1, final Node other) { |
| ModuleExportsDirective node2 = (ModuleExportsDirective) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getModuleNames(), node2.getModuleNames()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ModuleProvidesDirective node1, final Node other) { |
| ModuleProvidesDirective node2 = (ModuleProvidesDirective) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| visitLists(node1.getWith(), node2.getWith()); |
| } |
| |
| @Override |
| public void visit(final ModuleUsesDirective node1, final Node other) { |
| ModuleUsesDirective node2 = (ModuleUsesDirective) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final ModuleOpensDirective node1, final Node other) { |
| ModuleOpensDirective node2 = (ModuleOpensDirective) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getModuleNames(), node2.getModuleNames()); |
| node1.getName().accept(this, node2.getName()); |
| } |
| |
| @Override |
| public void visit(final UnparsableStmt node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final ReceiverParameter node1, final Node other) { |
| ReceiverParameter node2 = (ReceiverParameter) other; |
| defaultAction(node1, node2); |
| node1.getName().accept(this, node2.getName()); |
| node1.getType().accept(this, node2.getType()); |
| } |
| |
| @Override |
| public void visit(final VarType node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final Modifier node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final SwitchExpr node1, final Node other) { |
| SwitchExpr node2 = (SwitchExpr) other; |
| defaultAction(node1, node2); |
| visitLists(node1.getEntries(), node2.getEntries()); |
| node1.getSelector().accept(this, node2.getSelector()); |
| } |
| |
| @Override |
| public void visit(final TextBlockLiteralExpr node1, final Node other) { |
| defaultAction(node1, other); |
| } |
| |
| @Override |
| public void visit(final YieldStmt node1, final Node other) { |
| YieldStmt node2 = (YieldStmt) other; |
| defaultAction(node1, node2); |
| node1.getExpression().accept(this, node2.getExpression()); |
| } |
| } |