Class Dataflow<Fact,AnalysisType extends DataflowAnalysis<Fact>>

java.lang.Object
edu.umd.cs.findbugs.ba.Dataflow<Fact,AnalysisType>
Direct Known Subclasses:
AbstractDataflow, BlockTypeDataflow, CallListDataflow, ConstantDataflow, LiveLocalStoreDataflow, LockDataflow, ObligationDataflow, ReturnPathDataflow, ReturnPathTypeDataflow, TypeDataflow, TypeQualifierDataflow

public class Dataflow<Fact,AnalysisType extends DataflowAnalysis<Fact>> extends Object
Perform dataflow analysis on a method using a control flow graph. Both forward and backward analyses can be performed.
  • The "start" point of each block is the entry (forward analyses) or the exit (backward analyses).
  • The "result" point of each block is the exit (forward analyses) or the entry (backward analyses).
The analysis's transfer function is applied to transform the meet of the results of the block's logical predecessors (the block's start facts) into the block's result facts.
Author:
David Hovemeyer
See Also:
  • Field Details

    • DEBUG

      public static boolean DEBUG
  • Constructor Details

    • Dataflow

      public Dataflow(CFG cfg, AnalysisType analysis)
      Constructor.
      Parameters:
      cfg - the control flow graph
      analysis - the DataflowAnalysis to be run
  • Method Details

    • execute

      public void execute() throws DataflowAnalysisException
      Run the algorithm. Afterwards, caller can use the getStartFact() and getResultFact() methods to to get dataflow facts at start and result points of each block.
      Throws:
      DataflowAnalysisException
    • getNumIterations

      public int getNumIterations()
      Return the number of iterations of the main execution loop.
    • getStartFact

      public Fact getStartFact(BasicBlock block)
      Get dataflow facts for start of given block.
    • getResultFact

      public Fact getResultFact(BasicBlock block)
      Get dataflow facts for end of given block.
    • getFactAtLocation

      public Fact getFactAtLocation(Location location) throws DataflowAnalysisException
      Get dataflow fact at (just before) given Location. Note "before" is meant in the logical sense, so for backward analyses, before means after the location in the control flow sense.
      Parameters:
      location - the Location
      Returns:
      the dataflow value at given Location
      Throws:
      DataflowAnalysisException
    • getFactAfterLocation

      public Fact getFactAfterLocation(Location location) throws DataflowAnalysisException
      Get the dataflow fact representing the point just after given Location. Note "after" is meant in the logical sense, so for backward analyses, after means before the location in the control flow sense.
      Parameters:
      location - the Location
      Returns:
      the dataflow value after given Location
      Throws:
      DataflowAnalysisException
    • getFactOnEdge

      public Fact getFactOnEdge(Edge edge) throws DataflowAnalysisException
      Get the fact that is true on the given control edge.
      Parameters:
      edge - the edge
      Returns:
      the fact that is true on the edge
      Throws:
      DataflowAnalysisException
    • getAnalysis

      public AnalysisType getAnalysis()
      Get the analysis object.
    • getCFG

      public CFG getCFG()
      Get the CFG object.
    • dumpDataflow

      public void dumpDataflow(AnalysisType analysis)