Class FlowAnalysis<N,​A>

  • Direct Known Subclasses:
    BackwardFlowAnalysis, ForwardFlowAnalysis

    public abstract class FlowAnalysis<N,​A>
    extends AbstractFlowAnalysis<N,​A>
    An abstract class providing a framework for carrying out dataflow analysis. Subclassing either BackwardFlowAnalysis or ForwardFlowAnalysis and providing implementations for the abstract methods will allow Soot to compute the corresponding flow analysis.
    • Field Detail

      • unitToAfterFlow

        protected final Map<N,​A> unitToAfterFlow
        Maps graph nodes to OUT sets.
      • filterUnitToAfterFlow

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

      • FlowAnalysis

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

      • flowThrough

        protected abstract void flowThrough​(A in,
                                            N d,
                                            A out)
        Given the merge of the out sets, compute the in set for s (or in to out, depending on direction). This function often causes confusion, because the same interface is used for both forward and backward flow analyses. The first parameter is always the argument to the flow function (i.e. it is the "in" set in a forward analysis and the "out" set in a backward analysis), and the third parameter is always the result of the flow function (i.e. it is the "out" set in a forward analysis and the "in" set in a backward analysis).
        Parameters:
        in - the input flow
        d - the current node
        out - the returned flow
      • getFlowAfter

        public A getFlowAfter​(N s)
        Accessor function returning value of OUT set for s.
      • omissible

        protected boolean omissible​(N n)
        If a flow node can be omitted return true, otherwise false. There is no guarantee a node will be omitted. A omissible node does not influence the result of an analysis. If you are unsure, don't overwrite this method
        Parameters:
        n - the node to check
        Returns:
        false
      • getFlow

        protected FlowAnalysis.Flow getFlow​(N from,
                                            N mergeNode)
        You can specify which flow set you would like to use of node from
        Parameters:
        from -
        mergeNode -
        Returns:
        Flow.OUT
      • copyFreshToExisting

        protected void copyFreshToExisting​(A in,
                                           A dest)
        Copies a *fresh* copy of in to dest. The input is not referenced somewhere else. This allows subclasses for a smarter and faster copying.
        Parameters:
        in -
        dest -