soot.toolkits.scalar
Class CombinedDUAnalysis

java.lang.Object
  extended by soot.toolkits.scalar.AbstractFlowAnalysis<N,A>
      extended by soot.toolkits.scalar.FlowAnalysis<N,A>
          extended by soot.toolkits.scalar.BackwardFlowAnalysis
              extended by soot.toolkits.scalar.CombinedDUAnalysis
All Implemented Interfaces:
CombinedAnalysis, LiveLocals, LocalDefs, LocalUses

public class CombinedDUAnalysis
extends BackwardFlowAnalysis
implements CombinedAnalysis, LocalDefs, LocalUses, LiveLocals

Analysis that computes live locals, local defs, and local uses all at once.


Field Summary
 
Fields inherited from class soot.toolkits.scalar.FlowAnalysis
filterUnitToAfterFlow, unitToAfterFlow
 
Fields inherited from class soot.toolkits.scalar.AbstractFlowAnalysis
filterUnitToBeforeFlow, graph, unitToBeforeFlow
 
Method Summary
protected  void copy(Object source, Object dest)
          Creates a copy of the source flow object in dest.
protected  Object entryInitialFlow()
          Returns the initial flow value for entry/exit graph nodes.
protected  void flowThrough(Object outValue, Object unit, Object inValue)
          Given the merge of the out sets, compute the in set for s (or in to out, depending on direction).
 List<Unit> getDefsOfAt(Local l, Unit s)
          Returns the definition sites for a Local at a certain point (Unit) in a method.
 List getLiveLocalsAfter(Unit u)
          Returns the list of Locals that are live after the specified Unit.
 List getLiveLocalsBefore(Unit u)
          Returns the list of Locals that are live before the specified Unit.
 List getUsesOf(Unit u)
          Returns a list of the Units that use the Local that is defined by a given Unit.
protected  void merge(Object inoutO, Object inO)
           
protected  void merge(Object in1O, Object in2O, Object outO)
          Compute the merge of the in1 and in2 sets, putting the result into out.
protected  Object newInitialFlow()
          Returns the flow object corresponding to the initial values for each graph node.
static CombinedAnalysis v(UnitGraph graph)
           
 
Methods inherited from class soot.toolkits.scalar.BackwardFlowAnalysis
constructWorklist, doAnalysis, isForward
 
Methods inherited from class soot.toolkits.scalar.FlowAnalysis
constructOrderer, getFlowAfter
 
Methods inherited from class soot.toolkits.scalar.AbstractFlowAnalysis
getFlowBefore, merge, mergeInto, treatTrapHandlersAsEntries
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getDefsOfAt

public List<Unit> getDefsOfAt(Local l,
                              Unit s)
Description copied from interface: LocalDefs
Returns the definition sites for a Local at a certain point (Unit) in a method.

Specified by:
getDefsOfAt in interface LocalDefs
Parameters:
l - the Local in question.
s - a unit that specifies the method context (location) to query for the definitions of the Local.
Returns:
a list of Units where the local is defined in the current method context.

getUsesOf

public List getUsesOf(Unit u)
Description copied from interface: LocalUses
Returns a list of the Units that use the Local that is defined by a given Unit.

Specified by:
getUsesOf in interface LocalUses
Parameters:
u - the unit we wish to query for the use of the Local it defines.
Returns:
a list of the Local's uses.

getLiveLocalsBefore

public List getLiveLocalsBefore(Unit u)
Description copied from interface: LiveLocals
Returns the list of Locals that are live before the specified Unit.

Specified by:
getLiveLocalsBefore in interface LiveLocals
Parameters:
u - the Unit that defines this query.
Returns:
a list of Locals that are live before the specified unit in the method.

getLiveLocalsAfter

public List getLiveLocalsAfter(Unit u)
Description copied from interface: LiveLocals
Returns the list of Locals that are live after the specified Unit.

Specified by:
getLiveLocalsAfter in interface LiveLocals
Parameters:
u - the Unit that defines this query.
Returns:
a list of Locals that are live after the specified unit in the method.

v

public static CombinedAnalysis v(UnitGraph graph)

merge

protected void merge(Object inoutO,
                     Object inO)

merge

protected void merge(Object in1O,
                     Object in2O,
                     Object outO)
Description copied from class: AbstractFlowAnalysis
Compute the merge of the in1 and in2 sets, putting the result into out. The behavior of this function depends on the implementation ( it may be necessary to check whether in1 and in2 are equal or aliased ). Used by the doAnalysis method.

Specified by:
merge in class AbstractFlowAnalysis

flowThrough

protected void flowThrough(Object outValue,
                           Object unit,
                           Object inValue)
Description copied from class: FlowAnalysis
Given the merge of the out sets, compute the in set for s (or in to out, depending on direction). This function often causes confusion, because the same interface is used for both forward and backward flow analyses. The first parameter is always the argument to the flow function (i.e. it is the "in" set in a forward analysis and the "out" set in a backward analysis), and the third parameter is always the result of the flow function (i.e. it is the "out" set in a forward analysis and the "in" set in a backward analysis).

Specified by:
flowThrough in class FlowAnalysis

entryInitialFlow

protected Object entryInitialFlow()
Description copied from class: AbstractFlowAnalysis
Returns the initial flow value for entry/exit graph nodes.

Specified by:
entryInitialFlow in class AbstractFlowAnalysis

newInitialFlow

protected Object newInitialFlow()
Description copied from class: AbstractFlowAnalysis
Returns the flow object corresponding to the initial values for each graph node.

Specified by:
newInitialFlow in class AbstractFlowAnalysis

copy

protected void copy(Object source,
                    Object dest)
Description copied from class: AbstractFlowAnalysis
Creates a copy of the source flow object in dest.

Specified by:
copy in class AbstractFlowAnalysis