package kr.ac.snu.selab.soot.analyzer; import java.util.ArrayList; import java.util.List; import java.util.Map; import kr.ac.snu.selab.soot.core.AbstractProject; import soot.Body; import soot.BodyTransformer; import soot.Hierarchy; import soot.Scene; import soot.SootClass; public abstract class AbstractAnalyzer extends BodyTransformer { private static boolean touch = false; protected AbstractProject project; protected String outputDirectory; public AbstractAnalyzer(AbstractProject project) { this.project = project; this.outputDirectory = project.getOutputDirectory().getAbsolutePath(); } @SuppressWarnings("rawtypes") @Override protected final void internalTransform(Body b, String phaseName, Map options) { if (touch) return; touch = true; preAnalysis(); Hierarchy hierarchy = Scene.v().getActiveHierarchy(); List<SootClass> classList = new ArrayList<SootClass>(); classList.addAll(Scene.v().getApplicationClasses()); analyze(classList, hierarchy); //******* This part should be reflected in other analyzer and analysis classes to use soot call graph //analyze(classList, hierarchy, cg); //******* postAnalysis(); } protected void preAnalysis() { } protected void postAnalysis() { } protected void analyze(List<SootClass> classList, Hierarchy hierarchy) { } }