Class ControlFlowGraph
java.lang.Object
org.checkerframework.dataflow.cfg.ControlFlowGraph
- All Implemented Interfaces:
org.plumelib.util.UniqueId
A control flow graph (CFG for short) of a single method.
The graph is represented by the successors (methods SingleSuccessorBlock.getSuccessor(),
ConditionalBlock.getThenSuccessor(), ConditionalBlock.getElseSuccessor(), ExceptionBlock.getExceptionalSuccessors(), RegularBlock.getRegularSuccessor()) and
predecessors (method Block.getPredecessors()) of the entry and exit blocks.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final IdentityHashMap<Tree,Set<Node>> Class declarations that have been encountered when building the control-flow graph for a method.protected final List<LambdaExpressionTree>Lambdas encountered when building the control-flow graph for a method, variable initializer, or initializer.protected final SpecialBlockThe entry block of the control flow graph.protected final SpecialBlockThe exceptional exit block of the control flow graph.protected final IdentityHashMap<UnaryTree,BinaryTree> Map from postfix increment or decrement trees that are ASTUnaryTrees to the synthetic tree that isv + 1orv - 1.protected final SpecialBlockThe regular exit block of the control flow graph.protected final List<ReturnNode>All return nodes (if any) encountered.protected final IdentityHashMap<Tree,Set<Node>> final UnderlyingASTThe AST this CFG corresponds to. -
Constructor Summary
ConstructorsConstructorDescriptionControlFlowGraph(SpecialBlock entryBlock, SpecialBlockImpl regularExitBlock, SpecialBlockImpl exceptionalExitBlock, UnderlyingAST underlyingAST, IdentityHashMap<Tree, Set<Node>> treeLookup, IdentityHashMap<Tree, Set<Node>> convertedTreeLookup, IdentityHashMap<UnaryTree, BinaryTree> postfixNodeLookup, List<ReturnNode> returnNodes, List<ClassTree> declaredClasses, List<LambdaExpressionTree> declaredLambdas) -
Method Summary
Modifier and TypeMethodDescriptionReturns the set of all basic blocks in this control flow graph.Returns all nodes in this control flow graph.@Nullable ClassTree@Nullable MethodTreeReturns all basic blocks in this control flow graph, in reversed depth-first postorder.Returns the entry block of the control flow graph.org.plumelib.util.UnmodifiableIdentityHashMap<UnaryTree,BinaryTree> Returns an unmodifiable view of the lookup-map of the binary tree for a postfix expression.Returns an unmodifiable view of the tree-lookup map.longgetUid()Returns the AST this CFG corresponds to.toString()Returns a verbose string representation of this, useful for debugging.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.plumelib.util.UniqueId
getClassAndUid
-
Field Details
-
entryBlock
The entry block of the control flow graph. -
regularExitBlock
The regular exit block of the control flow graph. -
exceptionalExitBlock
The exceptional exit block of the control flow graph. -
underlyingAST
The AST this CFG corresponds to. -
treeLookup
Maps from ASTTrees to sets ofNodes.- 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 inconvertedTreeLookup.
treeLookupandconvertedTreeLookup) do not appear ingetAllNodes()because their blocks are not reachable in the control flow graph. Dataflow will not compute abstract values for these nodes. -
convertedTreeLookup
-
postfixNodeLookup
Map from postfix increment or decrement trees that are ASTUnaryTrees to the synthetic tree that isv + 1orv - 1. -
returnNodes
All return nodes (if any) encountered. Only includes return statements that actually return something -
declaredClasses
Class declarations that have been encountered when building the control-flow graph for a method. -
declaredLambdas
Lambdas encountered when building the control-flow graph for a method, variable initializer, or initializer.
-
-
Constructor Details
-
ControlFlowGraph
public ControlFlowGraph(SpecialBlock entryBlock, SpecialBlockImpl regularExitBlock, SpecialBlockImpl exceptionalExitBlock, UnderlyingAST underlyingAST, IdentityHashMap<Tree, Set<Node>> treeLookup, IdentityHashMap<Tree, Set<Node>> convertedTreeLookup, IdentityHashMap<UnaryTree, BinaryTree> postfixNodeLookup, List<ReturnNode> returnNodes, List<ClassTree> declaredClasses, List<LambdaExpressionTree> declaredLambdas)
-
-
Method Details
-
getUid
public long getUid(@UnknownInitialization ControlFlowGraph this) - Specified by:
getUidin interfaceorg.plumelib.util.UniqueId
-
getNodesCorrespondingToTree
-
getEntryBlock
Returns the entry block of the control flow graph.- Returns:
- the entry block of the control flow graph
-
getReturnNodes
-
getRegularExitBlock
-
getExceptionalExitBlock
-
getUnderlyingAST
Returns the AST this CFG corresponds to.- Returns:
- the AST this CFG corresponds to
-
getAllBlocks
public 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
-
getAllNodes
Returns all nodes in this control flow graph.- Returns:
- all nodes in this control flow graph
-
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
Returns an unmodifiable view of the tree-lookup map. Ignores convertedTreeLookup, thoughgetNodesCorrespondingToTree(com.sun.source.tree.Tree)uses that field.- Returns:
- the unmodifiable tree-lookup map
-
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
- Parameters:
t- a tree that might correspond to a node in the CFG- Returns:
- the method that contains
t's Node, or null
-
getContainingClass
- Parameters:
t- a tree that might be within a class- Returns:
- the class that contains the given tree, or null
-
getDeclaredClasses
-
getDeclaredLambdas
-
toString
-
toStringDebug
Returns a verbose string representation of this, useful for debugging.- Returns:
- a string representation of this
-