Class ControlFlowGraph

    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> convertedTreeLookup
      Map from AST Trees to post-conversion sets of Nodes.
      protected java.util.List<com.sun.source.tree.ClassTree> declaredClasses
      Class declarations that have been encountered when building the control-flow graph for a method.
      protected java.util.List<com.sun.source.tree.LambdaExpressionTree> declaredLambdas
      Lambdas encountered when building the control-flow graph for a method, variable initializer, or initializer.
      protected SpecialBlock entryBlock
      The entry block of the control flow graph.
      protected SpecialBlock exceptionalExitBlock
      The exceptional exit block of the control flow graph.
      protected java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,​com.sun.source.tree.BinaryTree> postfixNodeLookup
      Map from postfix increment or decrement trees that are AST UnaryTrees to the synthetic tree that is v + 1 or v - 1.
      protected SpecialBlock regularExitBlock
      The regular exit block of the control flow graph.
      protected java.util.List<ReturnNode> returnNodes
      All return nodes (if any) encountered.
      protected java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> treeLookup
      Maps from AST Trees to sets of Nodes.
      UnderlyingAST underlyingAST
      The AST this CFG corresponds to.
    • Constructor Summary

      Constructors 
      Constructor Description
      ControlFlowGraph​(SpecialBlock entryBlock, SpecialBlockImpl regularExitBlock, SpecialBlockImpl exceptionalExitBlock, UnderlyingAST underlyingAST, java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> treeLookup, java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> convertedTreeLookup, java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,​com.sun.source.tree.BinaryTree> postfixNodeLookup, java.util.List<ReturnNode> returnNodes, java.util.List<com.sun.source.tree.ClassTree> declaredClasses, java.util.List<com.sun.source.tree.LambdaExpressionTree> declaredLambdas)  
    • Field Detail

      • entryBlock

        protected final SpecialBlock entryBlock
        The entry block of the control flow graph.
      • regularExitBlock

        protected final SpecialBlock regularExitBlock
        The regular exit block of the control flow graph.
      • exceptionalExitBlock

        protected final SpecialBlock exceptionalExitBlock
        The exceptional exit block of the control flow graph.
      • underlyingAST

        public final UnderlyingAST underlyingAST
        The AST this CFG corresponds to.
      • treeLookup

        protected final java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> treeLookup
        Maps from AST Trees to sets of Nodes.
        • Most Trees that produce a value will have at least one corresponding Node.
        • Trees that undergo conversions, such as boxing or unboxing, can map to two distinct Nodes. The Node for the pre-conversion value is stored in treeLookup, while the Node for the post-conversion value is stored in convertedTreeLookup.
        Some of the mapped-to nodes (in both treeLookup and convertedTreeLookup) do not appear in getAllNodes() because their blocks are not reachable in the control flow graph. Dataflow will not compute abstract values for these nodes.
      • convertedTreeLookup

        protected final java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> convertedTreeLookup
        Map from AST Trees to post-conversion sets of Nodes.
      • postfixNodeLookup

        protected final java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,​com.sun.source.tree.BinaryTree> postfixNodeLookup
        Map from postfix increment or decrement trees that are AST UnaryTrees to the synthetic tree that is v + 1 or v - 1.
      • returnNodes

        protected final java.util.List<ReturnNode> returnNodes
        All return nodes (if any) encountered. Only includes return statements that actually return something
      • declaredClasses

        protected final java.util.List<com.sun.source.tree.ClassTree> declaredClasses
        Class declarations that have been encountered when building the control-flow graph for a method.
      • declaredLambdas

        protected final java.util.List<com.sun.source.tree.LambdaExpressionTree> declaredLambdas
        Lambdas encountered when building the control-flow graph for a method, variable initializer, or initializer.
    • Constructor Detail

      • ControlFlowGraph

        public ControlFlowGraph​(SpecialBlock entryBlock,
                                SpecialBlockImpl regularExitBlock,
                                SpecialBlockImpl exceptionalExitBlock,
                                UnderlyingAST underlyingAST,
                                java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> treeLookup,
                                java.util.IdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> convertedTreeLookup,
                                java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,​com.sun.source.tree.BinaryTree> postfixNodeLookup,
                                java.util.List<ReturnNode> returnNodes,
                                java.util.List<com.sun.source.tree.ClassTree> declaredClasses,
                                java.util.List<com.sun.source.tree.LambdaExpressionTree> declaredLambdas)
    • Method Detail

      • getUid

        public long getUid​(@UnknownInitialization ControlFlowGraph this)
        Specified by:
        getUid in interface org.plumelib.util.UniqueId
      • getNodesCorrespondingToTree

        public @Nullable java.util.Set<Node> getNodesCorrespondingToTree​(com.sun.source.tree.Tree t)
        Returns the set of Nodes to which the Tree t corresponds, or null for trees that don't produce a value.
        Parameters:
        t - a tree
        Returns:
        the set of Nodes to which the Tree t corresponds, or null for trees that don't produce a value
      • getEntryBlock

        public SpecialBlock getEntryBlock()
        Returns the entry block of the control flow graph.
        Returns:
        the entry block of the control flow graph
      • getReturnNodes

        public java.util.List<ReturnNode> getReturnNodes()
      • getRegularExitBlock

        public SpecialBlock getRegularExitBlock()
      • getExceptionalExitBlock

        public SpecialBlock getExceptionalExitBlock()
      • getUnderlyingAST

        public UnderlyingAST getUnderlyingAST()
        Returns the AST this CFG corresponds to.
        Returns:
        the AST this CFG corresponds to
      • getAllBlocks

        public java.util.Set<Block> getAllBlocks​(@UnknownInitialization(ControlFlowGraph.class) ControlFlowGraph this)
        Returns the set of all basic blocks in this control flow graph.
        Returns:
        the set of all basic blocks in this control flow graph
      • getDepthFirstOrderedBlocks

        public java.util.List<Block> getDepthFirstOrderedBlocks()
        Returns all basic blocks in this control flow graph, in reversed depth-first postorder. Blocks may appear more than once in the sequence.
        Returns:
        the list of all basic block in this control flow graph in reversed depth-first postorder sequence
      • getTreeLookup

        public org.plumelib.util.UnmodifiableIdentityHashMap<com.sun.source.tree.Tree,​java.util.Set<Node>> getTreeLookup()
        Returns an unmodifiable view of the tree-lookup map. Ignores convertedTreeLookup, though getNodesCorrespondingToTree(com.sun.source.tree.Tree) uses that field.
        Returns:
        the unmodifiable tree-lookup map
      • getPostfixNodeLookup

        public org.plumelib.util.UnmodifiableIdentityHashMap<com.sun.source.tree.UnaryTree,​com.sun.source.tree.BinaryTree> getPostfixNodeLookup()
        Returns an unmodifiable view of the lookup-map of the binary tree for a postfix expression.
        Returns:
        the unmodifiable lookup-map of the binary tree for a postfix expression
      • getContainingMethod

        public @Nullable com.sun.source.tree.MethodTree getContainingMethod​(com.sun.source.tree.Tree t)
        Get the MethodTree of the CFG if the argument Tree maps to a Node in the CFG, or null otherwise.
        Parameters:
        t - a tree that might correspond to a node in the CFG
        Returns:
        the method that contains t's Node, or null
      • getContainingClass

        public @Nullable com.sun.source.tree.ClassTree getContainingClass​(com.sun.source.tree.Tree t)
        Get the ClassTree of the CFG if the argument Tree maps to a Node in the CFG, or null otherwise.
        Parameters:
        t - a tree that might be within a class
        Returns:
        the class that contains the given tree, or null
      • getDeclaredClasses

        public java.util.List<com.sun.source.tree.ClassTree> getDeclaredClasses()
      • getDeclaredLambdas

        public java.util.List<com.sun.source.tree.LambdaExpressionTree> getDeclaredLambdas()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • toStringDebug

        public java.lang.String toStringDebug()
        Returns a verbose string representation of this, useful for debugging.
        Returns:
        a string representation of this