soot.dava.toolkits.base.AST.structuredAnalysis
Class ReachingDefs

java.lang.Object
  extended by soot.dava.toolkits.base.AST.structuredAnalysis.StructuredAnalysis
      extended by soot.dava.toolkits.base.AST.structuredAnalysis.ReachingDefs

public class ReachingDefs
extends StructuredAnalysis

CHANGE LOG: * November 21st Added support for implicit breaks and continues Tested code for reaching defs within switch/try/if/while/for * November 22nd Refactored code to make structure flow analysis framework handle breaks and returns. * November 24th newInitialFlow ERROR............initialFlow should be the set of all defs........since there needs to exist SOME path


Field Summary
 
Fields inherited from class soot.dava.toolkits.base.AST.structuredAnalysis.StructuredAnalysis
DEBUG, DEBUG_IF, DEBUG_STATEMENTS, DEBUG_TRY, DEBUG_WHILE, MERGETYPE
 
Constructor Summary
ReachingDefs(Object analyze)
           
 
Method Summary
 Object cloneFlowSet(Object flowSet)
          Make a clone of the flowset The implementor should know when they want a shallow or deep clone
 DavaFlowSet emptyFlowSet()
           
 void gen(DavaFlowSet in, DefinitionStmt s)
           
 List<DefinitionStmt> getReachingDefs(Local local, Object node)
           
 void kill(DavaFlowSet in, Local redefined)
           
 Object newInitialFlow()
           
 Object processStatement(Stmt s, Object input)
          Specific stmts within AST Constructs are processed through this method.
 Object processSwitchKey(Value key, Object input)
          Deal with the key in the switch construct
 Object processSynchronizedLocal(Local local, Object input)
          To deal with the local used for synch blocks
 Object processUnaryBinaryCondition(ASTUnaryBinaryCondition cond, Object input)
          To have maximum flexibility in analyzing conditions the analysis API breaks down the aggregated conditions to simple unary or binary conditions user defined code can then deal with each condition separatly.
 void reachingDefsToString(Object node)
           
 void setMergeType()
           
 
Methods inherited from class soot.dava.toolkits.base.AST.structuredAnalysis.StructuredAnalysis
debug, debug, getAfterSet, getBeforeSet, getLabel, handleBreak, handleContinue, isDifferent, merge, mergeExplicitAndImplicit, print, process, processAbruptStatements, processASTDoWhileNode, processASTForLoopNode, processASTIfElseNode, processASTIfNode, processASTLabeledBlockNode, processASTMethodNode, processASTNode, processASTStatementSequenceNode, processASTSwitchNode, processASTSynchronizedBlockNode, processASTTryNode, processASTUnconditionalLoopNode, processASTWhileNode, processCondition, processSingleSubBodyNode
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ReachingDefs

public ReachingDefs(Object analyze)
Method Detail

emptyFlowSet

public DavaFlowSet emptyFlowSet()
Specified by:
emptyFlowSet in class StructuredAnalysis

newInitialFlow

public Object newInitialFlow()
Specified by:
newInitialFlow in class StructuredAnalysis

setMergeType

public void setMergeType()
Specified by:
setMergeType in class StructuredAnalysis

cloneFlowSet

public Object cloneFlowSet(Object flowSet)
Description copied from class: StructuredAnalysis
Make a clone of the flowset The implementor should know when they want a shallow or deep clone

Specified by:
cloneFlowSet in class StructuredAnalysis

processUnaryBinaryCondition

public Object processUnaryBinaryCondition(ASTUnaryBinaryCondition cond,
                                          Object input)
Description copied from class: StructuredAnalysis
To have maximum flexibility in analyzing conditions the analysis API breaks down the aggregated conditions to simple unary or binary conditions user defined code can then deal with each condition separatly. To be able to deal with entire aggregated conditions the user should wite their own implementation of the method processCondition

Specified by:
processUnaryBinaryCondition in class StructuredAnalysis

processSynchronizedLocal

public Object processSynchronizedLocal(Local local,
                                       Object input)
Description copied from class: StructuredAnalysis
To deal with the local used for synch blocks

Specified by:
processSynchronizedLocal in class StructuredAnalysis

processSwitchKey

public Object processSwitchKey(Value key,
                               Object input)
Description copied from class: StructuredAnalysis
Deal with the key in the switch construct

Specified by:
processSwitchKey in class StructuredAnalysis

processStatement

public Object processStatement(Stmt s,
                               Object input)
Description copied from class: StructuredAnalysis
Specific stmts within AST Constructs are processed through this method. It will be invoked everytime a stmt is encountered

Specified by:
processStatement in class StructuredAnalysis

gen

public void gen(DavaFlowSet in,
                DefinitionStmt s)

kill

public void kill(DavaFlowSet in,
                 Local redefined)

getReachingDefs

public List<DefinitionStmt> getReachingDefs(Local local,
                                            Object node)

reachingDefsToString

public void reachingDefsToString(Object node)