1 19 20 25 26 27 package soot; 28 29 import java.util.*; 30 import soot.util.*; 31 import soot.options.Options; 32 33 35 public class Transform implements HasPhaseOptions 36 { 37 final private boolean DEBUG = true; 38 String phaseName; 39 Transformer t; 40 41 public Transform(String phaseName, Transformer t) 42 { 43 this.phaseName = phaseName; 44 this.t = t; 45 } 46 47 public String getPhaseName() { return phaseName; } 48 public Transformer getTransformer() { return t; } 49 50 private String declaredOpts; 51 private String defaultOpts; 52 public String getDeclaredOptions() { 53 if( declaredOpts != null ) return declaredOpts; 54 return Options.getDeclaredOptionsForPhase( phaseName ); 55 } 56 public String getDefaultOptions() { 57 if( defaultOpts != null ) return defaultOpts; 58 return Options.getDefaultOptionsForPhase( phaseName ); 59 } 60 61 66 public void setDeclaredOptions( String options ) { 67 declaredOpts = options; 68 } 69 70 75 public void setDefaultOptions( String options ) { 76 defaultOpts = options; 77 } 78 79 public void apply() { 80 Map options = PhaseOptions.v().getPhaseOptions( phaseName ); 81 if( PhaseOptions.getBoolean( options, "enabled" ) ) { 82 if( Options.v().verbose() ) { 83 G.v().out.println( "Applying phase "+phaseName+" to the scene." ); 84 } 85 } 86 if (DEBUG) 87 PhaseDumper.v().dumpBefore(getPhaseName()); 88 89 ((SceneTransformer) t).transform( phaseName, options ); 90 91 if (DEBUG) 92 PhaseDumper.v().dumpAfter(getPhaseName()); 93 } 94 public void apply(Body b) { 95 Map options = PhaseOptions.v().getPhaseOptions( phaseName ); 96 if( PhaseOptions.getBoolean( options, "enabled" ) ) { 97 if( Options.v().verbose() ) { 98 G.v().out.println( "Applying phase "+phaseName+" to "+b.getMethod()+"." ); 99 } 100 } 101 if (DEBUG) 102 PhaseDumper.v().dumpBefore(b, getPhaseName()); 103 104 ((BodyTransformer) t).transform( b, phaseName, options ); 105 106 if (DEBUG) 107 PhaseDumper.v().dumpAfter(b, getPhaseName()); 108 } 109 } 110 | Popular Tags |