blob: 73c07f53355cee92e15b8dd7647ff17dfbcda62c [file] [log] [blame]
package org.checkerframework.dataflow.cfg.node;
/**
* A visitor for a {@link Node} tree.
*
* @param <R> return type of the visitor. Use {@link Void} if the visitor does not have a return
* value.
* @param <P> parameter type of the visitor. Use {@link Void} if the visitor does not have a
* parameter.
*/
public interface NodeVisitor<R, P> {
// Literals
R visitShortLiteral(ShortLiteralNode n, P p);
R visitIntegerLiteral(IntegerLiteralNode n, P p);
R visitLongLiteral(LongLiteralNode n, P p);
R visitFloatLiteral(FloatLiteralNode n, P p);
R visitDoubleLiteral(DoubleLiteralNode n, P p);
R visitBooleanLiteral(BooleanLiteralNode n, P p);
R visitCharacterLiteral(CharacterLiteralNode n, P p);
R visitStringLiteral(StringLiteralNode n, P p);
R visitNullLiteral(NullLiteralNode n, P p);
// Unary operations
R visitNumericalMinus(NumericalMinusNode n, P p);
R visitNumericalPlus(NumericalPlusNode n, P p);
R visitBitwiseComplement(BitwiseComplementNode n, P p);
R visitNullChk(NullChkNode n, P p);
// Binary operations
R visitStringConcatenate(StringConcatenateNode n, P p);
R visitNumericalAddition(NumericalAdditionNode n, P p);
R visitNumericalSubtraction(NumericalSubtractionNode n, P p);
R visitNumericalMultiplication(NumericalMultiplicationNode n, P p);
R visitIntegerDivision(IntegerDivisionNode n, P p);
R visitFloatingDivision(FloatingDivisionNode n, P p);
R visitIntegerRemainder(IntegerRemainderNode n, P p);
R visitFloatingRemainder(FloatingRemainderNode n, P p);
R visitLeftShift(LeftShiftNode n, P p);
R visitSignedRightShift(SignedRightShiftNode n, P p);
R visitUnsignedRightShift(UnsignedRightShiftNode n, P p);
R visitBitwiseAnd(BitwiseAndNode n, P p);
R visitBitwiseOr(BitwiseOrNode n, P p);
R visitBitwiseXor(BitwiseXorNode n, P p);
// Compound assignments
R visitStringConcatenateAssignment(StringConcatenateAssignmentNode n, P p);
// Comparison operations
R visitLessThan(LessThanNode n, P p);
R visitLessThanOrEqual(LessThanOrEqualNode n, P p);
R visitGreaterThan(GreaterThanNode n, P p);
R visitGreaterThanOrEqual(GreaterThanOrEqualNode n, P p);
R visitEqualTo(EqualToNode n, P p);
R visitNotEqual(NotEqualNode n, P p);
// Conditional operations
R visitConditionalAnd(ConditionalAndNode n, P p);
R visitConditionalOr(ConditionalOrNode n, P p);
R visitConditionalNot(ConditionalNotNode n, P p);
R visitTernaryExpression(TernaryExpressionNode n, P p);
R visitAssignment(AssignmentNode n, P p);
R visitLocalVariable(LocalVariableNode n, P p);
R visitVariableDeclaration(VariableDeclarationNode n, P p);
R visitFieldAccess(FieldAccessNode n, P p);
R visitMethodAccess(MethodAccessNode n, P p);
R visitArrayAccess(ArrayAccessNode n, P p);
R visitImplicitThis(ImplicitThisNode n, P p);
R visitExplicitThis(ExplicitThisNode n, P p);
R visitSuper(SuperNode n, P p);
R visitReturn(ReturnNode n, P p);
R visitLambdaResultExpression(LambdaResultExpressionNode n, P p);
R visitStringConversion(StringConversionNode n, P p);
R visitWideningConversion(WideningConversionNode n, P p);
R visitNarrowingConversion(NarrowingConversionNode n, P p);
R visitInstanceOf(InstanceOfNode n, P p);
R visitTypeCast(TypeCastNode n, P p);
// Blocks
R visitSynchronized(SynchronizedNode n, P p);
// Statements
R visitAssertionError(AssertionErrorNode n, P p);
R visitThrow(ThrowNode n, P p);
// Cases
R visitCase(CaseNode n, P p);
// Method and constructor invocations
R visitMethodInvocation(MethodInvocationNode n, P p);
R visitObjectCreation(ObjectCreationNode n, P p);
R visitMemberReference(FunctionalInterfaceNode n, P p);
R visitArrayCreation(ArrayCreationNode n, P p);
// Type, package and class names
R visitArrayType(ArrayTypeNode n, P p);
R visitPrimitiveType(PrimitiveTypeNode n, P p);
R visitClassName(ClassNameNode n, P p);
R visitPackageName(PackageNameNode n, P p);
// Parameterized types
R visitParameterizedType(ParameterizedTypeNode n, P p);
// Marker nodes
R visitMarker(MarkerNode n, P p);
// Anonymous/inner/nested class declaration within a method
R visitClassDeclaration(ClassDeclarationNode classDeclarationNode, P p);
}