# Interface TreeVisitor<R,P>

Type Parameters:
  `R` - the return type of this visitor's methods. Use `Void` for visitors that do not need to return results.
  `P` - the type of the additional parameter to this visitor's methods. Use `Void` for visitors that do not need an additional parameter.

All Known Implementing Classes:
  `SimpleTreeVisitor`, `TreePathScanner`, `TreeScanner`

public interface TreeVisitor<R,P>
A visitor of trees, in the style of the visitor design pattern. Classes implementing this interface are used to operate on a tree when the kind of tree is unknown at compile time. When a visitor is passed to a tree's `accept` method, the `visitXyz` method most applicable to that tree is invoked.

Classes implementing this interface may or may not throw a `NullPointerException` if the additional parameter `p` is `null`; see documentation of the implementing class for details.

WARNING: It is possible that methods will be added to this interface to accommodate new, currently unknown, language structures added to future versions of the Java programming language. Therefore, visitor classes directly implementing this interface may be source incompatible with future versions of the platform.

Since:
  1.6

- ## Method Summary

  Modifier and Type
  Method
  Description
  `R`
  `visitAnnotatedType(AnnotatedTypeTree node, P p)`
  Visits an `AnnotatedTypeTree` node.
  `R`
  `visitAnnotation(AnnotationTree node, P p)`
  Visits an `AnnotatedTree` node.
  `R`
  `visitAnyPattern(AnyPatternTree node, P p)`
  Visits a `AnyPatternTree` node.
  `R`
  `visitArrayAccess(ArrayAccessTree node, P p)`
  Visits an `ArrayAccessTree` node.
  `R`
  `visitArrayType(ArrayTypeTree node, P p)`
  Visits an `ArrayTypeTree` node.
  `R`
  `visitAssert(AssertTree node, P p)`
  Visits an `AssertTree` node.
  `R`
  `visitAssignment(AssignmentTree node, P p)`
  Visits an `AssignmentTree` node.
  `R`
  `visitBinary(BinaryTree node, P p)`
  Visits a `BinaryTree` node.
  `R`
  `visitBindingPattern(BindingPatternTree node, P p)`
  Visits a `BindingPatternTree` node.
  `R`
  `visitBlock(BlockTree node, P p)`
  Visits a `BlockTree` node.
  `R`
  `visitBreak(BreakTree node, P p)`
  Visits a `BreakTree` node.
  `R`
  `visitCase(CaseTree node, P p)`
  Visits a `CaseTree` node.
  `R`
  `visitCatch(CatchTree node, P p)`
  Visits a `CatchTree` node.
  `R`
  `visitClass(ClassTree node, P p)`
  Visits a `ClassTree` node.
  `R`
  `visitCompilationUnit(CompilationUnitTree node, P p)`
  Visits a `CompilationUnitTree` node.
  `R`
  `visitCompoundAssignment(CompoundAssignmentTree node, P p)`
  Visits a `CompoundAssignmentTree` node.
  `R`
  `visitConditionalExpression(ConditionalExpressionTree node, P p)`
  Visits a `ConditionalExpressionTree` node.
  `R`
  `visitConstantCaseLabel(ConstantCaseLabelTree node, P p)`
  Visits a `ConstantCaseLabelTree` node.
  `R`
  `visitContinue(ContinueTree node, P p)`
  Visits a `ContinueTree` node.
  `R`
  `visitDeconstructionPattern(DeconstructionPatternTree node, P p)`
  Visits a `DeconstructionPatternTree` node.
  `R`
  `visitDefaultCaseLabel(DefaultCaseLabelTree node, P p)`
  Visits a `DefaultCaseLabelTree` node.
  `R`
  `visitDoWhileLoop(DoWhileLoopTree node, P p)`
  Visits a `DoWhileTree` node.
  `R`
  `visitEmptyStatement(EmptyStatementTree node, P p)`
  Visits an `EmptyStatementTree` node.
  `R`
  `visitEnhancedForLoop(EnhancedForLoopTree node, P p)`
  Visits an `EnhancedForLoopTree` node.
  `R`
  `visitErroneous(ErroneousTree node, P p)`
  Visits an `ErroneousTree` node.
  `R`
  `visitExports(ExportsTree node, P p)`
  Visits an `ExportsTree` node.
  `R`
  `visitExpressionStatement(ExpressionStatementTree node, P p)`
  Visits an `ExpressionStatementTree` node.
  `R`
  `visitForLoop(ForLoopTree node, P p)`
  Visits a `ForLoopTree` node.
  `R`
  `visitIdentifier(IdentifierTree node, P p)`
  Visits an `IdentifierTree` node.
  `R`
  `visitIf(IfTree node, P p)`
  Visits an `IfTree` node.
  `R`
  `visitImport(ImportTree node, P p)`
  Visits an `ImportTree` node.
  `R`
  `visitInstanceOf(InstanceOfTree node, P p)`
  Visits an `InstanceOfTree` node.
  `R`
  `visitIntersectionType(IntersectionTypeTree node, P p)`
  Visits an `IntersectionTypeTree` node.
  `R`
  `visitLabeledStatement(LabeledStatementTree node, P p)`
  Visits a `LabeledStatementTree` node.
  `R`
  `visitLambdaExpression(LambdaExpressionTree node, P p)`
  Visits a `LambdaExpressionTree` node.
  `R`
  `visitLiteral(LiteralTree node, P p)`
  Visits a `LiteralTree` node.
  `R`
  `visitMemberReference(MemberReferenceTree node, P p)`
  Visits a `MemberReferenceTree` node.
  `R`
  `visitMemberSelect(MemberSelectTree node, P p)`
  Visits a `MemberSelectTree` node.
  `R`
  `visitMethod(MethodTree node, P p)`
  Visits a `MethodTree` node.
  `R`
  `visitMethodInvocation(MethodInvocationTree node, P p)`
  Visits a `MethodInvocationTree` node.
  `R`
  `visitModifiers(ModifiersTree node, P p)`
  Visits a `ModifiersTree` node.
  `R`
  `visitModule(ModuleTree node, P p)`
  Visits a `ModuleTree` node.
  `R`
  `visitNewArray(NewArrayTree node, P p)`
  Visits a `NewArrayTree` node.
  `R`
  `visitNewClass(NewClassTree node, P p)`
  Visits a `NewClassTree` node.
  `R`
  `visitOpens(OpensTree node, P p)`
  Visits an `OpensTree` node.
  `R`
  `visitOther(Tree node, P p)`
  Visits an unknown type of `Tree` node.
  `R`
  `visitPackage(PackageTree node, P p)`
  Visits a `PackageTree` node.
  `R`
  `visitParameterizedType(ParameterizedTypeTree node, P p)`
  Visits a `ParameterizedTypeTree` node.
  `R`
  `visitParenthesized(ParenthesizedTree node, P p)`
  Visits a `ParenthesizedTree` node.
  `R`
  `visitPatternCaseLabel(PatternCaseLabelTree node, P p)`
  Visits a `PatternCaseLabelTree` node.
  `R`
  `visitPrimitiveType(PrimitiveTypeTree node, P p)`
  Visits a `PrimitiveTypeTree` node.
  `R`
  `visitProvides(ProvidesTree node, P p)`
  Visits a `ProvidesTree` node.
  `R`
  `visitRequires(RequiresTree node, P p)`
  Visits a `RequiresTree` node.
  `R`
  `visitReturn(ReturnTree node, P p)`
  Visits a `ReturnTree` node.
  `R`
  `visitSwitch(SwitchTree node, P p)`
  Visits a `SwitchTree` node.
  `R`
  `visitSwitchExpression(SwitchExpressionTree node, P p)`
  Visits a `SwitchExpressionTree` node.
  `R`
  `visitSynchronized(SynchronizedTree node, P p)`
  Visits a `SynchronizedTree` node.
  `R`
  `visitThrow(ThrowTree node, P p)`
  Visits a `ThrowTree` node.
  `R`
  `visitTry(TryTree node, P p)`
  Visits a `TryTree` node.
  `R`
  `visitTypeCast(TypeCastTree node, P p)`
  Visits a `TypeCastTree` node.
  `R`
  `visitTypeParameter(TypeParameterTree node, P p)`
  Visits a `TypeParameterTree` node.
  `R`
  `visitUnary(UnaryTree node, P p)`
  Visits a `UnaryTree` node.
  `R`
  `visitUnionType(UnionTypeTree node, P p)`
  Visits a `UnionTypeTree` node.
  `R`
  `visitUses(UsesTree node, P p)`
  Visits a `UsesTree` node.
  `R`
  `visitVariable(VariableTree node, P p)`
  Visits a `VariableTree` node.
  `R`
  `visitWhileLoop(WhileLoopTree node, P p)`
  Visits a `WhileLoopTree` node.
  `R`
  `visitWildcard(WildcardTree node, P p)`
  Visits a `WildcardTypeTree` node.
  `R`
  `visitYield(YieldTree node, P p)`
  Visits a `YieldTree` node.

- ## Method Details

  - ### visitAnnotatedType

    R visitAnnotatedType(AnnotatedTypeTree node, P p)
    Visits an `AnnotatedTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitAnnotation

    R visitAnnotation(AnnotationTree node, P p)
    Visits an `AnnotatedTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitMethodInvocation

    R visitMethodInvocation(MethodInvocationTree node, P p)
    Visits a `MethodInvocationTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitAssert

    R visitAssert(AssertTree node, P p)
    Visits an `AssertTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitAssignment

    R visitAssignment(AssignmentTree node, P p)
    Visits an `AssignmentTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitCompoundAssignment

    R visitCompoundAssignment(CompoundAssignmentTree node, P p)
    Visits a `CompoundAssignmentTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitBinary

    R visitBinary(BinaryTree node, P p)
    Visits a `BinaryTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitBlock

    R visitBlock(BlockTree node, P p)
    Visits a `BlockTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitBreak

    R visitBreak(BreakTree node, P p)
    Visits a `BreakTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitCase

    R visitCase(CaseTree node, P p)
    Visits a `CaseTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitCatch

    R visitCatch(CatchTree node, P p)
    Visits a `CatchTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitClass

    R visitClass(ClassTree node, P p)
    Visits a `ClassTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitConditionalExpression

    R visitConditionalExpression(ConditionalExpressionTree node, P p)
    Visits a `ConditionalExpressionTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitContinue

    R visitContinue(ContinueTree node, P p)
    Visits a `ContinueTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitDoWhileLoop

    R visitDoWhileLoop(DoWhileLoopTree node, P p)
    Visits a `DoWhileTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitErroneous

    R visitErroneous(ErroneousTree node, P p)
    Visits an `ErroneousTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitExpressionStatement

    R visitExpressionStatement(ExpressionStatementTree node, P p)
    Visits an `ExpressionStatementTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitEnhancedForLoop

    R visitEnhancedForLoop(EnhancedForLoopTree node, P p)
    Visits an `EnhancedForLoopTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitForLoop

    R visitForLoop(ForLoopTree node, P p)
    Visits a `ForLoopTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitIdentifier

    R visitIdentifier(IdentifierTree node, P p)
    Visits an `IdentifierTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitIf

    R visitIf(IfTree node, P p)
    Visits an `IfTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitImport

    R visitImport(ImportTree node, P p)
    Visits an `ImportTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitArrayAccess

    R visitArrayAccess(ArrayAccessTree node, P p)
    Visits an `ArrayAccessTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitLabeledStatement

    R visitLabeledStatement(LabeledStatementTree node, P p)
    Visits a `LabeledStatementTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitLiteral

    R visitLiteral(LiteralTree node, P p)
    Visits a `LiteralTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitAnyPattern

    R visitAnyPattern(AnyPatternTree node, P p)
    Visits a `AnyPatternTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      22

  - ### visitBindingPattern

    R visitBindingPattern(BindingPatternTree node, P p)
    Visits a `BindingPatternTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      16

  - ### visitDefaultCaseLabel

    R visitDefaultCaseLabel(DefaultCaseLabelTree node, P p)
    Visits a `DefaultCaseLabelTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      21

  - ### visitConstantCaseLabel

    R visitConstantCaseLabel(ConstantCaseLabelTree node, P p)
    Visits a `ConstantCaseLabelTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      21

  - ### visitPatternCaseLabel

    R visitPatternCaseLabel(PatternCaseLabelTree node, P p)
    Visits a `PatternCaseLabelTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      21

  - ### visitDeconstructionPattern

    R visitDeconstructionPattern(DeconstructionPatternTree node, P p)
    Visits a `DeconstructionPatternTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      21

  - ### visitMethod

    R visitMethod(MethodTree node, P p)
    Visits a `MethodTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitModifiers

    R visitModifiers(ModifiersTree node, P p)
    Visits a `ModifiersTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitNewArray

    R visitNewArray(NewArrayTree node, P p)
    Visits a `NewArrayTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitNewClass

    R visitNewClass(NewClassTree node, P p)
    Visits a `NewClassTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitLambdaExpression

    R visitLambdaExpression(LambdaExpressionTree node, P p)
    Visits a `LambdaExpressionTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitPackage

    R visitPackage(PackageTree node, P p)
    Visits a `PackageTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitParenthesized

    R visitParenthesized(ParenthesizedTree node, P p)
    Visits a `ParenthesizedTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitReturn

    R visitReturn(ReturnTree node, P p)
    Visits a `ReturnTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitMemberSelect

    R visitMemberSelect(MemberSelectTree node, P p)
    Visits a `MemberSelectTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitMemberReference

    R visitMemberReference(MemberReferenceTree node, P p)
    Visits a `MemberReferenceTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitEmptyStatement

    R visitEmptyStatement(EmptyStatementTree node, P p)
    Visits an `EmptyStatementTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitSwitch

    R visitSwitch(SwitchTree node, P p)
    Visits a `SwitchTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitSwitchExpression

    R visitSwitchExpression(SwitchExpressionTree node, P p)
    Visits a `SwitchExpressionTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      14

  - ### visitSynchronized

    R visitSynchronized(SynchronizedTree node, P p)
    Visits a `SynchronizedTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitThrow

    R visitThrow(ThrowTree node, P p)
    Visits a `ThrowTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitCompilationUnit

    R visitCompilationUnit(CompilationUnitTree node, P p)
    Visits a `CompilationUnitTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitTry

    R visitTry(TryTree node, P p)
    Visits a `TryTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitParameterizedType

    R visitParameterizedType(ParameterizedTypeTree node, P p)
    Visits a `ParameterizedTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitUnionType

    R visitUnionType(UnionTypeTree node, P p)
    Visits a `UnionTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitIntersectionType

    R visitIntersectionType(IntersectionTypeTree node, P p)
    Visits an `IntersectionTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitArrayType

    R visitArrayType(ArrayTypeTree node, P p)
    Visits an `ArrayTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitTypeCast

    R visitTypeCast(TypeCastTree node, P p)
    Visits a `TypeCastTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitPrimitiveType

    R visitPrimitiveType(PrimitiveTypeTree node, P p)
    Visits a `PrimitiveTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitTypeParameter

    R visitTypeParameter(TypeParameterTree node, P p)
    Visits a `TypeParameterTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitInstanceOf

    R visitInstanceOf(InstanceOfTree node, P p)
    Visits an `InstanceOfTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitUnary

    R visitUnary(UnaryTree node, P p)
    Visits a `UnaryTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitVariable

    R visitVariable(VariableTree node, P p)
    Visits a `VariableTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitWhileLoop

    R visitWhileLoop(WhileLoopTree node, P p)
    Visits a `WhileLoopTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitWildcard

    R visitWildcard(WildcardTree node, P p)
    Visits a `WildcardTypeTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitModule

    R visitModule(ModuleTree node, P p)
    Visits a `ModuleTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitExports

    R visitExports(ExportsTree node, P p)
    Visits an `ExportsTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitOpens

    R visitOpens(OpensTree node, P p)
    Visits an `OpensTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitProvides

    R visitProvides(ProvidesTree node, P p)
    Visits a `ProvidesTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitRequires

    R visitRequires(RequiresTree node, P p)
    Visits a `RequiresTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitUses

    R visitUses(UsesTree node, P p)
    Visits a `UsesTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitOther

    R visitOther(Tree node, P p)
    Visits an unknown type of `Tree` node. This can occur if the language evolves and new kinds of nodes are added to the `Tree` hierarchy.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value

  - ### visitYield

    R visitYield(YieldTree node, P p)
    Visits a `YieldTree` node.
    Parameters:
      `node` - the node being visited
      `p` - a parameter value
    Returns:
      a result value
    Since:
      14