OSDN Git Service

Added programs using WALA/Soot
authort-hatano <tnotawa@gmail.com>
Wed, 3 Feb 2016 13:22:57 +0000 (22:22 +0900)
committert-hatano <tnotawa@gmail.com>
Wed, 3 Feb 2016 13:22:57 +0000 (22:22 +0900)
18 files changed:
JavaAnalysisToolsDemo/.classpath
JavaAnalysisToolsDemo/.gitignore
JavaAnalysisToolsDemo/sample/demo/testdata/TestClass.java [new file with mode: 0644]
JavaAnalysisToolsDemo/sample/testers/CallGraphs.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soba/ClassHierarchyPerformance.java
JavaAnalysisToolsDemo/src/demo/soot/ClassHierarchyPerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soot/ControlDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/soot/DataDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/util/DemoUtil.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/util/MemoryInfo.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/wala/ClassHierarchyPerformance.java
JavaAnalysisToolsDemo/src/demo/wala/ControlAndDataDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/wala/ControlDependenceBasicBlockPeformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/wala/ControlDependencePeformance.java [deleted file]
JavaAnalysisToolsDemo/src/demo/wala/ControlDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/wala/DataDependencePerformance.java [new file with mode: 0644]
JavaAnalysisToolsDemo/src/demo/wala/SlicerMain.java
JavaAnalysisToolsDemo/testdata.jar [deleted file]

index 5dc1e2c..c3c7765 100644 (file)
@@ -5,8 +5,8 @@
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
        <classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.core"/>\r
        <classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.util"/>\r
-       <classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.core.tests"/>\r
        <classpathentry combineaccessrules="false" kind="src" path="/soba"/>\r
        <classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.shrike"/>\r
+       <classpathentry combineaccessrules="false" kind="src" path="/soot"/>\r
        <classpathentry kind="output" path="bin"/>\r
 </classpath>\r
diff --git a/JavaAnalysisToolsDemo/sample/demo/testdata/TestClass.java b/JavaAnalysisToolsDemo/sample/demo/testdata/TestClass.java
new file mode 100644 (file)
index 0000000..1d5c3e1
--- /dev/null
@@ -0,0 +1,40 @@
+package demo.testdata;\r
+\r
+public class TestClass {\r
+\r
+       public static void main(String[] args) {\r
+               int x = add(10, 20);\r
+               int v = method1(1, 2, 3, 4);\r
+               int w = method2(5, true);\r
+//             System.out.println(v);\r
+       }\r
+\r
+       private static int add(int x, int y) {\r
+               int r = method1(x, y, 1, 2);\r
+               return r;\r
+       }\r
+       \r
+       public static int method1(int a, int b, int c, int d) {\r
+               int x;\r
+               if (a > b) {\r
+                       x = c * 10;\r
+               } else {\r
+                       x = d / 10;\r
+               }\r
+               x = x + 5;\r
+               return x;\r
+       }\r
+       \r
+       public static int method2(int a, boolean b) {\r
+               int x;\r
+               if (b) {\r
+                       x = 1;\r
+               } else {\r
+                       x = 2;\r
+                       int temp1 = x;  // x = 2\r
+                       x = 3;\r
+               }\r
+               int temp2 = x; // x = 1 or 3\r
+               return temp2;\r
+       }\r
+}\r
diff --git a/JavaAnalysisToolsDemo/sample/testers/CallGraphs.java b/JavaAnalysisToolsDemo/sample/testers/CallGraphs.java
new file mode 100644 (file)
index 0000000..b2273a2
--- /dev/null
@@ -0,0 +1,22 @@
+package testers;\r
+\r
+public class CallGraphs\r
+{\r
+       public static void main(String[] args) {\r
+               doStuff();\r
+       }\r
+       \r
+       public static void doStuff() {\r
+               new A().foo();\r
+       }\r
+}\r
+\r
+class A\r
+{\r
+       public void foo() {\r
+               bar();\r
+       }\r
+       \r
+       public void bar() {\r
+       }\r
+}
\ No newline at end of file
index 31a0ff1..a9f79df 100644 (file)
@@ -1,5 +1,6 @@
 package demo.soba;\r
 \r
+import demo.util.MemoryInfo;\r
 import soba.core.ClassHierarchy;\r
 import soba.core.ClassInfo;\r
 import soba.core.JavaProgram;\r
@@ -10,24 +11,30 @@ import soba.util.files.ClasspathUtil;
 public class ClassHierarchyPerformance {\r
 \r
        public static void main(String[] args) {\r
+               long start = System.currentTimeMillis();\r
+               \r
                JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
                ClassHierarchy ch = program.getClassHierarchy();\r
                \r
                for (ClassInfo c: program.getClasses()) {\r
                        for (MethodInfo m: c.getMethods()) {\r
-                               System.out.println(m.toLongString());\r
                                for (CallSite cs: m.getCallSites()) {\r
                                        MethodInfo[] callees = ch.resolveCall(cs);\r
                                        if (callees.length > 0) {\r
                                                for (MethodInfo callee: callees) {\r
-                                                       System.out.println("  [inside] " + callee.toLongString());\r
+//                                                     System.out.println(m.toString() + " may call " + callee.toString());\r
                                                }\r
                                        } else {\r
-                                               System.out.println("  [outside] " + cs.toString());\r
+//                                             System.out.println(m.toString() + " may call " + cs.toString());\r
                                        }\r
                                }\r
                        }\r
                }\r
+               \r
+               long end = System.currentTimeMillis();\r
+               \r
+               System.out.println((end - start) + " [ms]");\r
+               System.out.println(MemoryInfo.getMemoryInfo());\r
        }\r
 \r
 }\r
diff --git a/JavaAnalysisToolsDemo/src/demo/soot/ClassHierarchyPerformance.java b/JavaAnalysisToolsDemo/src/demo/soot/ClassHierarchyPerformance.java
new file mode 100644 (file)
index 0000000..f4aa139
--- /dev/null
@@ -0,0 +1,66 @@
+package demo.soot;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.function.Consumer;\r
+\r
+import demo.util.MemoryInfo;\r
+import soot.PackManager;\r
+import soot.Scene;\r
+import soot.SceneTransformer;\r
+import soot.Transform;\r
+import soot.jimple.toolkits.callgraph.CallGraph;\r
+import soot.jimple.toolkits.callgraph.Edge;\r
+\r
+public class ClassHierarchyPerformance {\r
+\r
+       public static void main(String[] args) {\r
+//             List<String> argsList = new ArrayList<String>(Arrays.asList(args));\r
+               List<String> argsList = Arrays.asList(new String[]{\r
+                               "-cp",\r
+                               "bin" + File.pathSeparator + \r
+                               "bin/testers" + File.pathSeparator + \r
+                               "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\rt.jar" + File.pathSeparator +\r
+                               "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\jce.jar",\r
+                               "-whole-program",\r
+                               "-main-class",\r
+                               "testers.CallGraphs",//main-class\r
+//                             "-app",\r
+//                             "testers.CallGraphs",\r
+                               "-p",\r
+                               "cg.cha",\r
+                               "apponly:true,verbose:true",\r
+                               "testers.CallGraphs",//argument classes\r
+                               "testers.A"                     //\r
+               });\r
+\r
+\r
+               long start = System.currentTimeMillis();\r
+               \r
+               PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTrans", new SceneTransformer() {\r
+                       @Override\r
+                       protected void internalTransform(String phaseName, Map options) {\r
+                               CallGraph cg = Scene.v().getCallGraph();\r
+                               cg.forEach(new Consumer<Edge>() {\r
+                                       @Override\r
+                                       public void accept(Edge edge) {\r
+//                                             System.out.println(edge.getSrc().method().toString() + " -> " + edge.getTgt().method().toString());\r
+                                       }\r
+                               });\r
+                               \r
+                               long end = System.currentTimeMillis();\r
+                               \r
+                               System.out.println((end - start) + " [ms]");\r
+                               System.out.println(MemoryInfo.getMemoryInfo());\r
+                       }\r
+               }));\r
+\r
+               args = argsList.toArray(new String[0]);\r
+\r
+               soot.Main.main(args);\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/soot/ControlDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/soot/ControlDependencePerformance.java
new file mode 100644 (file)
index 0000000..892659a
--- /dev/null
@@ -0,0 +1,94 @@
+package demo.soot;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import soot.Body;\r
+import soot.BodyTransformer;\r
+import soot.Local;\r
+import soot.PackManager;\r
+import soot.PhaseOptions;\r
+import soot.SootMethod;\r
+import soot.Transform;\r
+import soot.Unit;\r
+import soot.Value;\r
+import soot.ValueBox;\r
+import soot.toolkits.graph.Block;\r
+import soot.toolkits.graph.BlockGraph;\r
+import soot.toolkits.graph.BlockGraphConverter;\r
+import soot.toolkits.graph.DirectedGraph;\r
+import soot.toolkits.graph.DominatorsFinder;\r
+import soot.toolkits.graph.ExceptionalUnitGraph;\r
+import soot.toolkits.graph.MHGDominatorsFinder;\r
+import soot.toolkits.graph.MHGPostDominatorsFinder;\r
+import soot.toolkits.graph.UnitGraph;\r
+import soot.toolkits.graph.pdg.ConditionalPDGNode;\r
+import soot.toolkits.graph.pdg.EnhancedBlockGraph;\r
+import soot.toolkits.graph.pdg.HashMutablePDG;\r
+import soot.toolkits.graph.pdg.PDGNode;\r
+import soot.toolkits.graph.pdg.ProgramDependenceGraph;\r
+import soot.toolkits.scalar.LiveLocals;\r
+import soot.toolkits.scalar.LocalDefs;\r
+import soot.toolkits.scalar.SimpleLiveLocals;\r
+import soot.toolkits.scalar.SmartLocalDefs;\r
+\r
+public class ControlDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               List<String> argsList = Arrays.asList(new String[]{\r
+                               "-cp",\r
+                               "bin" + File.pathSeparator + \r
+                               "bin/demo/testdata" + File.pathSeparator + \r
+                               "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\rt.jar" + File.pathSeparator +\r
+                               "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\jce.jar",\r
+                               "-whole-program",\r
+                               "-main-class",\r
+                               "demo.testdata.TestClass",//main-class\r
+                               "-app",\r
+                               "demo.testdata.TestClass",\r
+                               "demo.testdata.TestClass",//argument classes\r
+                               "-p",\r
+                               "cg.cha",\r
+                               "apponly:true,verbose:true",\r
+                               "-keep-line-number"\r
+               });\r
+\r
+               PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
+                       @Override\r
+                       protected void internalTransform(Body body, String phase, Map options) {\r
+                               SootMethod method = body.getMethod();\r
+                               if (method.getName().equals("method1")) {\r
+                                       BlockGraph graph = new EnhancedBlockGraph(body);\r
+                                       DominatorsFinder<Block> domFinder = new MHGPostDominatorsFinder<>(graph);\r
+                                       for (Block b2: graph.getBlocks()) {\r
+                                               List<Block> nodes = new ArrayList<>(graph.getBlocks());\r
+                                               List<Block> doms = domFinder.getDominators(b2);\r
+                                               nodes.retainAll(doms);\r
+                                               nodes.remove(b2);\r
+                                               for (Block b1: nodes) {\r
+                                                       System.out.println(b1.toShortString() + " -> " + b2.toShortString());\r
+                                               }\r
+                                       }\r
+//                                     DominatorsFinder<Block> domFinder = new MHGDominatorsFinder<>(graph);\r
+//                                     DirectedGraph<Block> postDomGraph = domFinder.getGraph();\r
+//                                     for (Iterator<Block> itr = postDomGraph.iterator(); itr.hasNext();) {\r
+//                                             Block b1 = itr.next();\r
+//                                             for (Block b2: postDomGraph.getSuccsOf(b1)) {\r
+//                                                     System.out.println(b1.toShortString() + " -> " + b2.toShortString());\r
+//                                             }\r
+//                                     }\r
+                               }\r
+                       }\r
+               }));\r
+//             Options.v().set_verbose(true);\r
+               PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
+               \r
+               args = argsList.toArray(new String[0]);\r
+               soot.Main.main(args);\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/soot/DataDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/soot/DataDependencePerformance.java
new file mode 100644 (file)
index 0000000..4ae8197
--- /dev/null
@@ -0,0 +1,72 @@
+package demo.soot;\r
+\r
+import java.io.File;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import soot.Body;\r
+import soot.BodyTransformer;\r
+import soot.Local;\r
+import soot.PackManager;\r
+import soot.PhaseOptions;\r
+import soot.Transform;\r
+import soot.Unit;\r
+import soot.Value;\r
+import soot.ValueBox;\r
+import soot.toolkits.graph.ExceptionalUnitGraph;\r
+import soot.toolkits.graph.UnitGraph;\r
+import soot.toolkits.scalar.LiveLocals;\r
+import soot.toolkits.scalar.LocalDefs;\r
+import soot.toolkits.scalar.SimpleLiveLocals;\r
+import soot.toolkits.scalar.SmartLocalDefs;\r
+\r
+public class DataDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               List<String> argsList = Arrays.asList(new String[]{\r
+                               "-cp",\r
+                               "bin" + File.pathSeparator + \r
+                               "bin/demo/testdata" + File.pathSeparator + \r
+                               "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\rt.jar" + File.pathSeparator +\r
+                               "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\jce.jar",\r
+                               "-whole-program",\r
+                               "-main-class",\r
+                               "demo.testdata.TestClass",//main-class\r
+                               "-app",\r
+                               "demo.testdata.TestClass",\r
+                               "demo.testdata.TestClass",//argument classes\r
+                               "-p",\r
+                               "cg.cha",\r
+                               "apponly:true,verbose:true",\r
+//                             "-keep-line-number"\r
+               });\r
+\r
+               PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
+                       @Override\r
+                       protected void internalTransform(Body body, String phase, Map options) {\r
+                               UnitGraph graph = new ExceptionalUnitGraph(body);\r
+                               LiveLocals live = new SimpleLiveLocals(graph);\r
+                               LocalDefs defs = new SmartLocalDefs(graph, live);\r
+\r
+                               for (Unit u: body.getUnits()) {\r
+                                       for (ValueBox vb: u.getUseBoxes()) {\r
+                                               Value v = vb.getValue();\r
+                                               if (v instanceof Local) {\r
+                                                       List<Unit> defUnits = defs.getDefsOfAt((Local) v, u);\r
+                                                       for (Unit def: defUnits) {\r
+//                                                             System.out.println(def.toString() + " -> " + u.toString());\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }));\r
+//             Options.v().set_verbose(true);\r
+               PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
+               \r
+               args = argsList.toArray(new String[0]);\r
+               soot.Main.main(args);\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/util/DemoUtil.java b/JavaAnalysisToolsDemo/src/demo/util/DemoUtil.java
new file mode 100644 (file)
index 0000000..8f9bb3d
--- /dev/null
@@ -0,0 +1,6 @@
+package demo.util;\r
+\r
+public class DemoUtil {\r
+\r
+       public static final String REGRESSION_EXCLUSIONS = "Java60RegressionExclusions.txt";\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/util/MemoryInfo.java b/JavaAnalysisToolsDemo/src/demo/util/MemoryInfo.java
new file mode 100644 (file)
index 0000000..1380b65
--- /dev/null
@@ -0,0 +1,22 @@
+package demo.util;\r
+\r
+import java.text.DecimalFormat;\r
+\r
+public class MemoryInfo {\r
+\r
+       public static String getMemoryInfo() {\r
+           DecimalFormat f1 = new DecimalFormat("#,###KB");\r
+           DecimalFormat f2 = new DecimalFormat("##.#");\r
+           long free = Runtime.getRuntime().freeMemory() / 1024;\r
+           long total = Runtime.getRuntime().totalMemory() / 1024;\r
+           long max = Runtime.getRuntime().maxMemory() / 1024;\r
+           long used = total - free;\r
+           double ratio = (used * 100 / (double)total);\r
+           String info = \r
+           "Java Memory: total=" + f1.format(total) + "\81A" +\r
+           "used=" + f1.format(used) + " (" + f2.format(ratio) + "%)\81A" +\r
+           "available="+f1.format(max);\r
+           return info;\r
+       }\r
+       \r
+}\r
index 1811f10..cbafadf 100644 (file)
@@ -1,29 +1,30 @@
 package demo.wala;\r
 \r
-import java.io.File;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
+import java.util.Iterator;\r
 \r
-import com.ibm.wala.classLoader.IMethod;\r
-import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;\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.CallGraphStats;\r
 import com.ibm.wala.ipa.callgraph.Entrypoint;\r
 import com.ibm.wala.ipa.callgraph.impl.Util;\r
 import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.types.MethodReference;\r
 import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
 \r
 public class ClassHierarchyPerformance {\r
 \r
        public static void main(String[] args) {\r
                try {\r
-                       String appJar = "sample.jar";\r
-                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+                       long start = System.currentTimeMillis();\r
+                       \r
+                       String appJar = "bin/testers";\r
+//                     AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
 \r
                        ClassHierarchy cha = ClassHierarchy.make(scope);\r
 \r
@@ -32,49 +33,21 @@ public class ClassHierarchyPerformance {
                        com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
                        CallGraph cg = builder.makeCallGraph(options, null);\r
 \r
-                       System.out.println(CallGraphStats.getStats(cg));\r
-\r
-                       Set<MethodReference> methods = new HashSet<>();\r
-                       for(int i = 0; i < cg.getMaxNumber(); i++) {\r
+                       for (int i = 0; i < cg.getMaxNumber(); i++) {\r
                                CGNode node = cg.getNode(i);\r
-                               IMethod method = node.getMethod();\r
-                               methods.add(method.getReference());\r
-                       }\r
-                       \r
-                       for (MethodReference method: methods) {\r
-                               System.out.println(method.toString());\r
-                               Set<CGNode> nodes = cg.getNodes(method);\r
-                               for (CGNode node: nodes) {\r
-                                       System.out.println("  " + node.getMethod().getReference().toString());\r
+                               for (Iterator<CGNode> callees = cg.getSuccNodes(node); callees.hasNext();) {\r
+                                       CGNode callee = callees.next();\r
+//                                     System.out.println(node.getMethod().toString() + " -> " + callee.getMethod().toString());\r
                                }\r
                        }\r
                        \r
+                       long end = System.currentTimeMillis();\r
+                       \r
+                       System.out.println((end - start) + " [ms]");\r
+                       System.out.println(MemoryInfo.getMemoryInfo());\r
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                }\r
        }\r
-       \r
-//     public static void main(String[] args) {\r
-//             try {\r
-//                     String appJar = "sample.jar";\r
-//                     AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
-//\r
-//                     ClassHierarchy cha = ClassHierarchy.make(scope);\r
-//\r
-//                     Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha);\r
-//                     AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-//\r
-//                     com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
-//                     CallGraph cg = builder.makeCallGraph(options, null);\r
-//\r
-//                     System.out.println(CallGraphStats.getStats(cg));\r
-//                     \r
-//                     cg.getEntrypointNodes().forEach(node -> {\r
-//                             System.out.println(node.getMethod().getName().toString());\r
-//                     });\r
-//             } catch (Exception e) {\r
-//                     e.printStackTrace();\r
-//             }\r
-//     }\r
 \r
 }\r
diff --git a/JavaAnalysisToolsDemo/src/demo/wala/ControlAndDataDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/wala/ControlAndDataDependencePerformance.java
new file mode 100644 (file)
index 0000000..e1d5e93
--- /dev/null
@@ -0,0 +1,71 @@
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\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.impl.Util;\r
+import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ipa.modref.ModRef;\r
+import com.ibm.wala.ipa.slicer.HeapExclusions;\r
+import com.ibm.wala.ipa.slicer.PDG;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
+import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.intset.OrdinalSet;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+\r
+public class ControlAndDataDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               try {\r
+                       String appJar = "bin/demo/testdata";\r
+//                     String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";\r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
+                       \r
+                       Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+                       AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+\r
+                       // build the call graph\r
+                       CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
+                       CallGraph cg = cgb.makeCallGraph(options, null);\r
+                       PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+\r
+                       for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+                               CGNode node = cg.getNode(i);\r
+                               DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
+                               ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
+                               ModRef modRef = ModRef.make();\r
+                               HeapExclusions exclusions = null;\r
+                               Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+                               Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+                               PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+                               \r
+                               for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
+                                       Statement s1 = itr.next();\r
+                                       for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+                                               Statement s2 = succs.next();\r
+//                                             System.out.println(s1.toString() + " -> " + s2.toString());\r
+                                       }\r
+                               }\r
+                       }\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/wala/ControlDependenceBasicBlockPeformance.java b/JavaAnalysisToolsDemo/src/demo/wala/ControlDependenceBasicBlockPeformance.java
new file mode 100644 (file)
index 0000000..d703182
--- /dev/null
@@ -0,0 +1,109 @@
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.function.Consumer;\r
+\r
+import com.ibm.wala.cfg.cdg.ControlDependenceGraph;\r
+import com.ibm.wala.classLoader.IClass;\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.impl.Everywhere;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ssa.IR;\r
+import com.ibm.wala.ssa.ISSABasicBlock;\r
+import com.ibm.wala.ssa.SSAInstruction;\r
+import com.ibm.wala.ssa.SSAOptions;\r
+import com.ibm.wala.types.MethodReference;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.debug.Assertions;\r
+import com.ibm.wala.util.graph.NumberedEdgeManager;\r
+import com.ibm.wala.util.io.FileProvider;\r
+import com.ibm.wala.util.strings.StringStuff;\r
+\r
+import demo.util.DemoUtil;\r
+\r
+public class ControlDependenceBasicBlockPeformance {\r
+\r
+       public static void main(String[] args) {\r
+               try {\r
+                       String appJar = "bin/demo/testdata";\r
+                       \r
+//                     AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
+\r
+                       for (Iterator<IClass> itr = cha.iterator(); itr.hasNext();) {\r
+                               IClass c = itr.next();\r
+                               for (IMethod m: c.getAllMethods()) {\r
+                                       AnalysisOptions options = new AnalysisOptions();\r
+                                       options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
+                                       AnalysisCache cache = new AnalysisCache();\r
+                                       IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
+                                       if (ir == null) {\r
+                                               Assertions.UNREACHABLE("Null IR for " + m);\r
+                                       }\r
+                                       ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
+                                       for (int i = 0; i < cdg.getMaxNumber(); i++) {\r
+                                               ISSABasicBlock b1 = cdg.getNode(i);\r
+                                               for (Iterator<ISSABasicBlock> succs = cdg.getSuccNodes(b1); succs.hasNext();) {\r
+                                                       ISSABasicBlock b2 = succs.next();\r
+//                                                     System.out.println(b1.toString() + " -> " + b2.toString());\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+//                     \r
+//                     MethodReference mr = StringStuff.makeMethodReference(methodSig);\r
+//\r
+//                     IMethod m = cha.resolveMethod(mr);\r
+//                     if (m == null) {\r
+//                             System.err.println("could not resolve " + mr);\r
+//                             throw new RuntimeException();\r
+//                     }\r
+//                     AnalysisOptions options = new AnalysisOptions();\r
+//                     options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
+//                     AnalysisCache cache = new AnalysisCache();\r
+//                     IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
+//\r
+//                     if (ir == null) {\r
+//                             Assertions.UNREACHABLE("Null IR for " + m);\r
+//                     }\r
+//\r
+//                     ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
+//\r
+//                     NumberedEdgeManager<ISSABasicBlock> manager = cdg.getEdgeManager();\r
+//                     for (Iterator<ISSABasicBlock> itr1 = cdg.iterator(); itr1.hasNext();) {\r
+//                             ISSABasicBlock b1 = itr1.next();\r
+//                             for (Iterator<ISSABasicBlock> itr2 = cdg.iterator(); itr2.hasNext();) {\r
+//                                     ISSABasicBlock b2 = itr2.next();\r
+//                                     if (manager.hasEdge(b1, b2)) {\r
+//                                             StringBuilder sb = new StringBuilder();\r
+//                                             b1.forEach(new Consumer<SSAInstruction>() {\r
+//                                                     @Override\r
+//                                                     public void accept(SSAInstruction t) {\r
+//                                                             sb.append(t.iindex);\r
+//                                                             sb.append(";");\r
+//                                                     }\r
+//                                             });\r
+//                                             sb.append(" -> ");\r
+//                                             b2.forEach(new Consumer<SSAInstruction>() {\r
+//                                                     @Override\r
+//                                                     public void accept(SSAInstruction t) {\r
+//                                                             sb.append(t.iindex);\r
+//                                                             sb.append(";");\r
+//                                                     }\r
+//                                             });\r
+//                                             System.out.println(sb.toString());\r
+//                                     }\r
+//                             }\r
+//                     }\r
+                       \r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/wala/ControlDependencePeformance.java b/JavaAnalysisToolsDemo/src/demo/wala/ControlDependencePeformance.java
deleted file mode 100644 (file)
index 235cfe9..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-package demo.wala;\r
-\r
-import java.util.Iterator;\r
-\r
-import com.ibm.wala.cfg.cdg.ControlDependenceGraph;\r
-import com.ibm.wala.classLoader.IMethod;\r
-import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;\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.impl.Everywhere;\r
-import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.ssa.IR;\r
-import com.ibm.wala.ssa.ISSABasicBlock;\r
-import com.ibm.wala.ssa.SSAInstruction;\r
-import com.ibm.wala.ssa.SSAOptions;\r
-import com.ibm.wala.types.MethodReference;\r
-import com.ibm.wala.util.config.AnalysisScopeReader;\r
-import com.ibm.wala.util.debug.Assertions;\r
-import com.ibm.wala.util.io.FileProvider;\r
-import com.ibm.wala.util.strings.StringStuff;\r
-\r
-public class ControlDependencePeformance {\r
-\r
-       public static void main(String[] args) {\r
-               try {\r
-                       String appJar = "sample.jar";\r
-                       String methodSig = "demo.sample.Sample.main([Ljava/lang/String;)V";\r
-                       \r
-                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
-\r
-                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
-\r
-                       MethodReference mr = StringStuff.makeMethodReference(methodSig);\r
-\r
-                       IMethod m = cha.resolveMethod(mr);\r
-                       if (m == null) {\r
-                               System.err.println("could not resolve " + mr);\r
-                               throw new RuntimeException();\r
-                       }\r
-                       AnalysisOptions options = new AnalysisOptions();\r
-                       options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
-                       AnalysisCache cache = new AnalysisCache();\r
-                       IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
-\r
-                       if (ir == null) {\r
-                               Assertions.UNREACHABLE("Null IR for " + m);\r
-                       }\r
-\r
-                       System.err.println(ir.toString());\r
-                       ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
-                       System.out.println(cdg.toString());\r
-               } catch (Exception e) {\r
-                       e.printStackTrace();\r
-               }\r
-       }\r
-\r
-}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/wala/ControlDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/wala/ControlDependencePerformance.java
new file mode 100644 (file)
index 0000000..550a9b8
--- /dev/null
@@ -0,0 +1,80 @@
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\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.impl.Util;\r
+import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ipa.modref.ModRef;\r
+import com.ibm.wala.ipa.slicer.HeapExclusions;\r
+import com.ibm.wala.ipa.slicer.PDG;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
+import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.intset.OrdinalSet;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
+\r
+public class ControlDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               try {\r
+                       long start = System.currentTimeMillis();\r
+                       \r
+                       String appJar = "bin/demo/testdata";\r
+//                     String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";\r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
+                       \r
+                       Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+                       AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+\r
+                       // build the call graph\r
+                       CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
+                       CallGraph cg = cgb.makeCallGraph(options, null);\r
+//                     PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+                       PointerAnalysis<InstanceKey> pa = null;\r
+\r
+                       for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+                               CGNode node = cg.getNode(i);\r
+                               DataDependenceOptions dOptions = DataDependenceOptions.NONE;\r
+                               ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
+                               ModRef modRef = ModRef.make();\r
+                               HeapExclusions exclusions = null;\r
+                               Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+                               Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+                               PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+                               \r
+                               for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
+                                       Statement s1 = itr.next();\r
+                                       for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+                                               Statement s2 = succs.next();\r
+//                                             System.out.println(s1.toString() + " -> " + s2.toString());\r
+                                       }\r
+                               }\r
+                       }\r
+                       \r
+                       long end = System.currentTimeMillis();\r
+                       \r
+                       System.out.println((end - start) + " [ms]");\r
+                       System.out.println(MemoryInfo.getMemoryInfo());\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/JavaAnalysisToolsDemo/src/demo/wala/DataDependencePerformance.java b/JavaAnalysisToolsDemo/src/demo/wala/DataDependencePerformance.java
new file mode 100644 (file)
index 0000000..c5ddef4
--- /dev/null
@@ -0,0 +1,79 @@
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\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.impl.Util;\r
+import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ipa.modref.ModRef;\r
+import com.ibm.wala.ipa.slicer.HeapExclusions;\r
+import com.ibm.wala.ipa.slicer.PDG;\r
+import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.intset.OrdinalSet;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
+\r
+public class DataDependencePerformance {\r
+\r
+       public static void main(String[] args) {\r
+               try {\r
+                       long start = System.currentTimeMillis();\r
+                       \r
+                       String appJar = "bin/demo/testdata";\r
+//                     String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";\r
+                       AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+                       ClassHierarchy cha = ClassHierarchy.make(scope);\r
+                       \r
+                       Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+                       AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+\r
+                       // build the call graph\r
+                       CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
+                       CallGraph cg = cgb.makeCallGraph(options, null);\r
+                       PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+\r
+                       for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+                               CGNode node = cg.getNode(i);\r
+                               DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
+                               ControlDependenceOptions cOptions = ControlDependenceOptions.NONE;\r
+                               ModRef modRef = ModRef.make();\r
+                               HeapExclusions exclusions = null;\r
+                               Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+                               Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+                               PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+                               \r
+                               for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
+                                       Statement s1 = itr.next();\r
+                                       for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+                                               Statement s2 = succs.next();\r
+//                                             System.out.println(s1.toString() + " -> " + s2.toString());\r
+                                       }\r
+                               }\r
+                       }\r
+                       \r
+                       long end = System.currentTimeMillis();\r
+                       \r
+                       System.out.println((end - start) + " [ms]");\r
+                       System.out.println(MemoryInfo.getMemoryInfo());\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+\r
+}\r
index 398cf74..aabcad3 100644 (file)
@@ -1,19 +1,15 @@
 package demo.wala;\r
 \r
-import java.io.File;\r
 import java.io.IOException;\r
 import java.util.Collection;\r
 import java.util.Iterator;\r
 \r
 import com.ibm.wala.classLoader.ShrikeBTMethod;\r
-import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;\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.CallGraphBuilderCancelException;\r
 import com.ibm.wala.ipa.callgraph.Entrypoint;\r
 import com.ibm.wala.ipa.callgraph.impl.Util;\r
 import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
@@ -28,8 +24,11 @@ import com.ibm.wala.util.CancelException;
 import com.ibm.wala.util.WalaException;\r
 import com.ibm.wala.util.config.AnalysisScopeReader;\r
 import com.ibm.wala.util.debug.Assertions;\r
+import com.ibm.wala.util.io.FileProvider;\r
 import com.ibm.wala.util.strings.Atom;\r
 \r
+import demo.util.DemoUtil;\r
+\r
 public class SlicerMain {\r
 \r
        public static void main(String[] args) {\r
@@ -46,7 +45,9 @@ public class SlicerMain {
                // create an analysis scope representing the appJar as a J2SE application\r
 //             AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,CallGraphTestUtil.REGRESSION_EXCLUSIONS);\r
 //             AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, null);\r
-               AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+//             AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+               AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
                ClassHierarchy cha = ClassHierarchy.make(scope);\r
 \r
                Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha);\r
diff --git a/JavaAnalysisToolsDemo/testdata.jar b/JavaAnalysisToolsDemo/testdata.jar
deleted file mode 100644 (file)
index 520c43f..0000000
Binary files a/JavaAnalysisToolsDemo/testdata.jar and /dev/null differ