1 19 20 package soot.jimple.toolkits.annotation.fields; 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 UnreachableFieldsTagger extends SceneTransformer 31 { 32 public UnreachableFieldsTagger (Singletons.Global g) {} 33 public static UnreachableFieldsTagger v() { return G.v().soot_jimple_toolkits_annotation_fields_UnreachableFieldsTagger();} 34 35 protected void internalTransform(String phaseName, Map options){ 36 37 ArrayList fieldList = new ArrayList(); 39 40 Iterator getClassesIt = Scene.v().getApplicationClasses().iterator(); 41 while (getClassesIt.hasNext()) { 42 SootClass appClass = (SootClass)getClassesIt.next(); 43 Iterator getFieldsIt = appClass.getFields().iterator(); 45 while (getFieldsIt.hasNext()) { 46 SootField field = (SootField)getFieldsIt.next(); 47 fieldList.add(field); 49 } 50 } 51 52 getClassesIt = Scene.v().getApplicationClasses().iterator(); 54 while (getClassesIt.hasNext()) { 55 SootClass appClass = (SootClass)getClassesIt.next(); 56 Iterator mIt = appClass.getMethods().iterator(); 57 while (mIt.hasNext()) { 58 SootMethod sm = (SootMethod)mIt.next(); 59 if (!sm.hasActiveBody()) continue; 61 if (!Scene.v().getReachableMethods().contains(sm)) continue; 62 Body b = sm.getActiveBody(); 63 64 Iterator usesIt = b.getUseBoxes().iterator(); 65 while (usesIt.hasNext()) { 66 ValueBox vBox = (ValueBox)usesIt.next(); 67 Value v = vBox.getValue(); 68 if (v instanceof FieldRef) { 69 FieldRef fieldRef = (FieldRef)v; 70 SootField f = fieldRef.getField(); 71 72 if (fieldList.contains(f)) { 73 int index = fieldList.indexOf(f); 74 fieldList.remove(index); 75 } 77 78 } 79 } 80 81 } 82 } 83 84 Iterator unusedIt = fieldList.iterator(); 86 while (unusedIt.hasNext()) { 87 SootField unusedField = (SootField)unusedIt.next(); 88 unusedField.addTag(new StringTag("Field "+unusedField.getName()+" is not used!", "Unreachable Fields")); 89 unusedField.addTag(new ColorTag(ColorTag.RED, true, "Unreachable Fields")); 90 92 } 93 } 94 95 } 96 97 98 | Popular Tags |