soot.dava.toolkits.base.AST.traversals
Class ClosestAbruptTargetFinder

java.lang.Object
  extended by soot.dava.toolkits.base.AST.analysis.AnalysisAdapter
      extended by soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter
          extended by 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


Field Summary
 
Fields inherited from class soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter
DEBUG
 
Constructor Summary
ClosestAbruptTargetFinder(Singletons.Global g)
           
 
Method Summary
 ASTNode getTarget(DAbruptStmt ab)
          To be invoked by other analyses.
 void inASTDoWhileNode(ASTDoWhileNode node)
           
 void inASTForLoopNode(ASTForLoopNode node)
           
 void inASTSwitchNode(ASTSwitchNode node)
           
 void inASTUnconditionalLoopNode(ASTUnconditionalLoopNode node)
           
 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
 void inStmt(Stmt s)
           
 void outASTDoWhileNode(ASTDoWhileNode node)
           
 void outASTForLoopNode(ASTForLoopNode node)
           
 void outASTSwitchNode(ASTSwitchNode node)
           
 void outASTUnconditionalLoopNode(ASTUnconditionalLoopNode node)
           
 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
static ClosestAbruptTargetFinder v()
           
 
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 soot.dava.toolkits.base.AST.analysis.AnalysisAdapter
defaultCase
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClosestAbruptTargetFinder

public ClosestAbruptTargetFinder(Singletons.Global g)
Method Detail

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