Package edu.umd.cs.findbugs.plan
Class ExecutionPlan
- java.lang.Object
-
- edu.umd.cs.findbugs.plan.ExecutionPlan
-
public class ExecutionPlan extends java.lang.Object
A 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>
assignedToPassSet
static boolean
DEBUG
private DetectorFactoryChooser
factoryChooser
private java.util.Map<java.lang.String,DetectorFactory>
factoryMap
private java.util.List<DetectorOrderingConstraint>
interPassConstraintList
private java.util.List<DetectorOrderingConstraint>
intraPassConstraintList
private java.util.LinkedList<AnalysisPass>
passList
private 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 DetectorNode
addOrCreateDetectorNode(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 void
addPass(AnalysisPass pass)
void
addPlugin(Plugin plugin)
Add a Plugin whose Detectors should be added to the execution plan.private void
appendDetectorsToPass(java.util.Collection<DetectorFactory> detectorSet, AnalysisPass pass)
private void
appendToPass(DetectorFactory factory, AnalysisPass pass)
Append a DetectorFactory to the end position in an AnalysisPass.private void
assignToPass(DetectorFactory factory, AnalysisPass pass)
Make a DetectorFactory a member of an AnalysisPass.void
build()
Build the execution plan.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.private void
buildPassList(ConstraintGraph constraintGraph)
private static <T> void
copyTo(java.util.Iterator<T> iter, java.util.Collection<T> dest)
private void
createConstraintEdges(ConstraintGraph result, java.util.Set<DetectorNode> earlierSet, java.util.Set<DetectorNode> laterSet, DetectorOrderingConstraint constraint)
void
dispose()
private void
dumpGraph(ConstraintGraph graph)
int
getNumPasses()
Get the number of passes in the execution plan.private java.util.Set<DetectorFactory>
getUnassignedSet()
boolean
isActive(java.lang.Class<? extends Detector> detectorClass)
boolean
isActive(java.lang.String detectorClass)
static void
main(java.lang.String[] argv)
java.util.Iterator<AnalysisPass>
passIterator()
Get an Iterator over the AnalysisPasses.private void
print()
private java.util.Set<DetectorFactory>
selectDetectors(DetectorFactorySelector selector, java.util.Set<DetectorFactory> candidateSet)
void
setDetectorFactoryChooser(DetectorFactoryChooser factoryChooser)
Set the DetectorFactoryChooser to use to select which detectors to enable.private void
sortPass(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 OrderingConstraintException
Build 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
-
-