Class TreeWalker
java.lang.Object
org.glassfish.pfl.dynamic.codegen.impl.TreeWalker
- All Implemented Interfaces:
Visitor
- Direct Known Subclasses:
ASMByteCodeVisitor
,ASMSetupVisitor
,NopVisitor
,SourceExpressionVisitor
,SourceStatementVisitor
This is a general purpose utility that does a complete traversal
of a Node tree. A stack of Visitors is maintained. The current
Visitor on top of the stack is applied to each node.
Pre and post methods are provided for each type.
The default implementations of these methods delegate to the pre
and post methods of the superclass of the node type, so only the
required pre and post methods need be overridden.
This is used as follows:
TreeWalkerContext context = new TreeWalkerContext() ; Visitor visitor = new SubclassOfTreeWalker( context, ... ) ; context.push( visitor ) ; node.accept( visitor ) ;Note that this allows the temporary changing of the current visitor while traversing the tree. The fact that the context support mark and popMark operations makes it easy to process all of the children of a node in any order: just call context.mark() in a preXXX method, push appropriate visitors in the intermediate xXXBeforeYYY methods, and then call context.popMark in the postXXX method.
Note that all preXXX methods return a boolean which indicates whether or not this node should be traversed. If true is return, any child nodes are traversed, and the postXXX method is called. If false is returned, the visitXXX method completes.
If the preXXX method returns true, the postXXX method is always called. If the preXXX method throws an exception or returns false, the postXXX method is not called.
The more complex node types also include intermediate control methods that can be overridden to affect the traversal.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
void
void
void
void
void
boolean
void
void
boolean
boolean
void
boolean
void
void
boolean
void
void
void
void
void
void
void
void
void
void
void
void
postCaseBranch
(CaseBranch arg) void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
postStatement
(Statement arg) void
void
void
void
void
void
void
void
void
void
void
postVariable
(Variable arg) void
void
boolean
boolean
boolean
boolean
boolean
boolean
boolean
preCaseBranch
(CaseBranch arg) boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
preStatement
(Statement arg) boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
preVariable
(Variable arg) boolean
boolean
void
void
void
boolean
boolean
void
void
tryStatementBeforeBlock
(TryStatement arg, Type type, Variable var, BlockStatement block) boolean
void
void
void
void
void
void
void
void
void
void
void
void
final void
void
void
void
void
void
void
void
void
void
void
void
visitStatement
(Statement arg) void
void
void
void
void
void
void
void
void
void
final void
visitVariable
(Variable arg) void
void
void
-
Field Details
-
context
-
-
Constructor Details
-
TreeWalker
-
-
Method Details
-
preNode
-
postNode
-
visitNode
-
preFieldGenerator
-
postFieldGenerator
-
visitFieldGenerator
- Specified by:
visitFieldGenerator
in interfaceVisitor
-
preClassGenerator
-
classGeneratorBeforeFields
-
classGeneratorBeforeInitializer
-
classGeneratorBeforeMethod
-
classGeneratorBeforeConstructor
-
postClassGenerator
-
visitClassGenerator
- Specified by:
visitClassGenerator
in interfaceVisitor
-
preMethodGenerator
-
methodGeneratorBeforeArguments
-
methodGeneratorAfterArguments
-
postMethodGenerator
-
visitMethodGenerator
- Specified by:
visitMethodGenerator
in interfaceVisitor
-
preStatement
-
postStatement
-
visitStatement
- Specified by:
visitStatement
in interfaceVisitor
-
preThrowStatement
-
postThrowStatement
-
visitThrowStatement
- Specified by:
visitThrowStatement
in interfaceVisitor
-
preAssignmentStatement
-
assignmentStatementBeforeLeftSide
-
postAssignmentStatement
-
visitAssignmentStatement
- Specified by:
visitAssignmentStatement
in interfaceVisitor
-
preBlockStatement
-
blockStatementBeforeBodyStatement
-
postBlockStatement
-
visitBlockStatement
- Specified by:
visitBlockStatement
in interfaceVisitor
-
preCaseBranch
-
caseBranchBeforeBodyStatement
-
postCaseBranch
-
visitCaseBranch
- Specified by:
visitCaseBranch
in interfaceVisitor
-
preDefinitionStatement
-
definitionStatementBeforeExpr
-
postDefinitionStatement
-
visitDefinitionStatement
- Specified by:
visitDefinitionStatement
in interfaceVisitor
-
preIfStatement
-
ifStatementBeforeTruePart
-
ifStatementBeforeFalsePart
-
postIfStatement
-
visitIfStatement
- Specified by:
visitIfStatement
in interfaceVisitor
-
preBreakStatement
-
postBreakStatement
-
visitBreakStatement
- Specified by:
visitBreakStatement
in interfaceVisitor
-
preReturnStatement
-
postReturnStatement
-
visitReturnStatement
- Specified by:
visitReturnStatement
in interfaceVisitor
-
preSwitchStatement
-
switchStatementBeforeCaseBranches
-
switchStatementBeforeDefault
-
postSwitchStatement
-
visitSwitchStatement
- Specified by:
visitSwitchStatement
in interfaceVisitor
-
preTryStatement
-
tryStatementBeforeBlock
public void tryStatementBeforeBlock(TryStatement arg, Type type, Variable var, BlockStatement block) -
tryStatementBeforeFinalPart
-
postTryStatement
-
visitTryStatement
- Specified by:
visitTryStatement
in interfaceVisitor
-
preWhileStatement
-
whileStatementBeforeBody
-
postWhileStatement
-
visitWhileStatement
- Specified by:
visitWhileStatement
in interfaceVisitor
-
preExpression
-
postExpression
-
visitExpression
- Specified by:
visitExpression
in interfaceVisitor
-
preVariable
-
postVariable
-
visitVariable
- Specified by:
visitVariable
in interfaceVisitor
-
preConstantExpression
-
postConstantExpression
-
visitConstantExpression
- Specified by:
visitConstantExpression
in interfaceVisitor
-
preVoidExpression
-
postVoidExpression
-
visitVoidExpression
- Specified by:
visitVoidExpression
in interfaceVisitor
-
preThisExpression
-
postThisExpression
-
visitThisExpression
- Specified by:
visitThisExpression
in interfaceVisitor
-
preUnaryOperatorExpression
-
postUnaryOperatorExpression
-
visitUnaryOperatorExpression
- Specified by:
visitUnaryOperatorExpression
in interfaceVisitor
-
preBinaryOperatorExpression
-
binaryOperatorExpressionBeforeRight
-
postBinaryOperatorExpression
-
visitBinaryOperatorExpression
- Specified by:
visitBinaryOperatorExpression
in interfaceVisitor
-
preCastExpression
-
postCastExpression
-
visitCastExpression
- Specified by:
visitCastExpression
in interfaceVisitor
-
preInstofExpression
-
postInstofExpression
-
visitInstofExpression
- Specified by:
visitInstofExpression
in interfaceVisitor
-
preStaticCallExpression
-
staticCallExpressionBeforeArg
-
postStaticCallExpression
-
visitStaticCallExpression
- Specified by:
visitStaticCallExpression
in interfaceVisitor
-
preNonStaticCallExpression
-
nonStaticCallExpressionBeforeArg
-
postNonStaticCallExpression
-
visitNonStaticCallExpression
- Specified by:
visitNonStaticCallExpression
in interfaceVisitor
-
preNewObjExpression
-
newObjExpressionBeforeArg
-
postNewObjExpression
-
visitNewObjExpression
- Specified by:
visitNewObjExpression
in interfaceVisitor
-
preNewArrExpression
-
newArrExpressionAfterSize
-
newArrExpressionBeforeExpression
-
newArrExpressionAfterExpression
-
postNewArrExpression
-
visitNewArrExpression
- Specified by:
visitNewArrExpression
in interfaceVisitor
-
preSuperCallExpression
-
superCallExpressionBeforeArg
-
postSuperCallExpression
-
visitSuperCallExpression
- Specified by:
visitSuperCallExpression
in interfaceVisitor
-
preSuperObjExpression
-
superObjExpressionBeforeArg
-
postSuperObjExpression
-
visitSuperObjExpression
- Specified by:
visitSuperObjExpression
in interfaceVisitor
-
preThisObjExpression
-
postThisObjExpression
-
thisObjExpressionBeforeArg
-
visitThisObjExpression
- Specified by:
visitThisObjExpression
in interfaceVisitor
-
preNonStaticFieldAccessExpression
public boolean preNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) -
postNonStaticFieldAccessExpression
public void postNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) -
visitNonStaticFieldAccessExpression
public void visitNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) - Specified by:
visitNonStaticFieldAccessExpression
in interfaceVisitor
-
preStaticFieldAccessExpression
-
postStaticFieldAccessExpression
-
visitStaticFieldAccessExpression
- Specified by:
visitStaticFieldAccessExpression
in interfaceVisitor
-
preArrayIndexExpression
-
arrayIndexExpressionBeforeExpr
-
postArrayIndexExpression
-
visitArrayIndexExpression
- Specified by:
visitArrayIndexExpression
in interfaceVisitor
-
preArrayLengthExpression
-
postArrayLengthExpression
-
visitArrayLengthExpression
- Specified by:
visitArrayLengthExpression
in interfaceVisitor
-
preIfExpression
-
ifExpressionBeforeTruePart
-
ifExpressionBeforeFalsePart
-
postIfExpression
-
visitIfExpression
- Specified by:
visitIfExpression
in interfaceVisitor
-