| 1 19 20 package soot.jimple.toolkits.annotation.liveness; 21 22 import soot.*; 23 import soot.toolkits.scalar.*; 24 import soot.toolkits.graph.*; 25 import soot.tagkit.*; 26 import java.util.*; 27 import soot.jimple.*; 28 29 public class LiveVarsTagger extends BodyTransformer { 30 31 32 public LiveVarsTagger(Singletons.Global g) {} 33 public static LiveVarsTagger v() { return G.v().soot_jimple_toolkits_annotation_liveness_LiveVarsTagger();} 34 35 protected void internalTransform(Body b, String phaseName, Map options){ 36 37 LiveLocals sll = new SimpleLiveLocals(new ExceptionalUnitGraph(b)); 38 39 Iterator it = b.getUnits().iterator(); 40 while (it.hasNext()){ 41 Stmt s = (Stmt)it.next(); 42 Iterator liveLocalsIt = sll.getLiveLocalsAfter(s).iterator(); 44 while (liveLocalsIt.hasNext()){ 45 Value v = (Value)liveLocalsIt.next(); 46 s.addTag(new StringTag("Live Variable: "+v, "Live Variable")); 47 48 Iterator usesIt = s.getUseBoxes().iterator(); 49 while (usesIt.hasNext()){ 50 ValueBox use = (ValueBox)usesIt.next(); 51 if (use.getValue().equals(v)){ 52 use.addTag(new ColorTag(ColorTag.GREEN, "Live Variable")); 53 } 54 } 55 Iterator defsIt = s.getDefBoxes().iterator(); 56 while (defsIt.hasNext()){ 57 ValueBox def = (ValueBox)defsIt.next(); 58 if (def.getValue().equals(v)){ 59 def.addTag(new ColorTag(ColorTag.GREEN, "Live Variable")); 60 } 61 } 62 } 63 } 64 } 65 } 66 | Popular Tags |