org\/w3c\/.*
java\/text\/.*
java\/util\/.*
+java\/io\/.*
+java\/lang\/(?!Object).*
--- /dev/null
+package demo.soba;\r
+\r
+import soba.core.JavaProgram;\r
+import soba.core.MethodInfo;\r
+import soba.util.callgraph.CallGraph;\r
+import soba.util.files.ClasspathUtil;\r
+import demo.util.MemoryInfo;\r
+\r
+public class CallGraphPerformance {\r
+\r
+ public static void main(String[] args) {\r
+ long start = System.currentTimeMillis();\r
+ \r
+ JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
+ CallGraph cg = new CallGraph(program);\r
+ for (MethodInfo caller: cg.getMethods()) {\r
+ for (MethodInfo callee: cg.getCallees(caller)) {\r
+// System.out.println(caller.toLongString() + " may call " + callee.toLongString());\r
+ }\r
+ }\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
+ }\r
+\r
+}\r
MethodInfo[] callees = ch.resolveCall(cs);\r
if (callees.length > 0) {\r
for (MethodInfo callee: callees) {\r
-// System.out.println(m.toString() + " may call " + callee.toString());\r
+// System.out.println(m.toLongString() + " may call " + callee.toLongString());\r
}\r
} else {\r
// System.out.println(m.toString() + " may call " + cs.toString());\r
import soba.core.MethodInfo;\r
import soba.core.method.DataDependence;\r
import soba.core.method.DataFlowEdge;\r
-import soba.util.IntPairProc;\r
import soba.util.files.ClasspathUtil;\r
import soba.util.graph.DirectedGraph;\r
import demo.util.MemoryInfo;\r
for (MethodInfo m: c.getMethods()) {\r
DataDependence dd = m.getDataDependence();\r
for (DataFlowEdge e: dd.getEdges()) {\r
-// System.out.println(e.getSourceInstruction() + " -> " + e.getDestinationInstruction());\r
+// System.out.println(e.toString());\r
}\r
DirectedGraph cd = m.getControlDependence();\r
- cd.forEachEdge(new IntPairProc() {\r
- @Override\r
- public boolean execute(int elem1, int elem2) {\r
-// System.out.println(elem1 + " -> " + elem2);\r
- return true;\r
+ for (int src = 0; src < cd.getVertexCount(); src++) {\r
+ for (int dst: cd.getEdges(src)) {\r
+// System.out.println(src + " -> " + dst);\r
}\r
- });\r
+ }\r
}\r
}\r
\r
\r
import java.util.Iterator;\r
\r
+import com.ibm.wala.classLoader.IMethod;\r
+import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
+import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
import com.ibm.wala.ipa.callgraph.CGNode;\r
+import com.ibm.wala.ipa.callgraph.CallGraph;\r
+import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
import com.ibm.wala.ipa.callgraph.Entrypoint;\r
-import com.ibm.wala.ipa.callgraph.cha.CHACallGraph;\r
import com.ibm.wala.ipa.callgraph.impl.Util;\r
import com.ibm.wala.ipa.cha.ClassHierarchy;\r
import com.ibm.wala.util.config.AnalysisScopeReader;\r
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
ClassHierarchy cha = ClassHierarchy.make(scope);\r
Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
- CHACallGraph cg = new CHACallGraph(cha);\r
- cg.init(entrypoints);\r
-\r
- for (int i = 0; i < cg.getMaxNumber(); i++) {\r
- CGNode caller = cg.getNode(i);\r
+ AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+ CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
+ CallGraph cg = builder.makeCallGraph(options, null);\r
+ for (Iterator<CGNode> itr = cg.iterator(); itr.hasNext();) {\r
+ CGNode caller = itr.next();\r
for (Iterator<CGNode> callees = cg.getSuccNodes(caller); callees.hasNext();) {\r
CGNode callee = callees.next();\r
-// System.out.println(caller.getMethod().toString() + " -> " + callee.getMethod().toString());\r
+ IMethod callerMethod = caller.getMethod();\r
+ IMethod calleeMethod = callee.getMethod();\r
+// System.out.println(callerMethod.toString() + " -> " + calleeMethod.toString());\r
}\r
}\r
- \r
long end = System.currentTimeMillis();\r
\r
System.err.println((end - start) + " [ms]");\r