soot.dava.toolkits.base.AST.traversals
Class ClosestAbruptTargetFinder
java.lang.Object
soot.dava.toolkits.base.AST.analysis.AnalysisAdapter
soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter
soot.dava.toolkits.base.AST.traversals.ClosestAbruptTargetFinder
- All Implemented Interfaces:
- Analysis
public class ClosestAbruptTargetFinder
- extends DepthFirstAdapter
This class has been created because we need the immediate
target of a implicit break/continue statement i.e. a break/continue
statement which does not break/continue a particular label explicitly.
Notice that this is only allowed for
while
do while,
unconditional loop
for loop
switch construct.
Notice continue is not allowed for switch also
Explicit breaks can on the other hand break any label (that on a construct) which we are not
worried about in this analysis
Methods inherited from class soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter |
caseArrayRef, caseASTAndCondition, caseASTBinaryCondition, caseASTDoWhileNode, caseASTForLoopNode, caseASTIfElseNode, caseASTIfNode, caseASTLabeledBlockNode, caseASTMethodNode, caseASTOrCondition, caseASTStatementSequenceNode, caseASTSwitchNode, caseASTSynchronizedBlockNode, caseASTTryNode, caseASTUnaryCondition, caseASTUnconditionalLoopNode, caseASTWhileNode, caseBinopExpr, caseCastExpr, caseDefinitionStmt, caseDVariableDeclarationStmt, caseExpr, caseExprOrRefValueBox, caseInstanceFieldRef, caseInstanceInvokeExpr, caseInstanceOfExpr, caseInvokeExpr, caseInvokeStmt, caseNewArrayExpr, caseNewMultiArrayExpr, caseRef, caseReturnStmt, caseStaticFieldRef, caseStmt, caseThrowStmt, caseType, caseUnopExpr, caseValue, debug, decideCaseExpr, decideCaseExprOrRef, decideCaseRef, inArrayRef, inASTAndCondition, inASTBinaryCondition, inASTIfElseNode, inASTIfNode, inASTLabeledBlockNode, inASTMethodNode, inASTOrCondition, inASTStatementSequenceNode, inASTSynchronizedBlockNode, inASTTryNode, inASTUnaryCondition, inBinopExpr, inCastExpr, inDefinitionStmt, inDVariableDeclarationStmt, inExpr, inExprOrRefValueBox, inInstanceFieldRef, inInstanceInvokeExpr, inInstanceOfExpr, inInvokeExpr, inInvokeStmt, inNewArrayExpr, inNewMultiArrayExpr, inRef, inReturnStmt, inStaticFieldRef, inThrowStmt, inType, inUnopExpr, inValue, normalRetrieving, outArrayRef, outASTAndCondition, outASTBinaryCondition, outASTIfElseNode, outASTIfNode, outASTLabeledBlockNode, outASTMethodNode, outASTOrCondition, outASTStatementSequenceNode, outASTSynchronizedBlockNode, outASTTryNode, outASTUnaryCondition, outBinopExpr, outCastExpr, outDefinitionStmt, outDVariableDeclarationStmt, outExpr, outExprOrRefValueBox, outInstanceFieldRef, outInstanceInvokeExpr, outInstanceOfExpr, outInvokeExpr, outInvokeStmt, outNewArrayExpr, outNewMultiArrayExpr, outRef, outReturnStmt, outStaticFieldRef, outStmt, outThrowStmt, outType, outUnopExpr, outValue |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ClosestAbruptTargetFinder
public ClosestAbruptTargetFinder(Singletons.Global g)
v
public static ClosestAbruptTargetFinder v()
getTarget
public ASTNode getTarget(DAbruptStmt ab)
- To be invoked by other analyses. Given an abrupt stmt as input this method
will locate the closest target and return it
inASTWhileNode
public void inASTWhileNode(ASTWhileNode node)
- Following methods add a new node to the end of the nodeStack arrayList
Since that node becomes the closest target of an implicit break or continue
- Overrides:
inASTWhileNode
in class DepthFirstAdapter
inASTDoWhileNode
public void inASTDoWhileNode(ASTDoWhileNode node)
- Overrides:
inASTDoWhileNode
in class DepthFirstAdapter
inASTUnconditionalLoopNode
public void inASTUnconditionalLoopNode(ASTUnconditionalLoopNode node)
- Overrides:
inASTUnconditionalLoopNode
in class DepthFirstAdapter
inASTForLoopNode
public void inASTForLoopNode(ASTForLoopNode node)
- Overrides:
inASTForLoopNode
in class DepthFirstAdapter
inASTSwitchNode
public void inASTSwitchNode(ASTSwitchNode node)
- Overrides:
inASTSwitchNode
in class DepthFirstAdapter
outASTWhileNode
public void outASTWhileNode(ASTWhileNode node)
- Following methods remove the last node from the end of the nodeStack arrayList
Since the previous node now becomes the closest target to an implict break or continue
- Overrides:
outASTWhileNode
in class DepthFirstAdapter
outASTDoWhileNode
public void outASTDoWhileNode(ASTDoWhileNode node)
- Overrides:
outASTDoWhileNode
in class DepthFirstAdapter
outASTUnconditionalLoopNode
public void outASTUnconditionalLoopNode(ASTUnconditionalLoopNode node)
- Overrides:
outASTUnconditionalLoopNode
in class DepthFirstAdapter
outASTForLoopNode
public void outASTForLoopNode(ASTForLoopNode node)
- Overrides:
outASTForLoopNode
in class DepthFirstAdapter
outASTSwitchNode
public void outASTSwitchNode(ASTSwitchNode node)
- Overrides:
outASTSwitchNode
in class DepthFirstAdapter
inStmt
public void inStmt(Stmt s)
- Overrides:
inStmt
in class DepthFirstAdapter