Class AbstractFlowAnalysis<N,​A>

  • Type Parameters:
    N - node type of the directed graph
    A - abstraction type
    Direct Known Subclasses:
    BranchedFlowAnalysis, FlowAnalysis

    public abstract class AbstractFlowAnalysis<N,​A>
    extends Object
    An abstract class providing a meta-framework for carrying out dataflow analysis. This class provides common methods and fields required by the BranchedFlowAnalysis and FlowAnalysis abstract classes.
    • Field Detail

      • graph

        protected final DirectedGraph<N> graph
        The graph being analysed.
      • unitToBeforeFlow

        protected final Map<N,​A> unitToBeforeFlow
        Maps graph nodes to IN sets.
      • filterUnitToBeforeFlow

        protected Map<N,​A> filterUnitToBeforeFlow
        Filtered: Maps graph nodes to IN sets.
    • Constructor Detail

      • AbstractFlowAnalysis

        public AbstractFlowAnalysis​(DirectedGraph<N> graph)
        Constructs a flow analysis on the given DirectedGraph.
    • Method Detail

      • newInitialFlow

        protected abstract A newInitialFlow()
        Returns the flow object corresponding to the initial values for each graph node.
      • entryInitialFlow

        protected A entryInitialFlow()
        Returns the initial flow value for entry/exit graph nodes. This is equal to newInitialFlow()
      • treatTrapHandlersAsEntries

        protected boolean treatTrapHandlersAsEntries()
        Determines whether entryInitialFlow() is applied to trap handlers.
      • isForward

        protected abstract boolean isForward()
        Returns true if this analysis is forwards.
      • merge

        protected abstract void merge​(A in1,
                                      A in2,
                                      A out)
        Compute the merge of the in1 and in2 sets, putting the result into out. The behavior of this function depends on the implementation ( it may be necessary to check whether in1 and in2 are equal or aliased ). Used by the doAnalysis method.
      • merge

        protected void merge​(N succNode,
                             A in1,
                             A in2,
                             A out)
        Merges in1 and in2 into out, just before node succNode. By default, this method just calls merge(A,A,A), ignoring the node.
      • copy

        protected abstract void copy​(A source,
                                     A dest)
        Creates a copy of the source flow object in dest.
      • doAnalysis

        protected abstract void doAnalysis()
        Carries out the actual flow analysis. Typically called from a concrete FlowAnalysis's constructor.
      • getFlowBefore

        public A getFlowBefore​(N s)
        Accessor function returning value of IN set for s.
      • mergeInto

        protected void mergeInto​(N succNode,
                                 A inout,
                                 A in)
        Merges in into inout, just before node succNode.