Package edu.umd.cs.findbugs.plan
Class ExecutionPlan
- java.lang.Object
-
- edu.umd.cs.findbugs.plan.ExecutionPlan
-
public class ExecutionPlan extends java.lang.ObjectA plan for executing Detectors on an application. Automatically assigns Detectors to passes and orders Detectors within each pass based on ordering constraints specified in the plugin descriptor(s).
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Set<DetectorFactory>assignedToPassSetstatic booleanDEBUGprivate DetectorFactoryChooserfactoryChooserprivate java.util.Map<java.lang.String,DetectorFactory>factoryMapprivate java.util.List<DetectorOrderingConstraint>interPassConstraintListprivate java.util.List<DetectorOrderingConstraint>intraPassConstraintListprivate java.util.LinkedList<AnalysisPass>passListprivate java.util.List<Plugin>pluginList
-
Constructor Summary
Constructors Constructor Description ExecutionPlan()Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private DetectorNodeaddOrCreateDetectorNode(DetectorFactory factory, java.util.Map<java.lang.String,DetectorNode> nodeMap, ConstraintGraph constraintGraph)private java.util.Set<DetectorNode>addOrCreateDetectorNodes(DetectorFactorySelector selector, java.util.Map<java.lang.String,DetectorNode> nodeMap, java.util.Set<DetectorFactory> factorySet, ConstraintGraph constraintGraph)private voidaddPass(AnalysisPass pass)voidaddPlugin(Plugin plugin)Add a Plugin whose Detectors should be added to the execution plan.private voidappendDetectorsToPass(java.util.Collection<DetectorFactory> detectorSet, AnalysisPass pass)private voidappendToPass(DetectorFactory factory, AnalysisPass pass)Append a DetectorFactory to the end position in an AnalysisPass.private voidassignToPass(DetectorFactory factory, AnalysisPass pass)Make a DetectorFactory a member of an AnalysisPass.voidbuild()Build the execution plan.private ConstraintGraphbuildConstraintGraph(java.util.Map<java.lang.String,DetectorNode> nodeMap, java.util.Set<DetectorFactory> factorySet, java.util.List<DetectorOrderingConstraint> constraintList)Build a constraint graph.private voidbuildPassList(ConstraintGraph constraintGraph)private static <T> voidcopyTo(java.util.Iterator<T> iter, java.util.Collection<T> dest)private voidcreateConstraintEdges(ConstraintGraph result, java.util.Set<DetectorNode> earlierSet, java.util.Set<DetectorNode> laterSet, DetectorOrderingConstraint constraint)voiddispose()private voiddumpGraph(ConstraintGraph graph)DetectorFactoryChoosergetFactoryChooser()intgetNumPasses()Get the number of passes in the execution plan.private java.util.Set<DetectorFactory>getUnassignedSet()booleanisActive(java.lang.Class<? extends Detector> detectorClass)booleanisActive(java.lang.String detectorClass)static voidmain(java.lang.String[] argv)java.util.Iterator<AnalysisPass>passIterator()Get an Iterator over the AnalysisPasses.private voidprint()private java.util.Set<DetectorFactory>selectDetectors(DetectorFactorySelector selector, java.util.Set<DetectorFactory> candidateSet)voidsetDetectorFactoryChooser(DetectorFactoryChooser factoryChooser)Set the DetectorFactoryChooser to use to select which detectors to enable.private voidsortPass(java.util.List<DetectorOrderingConstraint> constraintList, java.util.Map<java.lang.String,DetectorFactory> factoryMap, AnalysisPass pass)
-
-
-
Field Detail
-
DEBUG
public static final boolean DEBUG
-
pluginList
private java.util.List<Plugin> pluginList
-
factoryChooser
private DetectorFactoryChooser factoryChooser
-
passList
private java.util.LinkedList<AnalysisPass> passList
-
factoryMap
private java.util.Map<java.lang.String,DetectorFactory> factoryMap
-
interPassConstraintList
private java.util.List<DetectorOrderingConstraint> interPassConstraintList
-
intraPassConstraintList
private java.util.List<DetectorOrderingConstraint> intraPassConstraintList
-
assignedToPassSet
private java.util.Set<DetectorFactory> assignedToPassSet
-
-
Method Detail
-
dispose
public void dispose()
-
setDetectorFactoryChooser
public void setDetectorFactoryChooser(DetectorFactoryChooser factoryChooser)
Set the DetectorFactoryChooser to use to select which detectors to enable. This must be called before any Plugins are added to the execution plan.
-
isActive
public boolean isActive(@DottedClassName java.lang.String detectorClass)
-
isActive
public boolean isActive(java.lang.Class<? extends Detector> detectorClass)
-
addPlugin
public void addPlugin(Plugin plugin) throws OrderingConstraintException
Add a Plugin whose Detectors should be added to the execution plan.- Throws:
OrderingConstraintException
-
build
public void build() throws OrderingConstraintExceptionBuild the execution plan. Using the ordering constraints specified in the plugin descriptor(s), assigns Detectors to passes and orders the Detectors within those passes.- Throws:
OrderingConstraintException
-
passIterator
public java.util.Iterator<AnalysisPass> passIterator()
Get an Iterator over the AnalysisPasses.
-
getNumPasses
public int getNumPasses()
Get the number of passes in the execution plan.- Returns:
- the number of passes in the execution plan
-
copyTo
private static <T> void copyTo(java.util.Iterator<T> iter, java.util.Collection<T> dest)
-
buildConstraintGraph
private ConstraintGraph buildConstraintGraph(java.util.Map<java.lang.String,DetectorNode> nodeMap, java.util.Set<DetectorFactory> factorySet, java.util.List<DetectorOrderingConstraint> constraintList)
Build a constraint graph. This represents ordering constraints between Detectors. A topological sort of the constraint graph will yield a correct ordering of the detectors (which may mean either passes or an ordering within a single pass, depending on whether the constraints are inter-pass or intra-pass).- Parameters:
nodeMap- map to be populated with detector class names to constraint graph nodes for those detectorsfactorySet- build the graph using these DetectorFactories as nodesconstraintList- List of ordering constraints- Returns:
- the ConstraintGraph
-
selectDetectors
private java.util.Set<DetectorFactory> selectDetectors(DetectorFactorySelector selector, java.util.Set<DetectorFactory> candidateSet)
-
addOrCreateDetectorNodes
private java.util.Set<DetectorNode> addOrCreateDetectorNodes(DetectorFactorySelector selector, java.util.Map<java.lang.String,DetectorNode> nodeMap, java.util.Set<DetectorFactory> factorySet, ConstraintGraph constraintGraph)
-
addOrCreateDetectorNode
private DetectorNode addOrCreateDetectorNode(DetectorFactory factory, java.util.Map<java.lang.String,DetectorNode> nodeMap, ConstraintGraph constraintGraph)
-
createConstraintEdges
private void createConstraintEdges(ConstraintGraph result, java.util.Set<DetectorNode> earlierSet, java.util.Set<DetectorNode> laterSet, DetectorOrderingConstraint constraint)
-
buildPassList
private void buildPassList(ConstraintGraph constraintGraph) throws OrderingConstraintException
- Throws:
OrderingConstraintException
-
addPass
private void addPass(AnalysisPass pass)
-
sortPass
private void sortPass(java.util.List<DetectorOrderingConstraint> constraintList, java.util.Map<java.lang.String,DetectorFactory> factoryMap, AnalysisPass pass) throws OrderingConstraintException
- Throws:
OrderingConstraintException
-
getUnassignedSet
private java.util.Set<DetectorFactory> getUnassignedSet()
-
assignToPass
private void assignToPass(DetectorFactory factory, AnalysisPass pass)
Make a DetectorFactory a member of an AnalysisPass.
-
appendToPass
private void appendToPass(DetectorFactory factory, AnalysisPass pass)
Append a DetectorFactory to the end position in an AnalysisPass. The DetectorFactory must be a member of the pass.
-
appendDetectorsToPass
private void appendDetectorsToPass(java.util.Collection<DetectorFactory> detectorSet, AnalysisPass pass)
-
print
private void print()
-
dumpGraph
private void dumpGraph(ConstraintGraph graph)
-
main
public static void main(java.lang.String[] argv) throws java.lang.Exception- Throws:
java.lang.Exception
-
getFactoryChooser
@NonNull public DetectorFactoryChooser getFactoryChooser()
- Returns:
- Returns the factoryChooser used during analysis.
-
-