1 19 20 import soot.*; 21 import soot.tagkit.*; 22 import soot.toolkits.graph.*; 23 import java.util.*; 24 import soot.toolkits.scalar.*; 25 import soot.jimple.*; 26 27 public class NullnessAnalysisColorer extends BodyTransformer { 28 protected void internalTransform (Body b, String phaseName, Map options) { 29 NullnessAnalysis analysis = new NullnessAnalysis 30 (new CompleteUnitGraph(b)); 31 32 Iterator it = b.getUnits().iterator(); 33 34 while (it.hasNext()) { 35 Stmt s = (Stmt)it.next(); 36 37 Iterator usesIt = s.getUseBoxes().iterator(); 38 FlowSet beforeSet = (FlowSet)analysis.getFlowBefore(s); 39 40 while (usesIt.hasNext()) { 41 ValueBox vBox = (ValueBox)usesIt.next(); 42 addColorTags(vBox, beforeSet, s, analysis); 43 } 44 45 Iterator defsIt = s.getDefBoxes().iterator(); 46 FlowSet afterSet = (FlowSet)analysis.getFallFlowAfter(s); 47 48 while (defsIt.hasNext()){ 49 ValueBox vBox = (ValueBox)defsIt.next(); 50 addColorTags(vBox, afterSet, s, analysis); 51 } 52 } 53 } 54 55 private void addColorTags(ValueBox vBox, FlowSet set, 56 Stmt s, NullnessAnalysis analysis) { 57 Value val = vBox.getValue(); 58 if (val.getType() instanceof RefLikeType && 59 ((ArraySparseSet)set).contains(val)) 60 vBox.addTag(new ColorTag(ColorTag.GREEN)); 61 } 62 } 63
| Popular Tags
|