1 19 20 25 26 package soot.tagkit; 27 import soot.*; 28 import soot.baf.BafBody; 29 import java.util.*; 30 31 32 33 public abstract class TagAggregator extends BodyTransformer { 34 protected LinkedList tags = new LinkedList(); 35 protected LinkedList units = new LinkedList(); 36 37 38 public abstract boolean wantTag( Tag t ); 39 40 public abstract void considerTag( Tag t, Unit u ); 41 42 43 public abstract String aggregatedName(); 44 45 protected void internalTransform(Body b, String phaseName, Map options) 46 { 47 BafBody body = (BafBody) b; 48 49 50 tags.clear(); 51 units.clear(); 52 53 54 for( Iterator unitIt = body.getUnits().iterator(); unitIt.hasNext(); ) { 55 final Unit unit = (Unit) unitIt.next(); 56 for( Iterator tagIt = unit.getTags().iterator(); tagIt.hasNext(); ) { 57 final Tag tag = (Tag) tagIt.next(); 58 if( wantTag( tag ) ) considerTag( tag, unit ); 59 } 60 } 61 62 if(units.size() > 0) { 63 b.addTag( new CodeAttribute(aggregatedName(), 64 new LinkedList(units), new LinkedList(tags)) ); 65 } 66 fini(); 67 } 68 69 70 public void fini() {} 71 72 73 } 74 | Popular Tags |