1 import soot.Body; 2 import soot.Main; 3 import soot.Pack; 4 import soot.PackManager; 5 import soot.Transform; 6 import soot.Unit; 7 8 import soot.tagkit.StringTag; 9 10 import soot.toolkits.scalar.ArraySparseSet; 11 import soot.toolkits.graph.BriefUnitGraph; 12 13 public class NullnessDriver 14 { 15 public static void main(String [] argv) 16 { 17 Pack jtp = soot.G.v().PackManager().getPack("jtp"); 18 jtp.add(new Transform("jtp.nt", new NullTransformer())); 19 jtp.add(new Transform("jtp.nac", new NullnessAnalysisColorer())); 20 21 soot.Main.main(argv); 22 } 23 } 24 25 class NullTransformer extends soot.BodyTransformer 26 { 27 protected void internalTransform(Body b, String phaseName, 28 java.util.Map options) 29 { 30 NullnessAnalysis na = new NullnessAnalysis(new BriefUnitGraph(b)); 31 32 java.util.Iterator uIt = b.getUnits().iterator(); 33 while (uIt.hasNext()) 34 { 35 Unit u = (Unit)uIt.next(); 36 37 StringBuffer n = new StringBuffer (); 38 u.addTag(new StringTag("IN: "+na.getFlowBefore(u).toString())); 39 40 if (u.fallsThrough()) 41 { 42 ArraySparseSet s = (ArraySparseSet)na.getFallFlowAfter(u); 43 u.addTag(new StringTag("FALL: "+s.toString())); 44 } 45 if (u.branches()) 46 { 47 ArraySparseSet t = (ArraySparseSet)na. 48 getBranchFlowAfter(u).get(0); 49 u.addTag(new StringTag("BRANCH: "+t.toString())); 50 } 51 } 52 } 53 } 54 | Popular Tags |