generics cleanups

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1415 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
sjfink 2007-07-11 15:03:20 +00:00
parent 096729ad2c
commit 6542c0eb0f
1 changed files with 46 additions and 42 deletions

View File

@ -1,40 +1,47 @@
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.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.types.MethodReference;
import com.ibm.wala.util.collections.*;
import com.ibm.wala.util.debug.*;
import com.ibm.wala.util.graph.*;
import com.ibm.wala.util.graph.impl.*;
import com.ibm.wala.util.graph.traverse.*;
import com.ibm.wala.util.intset.*;
import com.ibm.wala.util.collections.Filter;
import com.ibm.wala.util.collections.FilterIterator;
import com.ibm.wala.util.collections.HashSetFactory;
import com.ibm.wala.util.debug.Assertions;
import com.ibm.wala.util.graph.Graph;
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>
implements CallGraph
{
private final CallGraph cg;
private final CallGraph CG;
private final Set<CGNode> partialRoots;
private final Set partialRoots;
private PartialCallGraph(CallGraph CG, Set partialRoots, Graph partialGraph) {
private PartialCallGraph(CallGraph cg, Set<CGNode> partialRoots, Graph<CGNode> partialGraph) {
super(partialGraph);
this.CG = CG;
this.cg = cg;
this.partialRoots = partialRoots;
}
public static PartialCallGraph make(CallGraph CG, Set partialRoots) {
final Set nodes = DFS.getReachableNodes(CG, partialRoots);
Graph partialGraph = GraphSlicer.prune(CG, new Filter() {
public static PartialCallGraph make(CallGraph CG, Set<CGNode> partialRoots) {
final Set<CGNode> nodes = DFS.getReachableNodes(CG, partialRoots);
Graph<CGNode> partialGraph = GraphSlicer.prune(CG, new Filter() {
public boolean accepts(Object o) {
return nodes.contains(o);
return nodes.contains(o);
}
});
return new PartialCallGraph(CG, partialRoots, partialGraph);
}
@ -48,7 +55,7 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
}
public CGNode getNode(IMethod method, Context C) {
CGNode x = CG.getNode(method, C);
CGNode x = cg.getNode(method, C);
if (containsNode(x)) {
return x;
} else {
@ -57,11 +64,11 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
}
public Set<CGNode> getNodes(MethodReference m) {
Set result = new HashSet();
for(Iterator xs = CG.getNodes(m).iterator(); xs.hasNext(); ) {
Set<CGNode> result = HashSetFactory.make();
for (Iterator xs = cg.getNodes(m).iterator(); xs.hasNext();) {
CGNode x = (CGNode) xs.next();
if (containsNode(x)) {
result.add(x);
result.add(x);
}
}
@ -73,38 +80,37 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
}
public IClassHierarchy getClassHierarchy() {
return CG.getClassHierarchy();
return cg.getClassHierarchy();
}
public Iterator iterateNodes(IntSet nodes) {
return new FilterIterator(CG.iterateNodes(nodes),
new Filter() {
public boolean accepts(Object o) {
return containsNode((CGNode)o);
}
public Iterator<CGNode> iterateNodes(IntSet nodes) {
return new FilterIterator<CGNode>(cg.iterateNodes(nodes), new Filter() {
public boolean accepts(Object o) {
return containsNode((CGNode) o);
}
});
}
public int getMaxNumber() {
return CG.getMaxNumber();
return cg.getMaxNumber();
}
public CGNode getNode(int index) {
CGNode n = CG.getNode(index);
CGNode n = cg.getNode(index);
Assertions._assert(containsNode(n));
return n;
}
public int getNumber(CGNode n) {
Assertions._assert(containsNode(n));
return CG.getNumber(n);
return cg.getNumber(n);
}
public IntSet getSuccNodeNumbers(CGNode node) {
Assertions._assert(containsNode(node));
MutableIntSet x = IntSetUtil.make();
for(Iterator ns = getSuccNodes(node); ns.hasNext(); ) {
x.add( getNumber((CGNode)ns.next()) );
for (Iterator ns = getSuccNodes(node); ns.hasNext();) {
x.add(getNumber((CGNode) ns.next()));
}
return x;
@ -113,12 +119,10 @@ public class PartialCallGraph extends DelegatingGraph<CGNode>
public IntSet getPredNodeNumbers(CGNode node) {
Assertions._assert(containsNode(node));
MutableIntSet x = IntSetUtil.make();
for(Iterator ns = getPredNodes(node); ns.hasNext(); ) {
x.add( getNumber((CGNode)ns.next()) );
for (Iterator ns = getPredNodes(node); ns.hasNext();) {
x.add(getNumber((CGNode) ns.next()));
}
return x;
}
}