KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > NullnessDriver


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 JavaDoc[] 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 JavaDoc phaseName,
28                                      java.util.Map JavaDoc options)
29     {
30         NullnessAnalysis na = new NullnessAnalysis(new BriefUnitGraph(b));
31
32         java.util.Iterator JavaDoc uIt = b.getUnits().iterator();
33         while (uIt.hasNext())
34         {
35             Unit u = (Unit)uIt.next();
36
37             StringBuffer JavaDoc n = new StringBuffer JavaDoc();
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