package org.checkerframework.dataflow.cfg.node;

/**
 * A default implementation of the node visitor interface. The class introduces several 'summary'
 * methods, that can be overridden to change the behavior of several related visit methods at once.
 * An example is the {@code visitValueLiteral} method, that is called for every {@link
 * ValueLiteralNode}.
 *
 * <p>This is useful to implement a visitor that performs the same operation (e.g., nothing) for
 * most {@link Node}s and only has special behavior for a few.
 *
 * @param <R> return type of the visitor
 * @param <P> parameter type of the visitor
 */
public abstract class AbstractNodeVisitor<R, P> implements NodeVisitor<R, P> {

  public abstract R visitNode(Node n, P p);

  public R visitValueLiteral(ValueLiteralNode n, P p) {
    return visitNode(n, p);
  }

  // Literals
  @Override
  public R visitShortLiteral(ShortLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitIntegerLiteral(IntegerLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitLongLiteral(LongLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitFloatLiteral(FloatLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitDoubleLiteral(DoubleLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitBooleanLiteral(BooleanLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitCharacterLiteral(CharacterLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitStringLiteral(StringLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  @Override
  public R visitNullLiteral(NullLiteralNode n, P p) {
    return visitValueLiteral(n, p);
  }

  // Unary operations
  @Override
  public R visitNumericalMinus(NumericalMinusNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNumericalPlus(NumericalPlusNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitBitwiseComplement(BitwiseComplementNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNullChk(NullChkNode n, P p) {
    return visitNode(n, p);
  }

  // Binary operations
  @Override
  public R visitStringConcatenate(StringConcatenateNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNumericalAddition(NumericalAdditionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNumericalSubtraction(NumericalSubtractionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNumericalMultiplication(NumericalMultiplicationNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitIntegerDivision(IntegerDivisionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitFloatingDivision(FloatingDivisionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitIntegerRemainder(IntegerRemainderNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitFloatingRemainder(FloatingRemainderNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitLeftShift(LeftShiftNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitSignedRightShift(SignedRightShiftNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitUnsignedRightShift(UnsignedRightShiftNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitBitwiseAnd(BitwiseAndNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitBitwiseOr(BitwiseOrNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitBitwiseXor(BitwiseXorNode n, P p) {
    return visitNode(n, p);
  }

  // Compound assignments
  @Override
  public R visitStringConcatenateAssignment(StringConcatenateAssignmentNode n, P p) {
    return visitNode(n, p);
  }

  // Comparison operations
  @Override
  public R visitLessThan(LessThanNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitLessThanOrEqual(LessThanOrEqualNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitGreaterThan(GreaterThanNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitGreaterThanOrEqual(GreaterThanOrEqualNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitEqualTo(EqualToNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNotEqual(NotEqualNode n, P p) {
    return visitNode(n, p);
  }

  // Conditional operations
  @Override
  public R visitConditionalAnd(ConditionalAndNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitConditionalOr(ConditionalOrNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitConditionalNot(ConditionalNotNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitTernaryExpression(TernaryExpressionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitAssignment(AssignmentNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitLocalVariable(LocalVariableNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitVariableDeclaration(VariableDeclarationNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitFieldAccess(FieldAccessNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitMethodAccess(MethodAccessNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitArrayAccess(ArrayAccessNode n, P p) {
    return visitNode(n, p);
  }

  public R visitThis(ThisNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitImplicitThis(ImplicitThisNode n, P p) {
    return visitThis(n, p);
  }

  @Override
  public R visitExplicitThis(ExplicitThisNode n, P p) {
    return visitThis(n, p);
  }

  @Override
  public R visitSuper(SuperNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitReturn(ReturnNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitLambdaResultExpression(LambdaResultExpressionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitStringConversion(StringConversionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitWideningConversion(WideningConversionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitNarrowingConversion(NarrowingConversionNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitInstanceOf(InstanceOfNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitTypeCast(TypeCastNode n, P p) {
    return visitNode(n, p);
  }

  // Statements
  @Override
  public R visitAssertionError(AssertionErrorNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitSynchronized(SynchronizedNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitThrow(ThrowNode n, P p) {
    return visitNode(n, p);
  }

  // Cases
  @Override
  public R visitCase(CaseNode n, P p) {
    return visitNode(n, p);
  }

  // Method and constructor invocations
  @Override
  public R visitMethodInvocation(MethodInvocationNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitObjectCreation(ObjectCreationNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitClassDeclaration(ClassDeclarationNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitMemberReference(FunctionalInterfaceNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitArrayCreation(ArrayCreationNode n, P p) {
    return visitNode(n, p);
  }

  // Type, package and class names
  @Override
  public R visitArrayType(ArrayTypeNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitPrimitiveType(PrimitiveTypeNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitClassName(ClassNameNode n, P p) {
    return visitNode(n, p);
  }

  @Override
  public R visitPackageName(PackageNameNode n, P p) {
    return visitNode(n, p);
  }

  // Parameterized types
  @Override
  public R visitParameterizedType(ParameterizedTypeNode n, P p) {
    return visitNode(n, p);
  }

  // Marker nodes
  @Override
  public R visitMarker(MarkerNode n, P p) {
    return visitNode(n, p);
  }
}
