public abstract class UnitGraph extends Object implements DirectedGraph<Unit>
Represents a CFG where the nodes are Unit instances and edges represent unexceptional and (possibly) exceptional
control flow between Units.
This is an abstract class, providing the facilities used to build CFGs for specific purposes.
| Modifier and Type | Field and Description |
|---|---|
protected Body |
body |
protected List<Unit> |
heads |
protected SootMethod |
method |
protected List<Unit> |
tails |
protected Chain<Unit> |
unitChain |
protected Map<Unit,List<Unit>> |
unitToPreds |
protected Map<Unit,List<Unit>> |
unitToSuccs |
| Modifier | Constructor and Description |
|---|---|
protected |
UnitGraph(Body body)
Performs the work that is required to construct any sort of UnitGraph.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
addEdge(Map<Unit,List<Unit>> unitToSuccs,
Map<Unit,List<Unit>> unitToPreds,
Unit head,
Unit tail)
Utility method for adding an edge to maps representing the CFG.
|
protected void |
buildHeadsAndTails()
Utility method used in the construction of
UnitGraphs, to be called only after the unitToPreds and unitToSuccs
maps have been built. |
protected void |
buildUnexceptionalEdges(Map<Unit,List<Unit>> unitToSuccs,
Map<Unit,List<Unit>> unitToPreds)
Utility method for UnitGraph constructors.
|
protected Map<Unit,List<Unit>> |
combineMapValues(Map<Unit,List<Unit>> mapA,
Map<Unit,List<Unit>> mapB)
|
Body |
getBody() |
List<Unit> |
getExtendedBasicBlockPathBetween(Unit from,
Unit to)
Look for a path in graph, from def to use.
|
List<Unit> |
getHeads()
Returns a list of entry points for this graph.
|
List<Unit> |
getPredsOf(Unit u)
Returns a list of predecessors for the given node in the graph.
|
List<Unit> |
getSuccsOf(Unit u)
Returns a list of successors for the given node in the graph.
|
List<Unit> |
getTails()
Returns a list of exit points for this graph.
|
Iterator<Unit> |
iterator()
Returns an iterator for the nodes in this graph.
|
int |
size()
Returns the node count for this graph.
|
String |
toString() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitforEach, spliteratorprotected SootMethod method
protected Body body
protected UnitGraph(Body body)
body - The body of the method for which to construct a control flow graph.protected void buildUnexceptionalEdges(Map<Unit,List<Unit>> unitToSuccs, Map<Unit,List<Unit>> unitToPreds)
unitToSuccs - A Map from Units to Lists of Units. This is an ``out parameter''; callers must
pass an empty Map. buildUnexceptionalEdges will add a mapping for every Unit in the
body to a list of its unexceptional successors.unitToPreds - A Map from Units to Lists of Units. This is an ``out parameter''; callers must
pass an empty Map. buildUnexceptionalEdges will add a mapping for every Unit in the
body to a list of its unexceptional predecessors.protected void buildHeadsAndTails()
Utility method used in the construction of UnitGraphs, to be called only after the unitToPreds and unitToSuccs
maps have been built.
UnitGraph provides an implementation of buildHeadsAndTails() which defines the graph's set of
heads to include the first Unit in the graph's body, together with any other Unit which has no
predecessors. It defines the graph's set of tails to include all Units with no successors. Subclasses of
UnitGraph may override this method to change the criteria for classifying a node as a head or tail.
protected Map<Unit,List<Unit>> combineMapValues(Map<Unit,List<Unit>> mapA, Map<Unit,List<Unit>> mapB)
Units of this graph's body to the union of the values stored in
the two argument Maps, used to combine the maps of exceptional and unexceptional predecessors and successors
into maps of all predecessors and successors. The values stored in both argument maps must be Lists of
Units, which are assumed not to contain any duplicate Units.mapA - The first map to be combined.mapB - The second map to be combined.protected void addEdge(Map<Unit,List<Unit>> unitToSuccs, Map<Unit,List<Unit>> unitToPreds, Unit head, Unit tail)
public List<Unit> getExtendedBasicBlockPathBetween(Unit from, Unit to)
from - start point for the path.to - end point for the path.public List<Unit> getHeads()
DirectedGraphgetHeads in interface DirectedGraph<Unit>public List<Unit> getTails()
DirectedGraphgetTails in interface DirectedGraph<Unit>public List<Unit> getPredsOf(Unit u)
DirectedGraphgetPredsOf in interface DirectedGraph<Unit>public List<Unit> getSuccsOf(Unit u)
DirectedGraphgetSuccsOf in interface DirectedGraph<Unit>public int size()
DirectedGraphsize in interface DirectedGraph<Unit>public Iterator<Unit> iterator()
DirectedGraphCopyright © 2020 Soot OSS. All rights reserved.