public class HashMutablePDG extends HashMutableEdgeLabelledDirectedGraph<PDGNode,java.lang.String> implements ProgramDependenceGraph
| Modifier and Type | Field and Description |
|---|---|
protected BlockGraph |
m_blockCFG |
protected Body |
m_body |
protected UnitGraph |
m_cfg |
protected SootClass |
m_class |
protected java.util.Hashtable<java.lang.Object,PDGNode> |
m_obj2pdgNode |
protected java.util.List<PDGRegion> |
m_pdgRegions |
protected PDGNode |
m_startNode |
protected java.util.List<Region> |
m_strongRegions |
protected java.util.List<Region> |
m_weakRegions |
edgeToLabels, heads, labelToEdges, nodeToPreds, nodeToSuccs, tails| Constructor and Description |
|---|
HashMutablePDG(UnitGraph cfg) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
constructPDG()
This is the heart of the PDG contruction.
|
boolean |
dependentOn(PDGNode node1,
PDGNode node2)
This method determines if node1 is control-dependent on node2 in this PDG.
|
BlockGraph |
getBlockGraph() |
UnitGraph |
getCFG() |
java.util.List<PDGNode> |
getDependents(PDGNode node)
This method returns the list of all dependents of a node in the PDG.
|
PDGNode |
getPDGNode(java.lang.Object cfgNode)
This method returns the PDGNode in the PDG corresponding to the given
CFG node.
|
java.util.List<PDGRegion> |
getPDGRegions()
This method returns the list of PDGRegions computed by the construction method.
|
static java.util.List<PDGRegion> |
getPostorderPDGRegionList(PDGNode r)
This method returns a list of regions obtained by post-order
traversal of the region hierarchy.
|
static java.util.List<IRegion> |
getPostorderRegionList(IRegion r) |
static java.util.List<IRegion> |
getPreorderRegionList(IRegion r) |
PDGNode |
GetStartNode() |
IRegion |
GetStartRegion() |
java.util.List<Region> |
getStrongRegions() |
java.util.List<Region> |
getWeakRegions() |
void |
removeAllEdges(PDGNode from,
PDGNode to)
The existing removeAllEdges in the parent class seems to be throwing concurrentmodification exception
most of the time.
|
java.lang.String |
toString() |
addEdge, addNode, clearAll, clone, containsAnyEdge, containsAnyEdge, containsEdge, containsNode, getEdgesForLabel, getHeads, getLabelsForEdges, getPredsOf, getSuccsOf, getTails, iterator, printGraph, removeAllEdges, removeEdge, removeNode, sizeequals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitaddEdge, addNode, removeAllEdges, removeEdge, removeNodecontainsAnyEdge, containsAnyEdge, containsEdge, containsNode, getEdgesForLabel, getLabelsForEdgesgetHeads, getPredsOf, getSuccsOf, getTails, iterator, sizeprotected Body m_body
protected SootClass m_class
protected UnitGraph m_cfg
protected BlockGraph m_blockCFG
protected java.util.Hashtable<java.lang.Object,PDGNode> m_obj2pdgNode
protected java.util.List<Region> m_weakRegions
protected java.util.List<Region> m_strongRegions
protected PDGNode m_startNode
protected java.util.List<PDGRegion> m_pdgRegions
public HashMutablePDG(UnitGraph cfg)
public BlockGraph getBlockGraph()
getBlockGraph in interface ProgramDependenceGraphprotected void constructPDG()
public UnitGraph getCFG()
public java.util.List<Region> getWeakRegions()
getWeakRegions in interface ProgramDependenceGraphpublic java.util.List<Region> getStrongRegions()
getStrongRegions in interface ProgramDependenceGraphpublic IRegion GetStartRegion()
GetStartRegion in interface ProgramDependenceGraphpublic PDGNode GetStartNode()
GetStartNode in interface ProgramDependenceGraphpublic java.util.List<PDGRegion> getPDGRegions()
getPDGRegions in interface ProgramDependenceGraphpublic static java.util.List<PDGRegion> getPostorderPDGRegionList(PDGNode r)
The - root from which the traversal should begin.public boolean dependentOn(PDGNode node1, PDGNode node2)
dependentOn in interface ProgramDependenceGraphpublic java.util.List<PDGNode> getDependents(PDGNode node)
getDependents in interface ProgramDependenceGraphnode - is the PDG node whose dependents are desired.public PDGNode getPDGNode(java.lang.Object cfgNode)
getPDGNode in interface ProgramDependenceGraphcfgNode - is expected to be a node in CFG (currently only Block).public void removeAllEdges(PDGNode from, PDGNode to)
removeAllEdges in interface MutableEdgeLabelledDirectedGraph<PDGNode,java.lang.String>removeAllEdges in class HashMutableEdgeLabelledDirectedGraph<PDGNode,java.lang.String>from - out node for the edges to remove.to - in node for the edges to remove.public java.lang.String toString()
toString in interface ProgramDependenceGraphtoString in class java.lang.Object