Class CompleteUnitGraph

  • All Implemented Interfaces:
    Iterable<Unit>, DirectedBodyGraph<Unit>, DirectedGraph<Unit>, ExceptionalGraph<Unit>

    public class CompleteUnitGraph
    extends ExceptionalUnitGraph

    Represents a CFG for a Body instance where the nodes are Unit instances, and where control flow associated with exceptions is taken into account. In a CompleteUnitGraph, every Unit covered by a Trap is considered to have the potential to throw an exception caught by the Trap, so there are edges to the Trap's handler from every trapped Unit , as well as from all the predecessors of the trapped Units.

    This implementation of CompleteUnitGraph is included for backwards compatibility (new code should use ExceptionalUnitGraph), but the graphs it produces are not necessarily identical to the graphs produced by the implementation of CompleteUnitGraph provided by versions of Soot up to and including release 2.1.0. The known differences include:

    • If a Body includes Units which branch into the middle of the region protected by a Trap this implementation of CompleteUnitGraph will include edges from those branching Units to the Trap's handler (since the branches are predecessors of an instruction which may throw an exception caught by the Trap). The 2.1.0 implementation of CompleteUnitGraph mistakenly omitted these edges.
    • If the initial Unit in the Body might throw an exception caught by a Trap within the body, this implementation will include the initial handler Unit in the list returned by getHeads() (since the handler unit might be the first Unit in the method to execute to completion). The 2.1.0 implementation of CompleteUnitGraph mistakenly omitted the handler from the set of heads.

    • Constructor Detail

      • CompleteUnitGraph

        public CompleteUnitGraph​(Body b)