package kr.ac.snu.selab.soot.callgraph; import java.io.File; import java.util.HashMap; import java.util.List; import kr.ac.snu.selab.soot.analyzer.AbstractAnalyzer; import kr.ac.snu.selab.soot.core.AbstractProject; import kr.ac.snu.selab.soot.util.MyUtil; import soot.Hierarchy; import soot.SootClass; import soot.SootMethod; public class CallGraphXMLCreator extends AbstractAnalyzer { private String outputPath; private String callGraphTXTPath; public CallGraphXMLCreator(AbstractProject project) { super(project); } @Override protected void preAnalysis() { String fileName = CallGraphTXTCreator.CALL_GRAPH_TXT_FILE_NAME; callGraphTXTPath = MyUtil.getPath(project.getOutputDirectory(), fileName); File parent = project.getOutputDirectory(); parent.mkdirs(); outputPath = MyUtil.getPath(parent, project.getProjectName() + "_callgraph.xml"); } @Override protected void analyze(List<SootClass> classList, Hierarchy hierarchy) { HashMap<String, SootMethod> methodMap = new HashMap<String, SootMethod>(); for (SootClass aClass : classList) { for (SootMethod aMethod : aClass.getMethods()) { methodMap.put(aMethod.toString(), aMethod); } } SimpleCallGraph cg = new SimpleCallGraph(); cg = cg.load(callGraphTXTPath, methodMap); MyUtil.stringToFile(cg.toXML(), outputPath); } }