1 19 20 package soot.jimple.toolkits.annotation.methods; 21 import soot.*; 22 import java.util.*; 23 import soot.toolkits.graph.*; 24 import soot.toolkits.scalar.*; 25 import soot.tagkit.*; 26 import soot.jimple.*; 27 import soot.util.queue.*; 28 29 30 public class UnreachableMethodsTagger extends SceneTransformer 31 { 32 public UnreachableMethodsTagger(Singletons.Global g){} 33 public static UnreachableMethodsTagger v() { return G.v().soot_jimple_toolkits_annotation_methods_UnreachableMethodsTagger();} 34 35 protected void internalTransform(String phaseName, Map options){ 36 37 ArrayList methodList = new ArrayList(); 39 40 Iterator getClassesIt = Scene.v().getApplicationClasses().iterator(); 41 while (getClassesIt.hasNext()) { 42 SootClass appClass = (SootClass)getClassesIt.next(); 43 44 Iterator getMethodsIt = appClass.getMethods().iterator(); 45 while (getMethodsIt.hasNext()) { 46 SootMethod method = (SootMethod)getMethodsIt.next(); 47 if (!Scene.v().getReachableMethods().contains(method)){ 49 methodList.add(method); 50 } 51 } 52 } 53 54 Iterator unusedIt = methodList.iterator(); 56 while (unusedIt.hasNext()) { 57 SootMethod unusedMethod = (SootMethod)unusedIt.next(); 58 unusedMethod.addTag(new StringTag("Method "+unusedMethod.getName()+" is not reachable!", "Unreachable Methods")); 59 unusedMethod.addTag(new ColorTag(255,0,0,true, "Unreachable Methods")); 60 62 } 63 } 64 65 } 66 67 68 | Popular Tags |