package xsched.analysis.wala; import java.util.Collection; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.impl.PartialCallGraph; import com.ibm.wala.util.collections.Filter; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.GraphSlicer; import com.ibm.wala.util.graph.traverse.DFS; //prunes the call graph such that root nodes are task method nodes and the call edges only point to non task methods public class TaskForestCallGraph extends PartialCallGraph { public static TaskForestCallGraph make(final CallGraph cg, final Collection<CGNode> taskMethodNodes) { final Collection<CGNode> nodes = DFS.getReachableNodes(cg, taskMethodNodes, new Filter<CGNode>(){ @Override public boolean accepts(CGNode o) { return ! WalaConstants.isTaskMethod(o.getMethod().getReference()); } }); Graph<CGNode> partialGraph = GraphSlicer.prune(cg, new Filter<CGNode>() { public boolean accepts(CGNode o) { return nodes.contains(o); } }); return new TaskForestCallGraph(cg, taskMethodNodes, partialGraph); } protected TaskForestCallGraph(CallGraph cg, Collection<CGNode> partialRoots, Graph<CGNode> partialGraph) { super(cg, partialRoots, partialGraph); // TODO Auto-generated constructor stub } }