| 1 19 20 package soot.jimple.toolkits.annotation; 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.options.*; 28 import soot.util.*; 29 import soot.jimple.toolkits.pointer.*; 30 import soot.jimple.toolkits.scalar.*; 31 32 34 public class DominatorsTagger extends BodyTransformer 35 { 36 public DominatorsTagger( Singletons.Global g ) {} 37 public static DominatorsTagger v() { return G.v().soot_jimple_toolkits_annotation_DominatorsTagger(); } 38 39 protected void internalTransform( 40 Body b, String phaseName, Map opts) 41 { 42 43 44 DominatorAnalysis analysis = new DominatorAnalysis(new ExceptionalUnitGraph(b)); 45 Iterator it = b.getUnits().iterator(); 46 while (it.hasNext()){ 47 Stmt s = (Stmt)it.next(); 48 FlowSet dominators = (FlowSet)analysis.getFlowAfter(s); 49 Iterator dIt = dominators.iterator(); 50 while (dIt.hasNext()){ 51 Stmt ds = (Stmt)dIt.next(); 52 String info = ds+" dominates "+s; 53 s.addTag(new LinkTag(info, ds, b.getMethod().getDeclaringClass().getName(), "Dominators")); 54 } 55 } 56 } 57 } 58 59 60 | Popular Tags |