import soot.*;
import soot.tagkit.*;

import soot.toolkits.scalar.*;
import soot.toolkits.graph.BriefUnitGraph;
import java.util.*;

public class AnalysisDriver{

	public static void main(String[] args){
		Pack jtp = soot.PackManager.v().getPack("jtp");
		jtp.add(new Transform("jtp.ad", new ExampleTransformer()));

		soot.Main.main(args);
	}
}

class ExampleTransformer extends BodyTransformer{

	protected void internalTransform(Body b, String phase, Map opts){
		<FlowAnalysisClass> analysis = new <FlowAnalysisClass>(new BriefUnitGraph(b));

		Iterator units = b.getUnits().iterator();

		while(units.hasNext()){
			Unit u = (Unit) units.next();
			FlowSet before = (FlowSet) analysis.getFlowBefore(u);
			FlowSet after = (FlowSet) analysis.getFlowAfter(u);

      /* add tags here, based on information in
      *  before and after flow sets */
		}
	}
}
