package edu.umd.cs.findbugs.classfile.engine.bcel;
import org.apache.bcel.generic.MethodGen;
import edu.umd.cs.findbugs.ba.constant.ConstantAnalysis;
import edu.umd.cs.findbugs.ba.constant.ConstantDataflow;
import edu.umd.cs.findbugs.classfile.CheckedAnalysisException;
import edu.umd.cs.findbugs.classfile.IAnalysisCache;
import edu.umd.cs.findbugs.classfile.MethodDescriptor;
/**
* Analysis engine to produce ConstantDataflow objects for an analyzed method.
*
* @author David Hovemeyer
*/
public class ConstantDataflowFactory extends AnalysisFactory<ConstantDataflow> {
public ConstantDataflowFactory() {
super("constant propagation analysis", ConstantDataflow.class);
}
/*
* (non-Javadoc)
*
* @see
* edu.umd.cs.findbugs.classfile.IAnalysisEngine#analyze(edu.umd.cs.findbugs
* .classfile.IAnalysisCache, java.lang.Object)
*/
public ConstantDataflow analyze(IAnalysisCache analysisCache, MethodDescriptor descriptor) throws CheckedAnalysisException {
MethodGen methodGen = getMethodGen(analysisCache, descriptor);
if (methodGen == null)
return null;
ConstantAnalysis analysis = new ConstantAnalysis(methodGen, getDepthFirstSearch(analysisCache, descriptor));
ConstantDataflow dataflow = new ConstantDataflow(getCFG(analysisCache, descriptor), analysis);
dataflow.execute();
return dataflow;
}
}