generics cleanups
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1415 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
096729ad2c
commit
6542c0eb0f
|
@ -1,37 +1,44 @@
|
||||||
package com.ibm.wala.ipa.callgraph.impl;
|
package com.ibm.wala.ipa.callgraph.impl;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import com.ibm.wala.classLoader.IMethod;
|
import com.ibm.wala.classLoader.IMethod;
|
||||||
import com.ibm.wala.ipa.callgraph.*;
|
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||||
|
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||||
|
import com.ibm.wala.ipa.callgraph.Context;
|
||||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||||
import com.ibm.wala.types.MethodReference;
|
import com.ibm.wala.types.MethodReference;
|
||||||
import com.ibm.wala.util.collections.*;
|
import com.ibm.wala.util.collections.Filter;
|
||||||
import com.ibm.wala.util.debug.*;
|
import com.ibm.wala.util.collections.FilterIterator;
|
||||||
import com.ibm.wala.util.graph.*;
|
import com.ibm.wala.util.collections.HashSetFactory;
|
||||||
import com.ibm.wala.util.graph.impl.*;
|
import com.ibm.wala.util.debug.Assertions;
|
||||||
import com.ibm.wala.util.graph.traverse.*;
|
import com.ibm.wala.util.graph.Graph;
|
||||||
import com.ibm.wala.util.intset.*;
|
import com.ibm.wala.util.graph.GraphSlicer;
|
||||||
|
import com.ibm.wala.util.graph.impl.DelegatingGraph;
|
||||||
|
import com.ibm.wala.util.graph.traverse.DFS;
|
||||||
|
import com.ibm.wala.util.intset.IntSet;
|
||||||
|
import com.ibm.wala.util.intset.IntSetUtil;
|
||||||
|
import com.ibm.wala.util.intset.MutableIntSet;
|
||||||
|
|
||||||
import java.util.*;
|
public class PartialCallGraph extends DelegatingGraph<CGNode> implements CallGraph {
|
||||||
|
|
||||||
public class PartialCallGraph extends DelegatingGraph<CGNode>
|
private final CallGraph cg;
|
||||||
implements CallGraph
|
|
||||||
{
|
|
||||||
|
|
||||||
private final CallGraph CG;
|
private final Set<CGNode> partialRoots;
|
||||||
|
|
||||||
private final Set partialRoots;
|
private PartialCallGraph(CallGraph cg, Set<CGNode> partialRoots, Graph<CGNode> partialGraph) {
|
||||||
|
|
||||||
private PartialCallGraph(CallGraph CG, Set partialRoots, Graph partialGraph) {
|
|
||||||
super(partialGraph);
|
super(partialGraph);
|
||||||
this.CG = CG;
|
this.cg = cg;
|
||||||
this.partialRoots = partialRoots;
|
this.partialRoots = partialRoots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PartialCallGraph make(CallGraph CG, Set partialRoots) {
|
public static PartialCallGraph make(CallGraph CG, Set<CGNode> partialRoots) {
|
||||||
final Set nodes = DFS.getReachableNodes(CG, partialRoots);
|
final Set<CGNode> nodes = DFS.getReachableNodes(CG, partialRoots);
|
||||||
Graph partialGraph = GraphSlicer.prune(CG, new Filter() {
|
Graph<CGNode> partialGraph = GraphSlicer.prune(CG, new Filter() {
|
||||||
public boolean accepts(Object o) {
|
public boolean accepts(Object o) {
|
||||||
return nodes.contains(o);
|
return nodes.contains(o);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -48,7 +55,7 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
|
||||||
}
|
}
|
||||||
|
|
||||||
public CGNode getNode(IMethod method, Context C) {
|
public CGNode getNode(IMethod method, Context C) {
|
||||||
CGNode x = CG.getNode(method, C);
|
CGNode x = cg.getNode(method, C);
|
||||||
if (containsNode(x)) {
|
if (containsNode(x)) {
|
||||||
return x;
|
return x;
|
||||||
} else {
|
} else {
|
||||||
|
@ -57,11 +64,11 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<CGNode> getNodes(MethodReference m) {
|
public Set<CGNode> getNodes(MethodReference m) {
|
||||||
Set result = new HashSet();
|
Set<CGNode> result = HashSetFactory.make();
|
||||||
for(Iterator xs = CG.getNodes(m).iterator(); xs.hasNext(); ) {
|
for (Iterator xs = cg.getNodes(m).iterator(); xs.hasNext();) {
|
||||||
CGNode x = (CGNode) xs.next();
|
CGNode x = (CGNode) xs.next();
|
||||||
if (containsNode(x)) {
|
if (containsNode(x)) {
|
||||||
result.add(x);
|
result.add(x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,38 +80,37 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
|
||||||
}
|
}
|
||||||
|
|
||||||
public IClassHierarchy getClassHierarchy() {
|
public IClassHierarchy getClassHierarchy() {
|
||||||
return CG.getClassHierarchy();
|
return cg.getClassHierarchy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator iterateNodes(IntSet nodes) {
|
public Iterator<CGNode> iterateNodes(IntSet nodes) {
|
||||||
return new FilterIterator(CG.iterateNodes(nodes),
|
return new FilterIterator<CGNode>(cg.iterateNodes(nodes), new Filter() {
|
||||||
new Filter() {
|
public boolean accepts(Object o) {
|
||||||
public boolean accepts(Object o) {
|
return containsNode((CGNode) o);
|
||||||
return containsNode((CGNode)o);
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxNumber() {
|
public int getMaxNumber() {
|
||||||
return CG.getMaxNumber();
|
return cg.getMaxNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CGNode getNode(int index) {
|
public CGNode getNode(int index) {
|
||||||
CGNode n = CG.getNode(index);
|
CGNode n = cg.getNode(index);
|
||||||
Assertions._assert(containsNode(n));
|
Assertions._assert(containsNode(n));
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumber(CGNode n) {
|
public int getNumber(CGNode n) {
|
||||||
Assertions._assert(containsNode(n));
|
Assertions._assert(containsNode(n));
|
||||||
return CG.getNumber(n);
|
return cg.getNumber(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntSet getSuccNodeNumbers(CGNode node) {
|
public IntSet getSuccNodeNumbers(CGNode node) {
|
||||||
Assertions._assert(containsNode(node));
|
Assertions._assert(containsNode(node));
|
||||||
MutableIntSet x = IntSetUtil.make();
|
MutableIntSet x = IntSetUtil.make();
|
||||||
for(Iterator ns = getSuccNodes(node); ns.hasNext(); ) {
|
for (Iterator ns = getSuccNodes(node); ns.hasNext();) {
|
||||||
x.add( getNumber((CGNode)ns.next()) );
|
x.add(getNumber((CGNode) ns.next()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return x;
|
return x;
|
||||||
|
@ -113,12 +119,10 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
|
||||||
public IntSet getPredNodeNumbers(CGNode node) {
|
public IntSet getPredNodeNumbers(CGNode node) {
|
||||||
Assertions._assert(containsNode(node));
|
Assertions._assert(containsNode(node));
|
||||||
MutableIntSet x = IntSetUtil.make();
|
MutableIntSet x = IntSetUtil.make();
|
||||||
for(Iterator ns = getPredNodes(node); ns.hasNext(); ) {
|
for (Iterator ns = getPredNodes(node); ns.hasNext();) {
|
||||||
x.add( getNumber((CGNode)ns.next()) );
|
x.add(getNumber((CGNode) ns.next()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue