| 1 19 20 27 28 29 package soot.jimple.toolkits.annotation.purity; 30 import java.util.*; 31 import soot.*; 32 import soot.util.*; 33 import soot.jimple.*; 34 import soot.jimple.toolkits.callgraph.*; 35 import soot.options.PurityOptions; 36 37 40 41 48 49 public class PurityAnalysis extends SceneTransformer 50 { 51 Singletons.Global g; 52 53 public PurityAnalysis(Singletons.Global g ) { this.g = g; } 54 55 public static PurityAnalysis v() 56 { 57 return G.v().soot_jimple_toolkits_annotation_purity_PurityAnalysis(); 58 } 59 60 protected void internalTransform(String phaseName, Map options) 61 { 62 PurityOptions opts = new PurityOptions(options); 63 64 G.v().out.println("[AM] Analysing purity"); 65 66 CallGraph cg = Scene.v().getCallGraph(); 67 68 List heads = new LinkedList(); 70 Iterator getClassesIt = Scene.v().getApplicationClasses().iterator(); 71 while (getClassesIt.hasNext()) { 72 SootClass appClass = (SootClass)getClassesIt.next(); 73 Iterator getMethodsIt = appClass.getMethods().iterator(); 74 while (getMethodsIt.hasNext()) { 75 SootMethod method = (SootMethod) getMethodsIt.next(); 76 if (method.getName().equals("main")) { 77 heads.add(method); 78 G.v().out.println(" |- will treat "+appClass.getName()+ 79 "."+method.getName()); 80 } 81 } 82 } 83 84 PurityInterproceduralAnalysis p = 86 new PurityInterproceduralAnalysis(cg, heads.iterator(), opts); 87 } 88 } 89 | Popular Tags |