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.
- Author:
- Ken Cavanaugh
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidvoidvoidvoidvoidbooleanvoidvoidbooleanbooleanvoidbooleanvoidvoidbooleanvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidpostCaseBranch(CaseBranch arg) voidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidpostStatement(Statement arg) voidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidpostVariable(Variable arg) voidvoidbooleanbooleanbooleanbooleanbooleanbooleanbooleanpreCaseBranch(CaseBranch arg) booleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanpreStatement(Statement arg) booleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanpreVariable(Variable arg) booleanbooleanvoidvoidvoidbooleanbooleanvoidvoidtryStatementBeforeBlock(TryStatement arg, Type type, Variable var, BlockStatement block) booleanvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidfinal voidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvoidvisitStatement(Statement arg) voidvoidvoidvoidvoidvoidvoidvoidvoidvoidfinal voidvisitVariable(Variable arg) voidvoidvoid
-
Field Details
-
context
-
-
Constructor Details
-
TreeWalker
-
-
Method Details
-
preNode
-
postNode
-
visitNode
-
preFieldGenerator
-
postFieldGenerator
-
visitFieldGenerator
- Specified by:
visitFieldGeneratorin interfaceVisitor
-
preClassGenerator
-
classGeneratorBeforeFields
-
classGeneratorBeforeInitializer
-
classGeneratorBeforeMethod
-
classGeneratorBeforeConstructor
-
postClassGenerator
-
visitClassGenerator
- Specified by:
visitClassGeneratorin interfaceVisitor
-
preMethodGenerator
-
methodGeneratorBeforeArguments
-
methodGeneratorAfterArguments
-
postMethodGenerator
-
visitMethodGenerator
- Specified by:
visitMethodGeneratorin interfaceVisitor
-
preStatement
-
postStatement
-
visitStatement
- Specified by:
visitStatementin interfaceVisitor
-
preThrowStatement
-
postThrowStatement
-
visitThrowStatement
- Specified by:
visitThrowStatementin interfaceVisitor
-
preAssignmentStatement
-
assignmentStatementBeforeLeftSide
-
postAssignmentStatement
-
visitAssignmentStatement
- Specified by:
visitAssignmentStatementin interfaceVisitor
-
preBlockStatement
-
blockStatementBeforeBodyStatement
-
postBlockStatement
-
visitBlockStatement
- Specified by:
visitBlockStatementin interfaceVisitor
-
preCaseBranch
-
caseBranchBeforeBodyStatement
-
postCaseBranch
-
visitCaseBranch
- Specified by:
visitCaseBranchin interfaceVisitor
-
preDefinitionStatement
-
definitionStatementBeforeExpr
-
postDefinitionStatement
-
visitDefinitionStatement
- Specified by:
visitDefinitionStatementin interfaceVisitor
-
preIfStatement
-
ifStatementBeforeTruePart
-
ifStatementBeforeFalsePart
-
postIfStatement
-
visitIfStatement
- Specified by:
visitIfStatementin interfaceVisitor
-
preBreakStatement
-
postBreakStatement
-
visitBreakStatement
- Specified by:
visitBreakStatementin interfaceVisitor
-
preReturnStatement
-
postReturnStatement
-
visitReturnStatement
- Specified by:
visitReturnStatementin interfaceVisitor
-
preSwitchStatement
-
switchStatementBeforeCaseBranches
-
switchStatementBeforeDefault
-
postSwitchStatement
-
visitSwitchStatement
- Specified by:
visitSwitchStatementin interfaceVisitor
-
preTryStatement
-
tryStatementBeforeBlock
public void tryStatementBeforeBlock(TryStatement arg, Type type, Variable var, BlockStatement block) -
tryStatementBeforeFinalPart
-
postTryStatement
-
visitTryStatement
- Specified by:
visitTryStatementin interfaceVisitor
-
preWhileStatement
-
whileStatementBeforeBody
-
postWhileStatement
-
visitWhileStatement
- Specified by:
visitWhileStatementin interfaceVisitor
-
preExpression
-
postExpression
-
visitExpression
- Specified by:
visitExpressionin interfaceVisitor
-
preVariable
-
postVariable
-
visitVariable
- Specified by:
visitVariablein interfaceVisitor
-
preConstantExpression
-
postConstantExpression
-
visitConstantExpression
- Specified by:
visitConstantExpressionin interfaceVisitor
-
preVoidExpression
-
postVoidExpression
-
visitVoidExpression
- Specified by:
visitVoidExpressionin interfaceVisitor
-
preThisExpression
-
postThisExpression
-
visitThisExpression
- Specified by:
visitThisExpressionin interfaceVisitor
-
preUnaryOperatorExpression
-
postUnaryOperatorExpression
-
visitUnaryOperatorExpression
- Specified by:
visitUnaryOperatorExpressionin interfaceVisitor
-
preBinaryOperatorExpression
-
binaryOperatorExpressionBeforeRight
-
postBinaryOperatorExpression
-
visitBinaryOperatorExpression
- Specified by:
visitBinaryOperatorExpressionin interfaceVisitor
-
preCastExpression
-
postCastExpression
-
visitCastExpression
- Specified by:
visitCastExpressionin interfaceVisitor
-
preInstofExpression
-
postInstofExpression
-
visitInstofExpression
- Specified by:
visitInstofExpressionin interfaceVisitor
-
preStaticCallExpression
-
staticCallExpressionBeforeArg
-
postStaticCallExpression
-
visitStaticCallExpression
- Specified by:
visitStaticCallExpressionin interfaceVisitor
-
preNonStaticCallExpression
-
nonStaticCallExpressionBeforeArg
-
postNonStaticCallExpression
-
visitNonStaticCallExpression
- Specified by:
visitNonStaticCallExpressionin interfaceVisitor
-
preNewObjExpression
-
newObjExpressionBeforeArg
-
postNewObjExpression
-
visitNewObjExpression
- Specified by:
visitNewObjExpressionin interfaceVisitor
-
preNewArrExpression
-
newArrExpressionAfterSize
-
newArrExpressionBeforeExpression
-
newArrExpressionAfterExpression
-
postNewArrExpression
-
visitNewArrExpression
- Specified by:
visitNewArrExpressionin interfaceVisitor
-
preSuperCallExpression
-
superCallExpressionBeforeArg
-
postSuperCallExpression
-
visitSuperCallExpression
- Specified by:
visitSuperCallExpressionin interfaceVisitor
-
preSuperObjExpression
-
superObjExpressionBeforeArg
-
postSuperObjExpression
-
visitSuperObjExpression
- Specified by:
visitSuperObjExpressionin interfaceVisitor
-
preThisObjExpression
-
postThisObjExpression
-
thisObjExpressionBeforeArg
-
visitThisObjExpression
- Specified by:
visitThisObjExpressionin interfaceVisitor
-
preNonStaticFieldAccessExpression
public boolean preNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) -
postNonStaticFieldAccessExpression
public void postNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) -
visitNonStaticFieldAccessExpression
public void visitNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) - Specified by:
visitNonStaticFieldAccessExpressionin interfaceVisitor
-
preStaticFieldAccessExpression
-
postStaticFieldAccessExpression
-
visitStaticFieldAccessExpression
- Specified by:
visitStaticFieldAccessExpressionin interfaceVisitor
-
preArrayIndexExpression
-
arrayIndexExpressionBeforeExpr
-
postArrayIndexExpression
-
visitArrayIndexExpression
- Specified by:
visitArrayIndexExpressionin interfaceVisitor
-
preArrayLengthExpression
-
postArrayLengthExpression
-
visitArrayLengthExpression
- Specified by:
visitArrayLengthExpressionin interfaceVisitor
-
preIfExpression
-
ifExpressionBeforeTruePart
-
ifExpressionBeforeFalsePart
-
postIfExpression
-
visitIfExpression
- Specified by:
visitIfExpressionin interfaceVisitor
-