public class JvmCfa extends Cfa<JvmCfaNode,JvmCfaEdge,MethodSignature>
Cfa
.
The keys of the function maps are the MethodSignature
s.
The nodes of a function are identified by the offset of the code location. Besides the normal exit node for return instructions, function can also have a special exit node for uncaught exceptions.
An additional JvmCatchCfaNode
is added for each handler in the method exception table.
A unique JvmUnknownCfaNode
node is used for instructions the successor of which is
unknown.
functionNodes
Constructor and Description |
---|
JvmCfa() |
Modifier and Type | Method and Description |
---|---|
void |
addFunctionCatchNode(MethodSignature signature,
JvmCatchCfaNode node,
int offset)
Adds a catch node to the CFA (i.e.
|
void |
addInterproceduralEdge(Call call)
Adds a call node between two methods.
|
JvmCfaNode |
addNodeIfAbsent(MethodSignature signature,
int offset,
Clazz clazz)
If the requested function node is present in the graph return it.
|
void |
addUnknownTargetInterproceduralEdge(Call call)
Adds a call node between two methods.
|
void |
clear()
Removes references to this CFA nodes from the singleton
JvmUnknownCfaNode and clears
its node collections making it garbage collectable. |
boolean |
containsFunctionCatchNode(MethodSignature signature,
int offset)
Returns true if the catch node of the specified method at the specified offset is present in
the graph.
|
java.util.stream.Stream<JvmCfaNode> |
getAllNodes()
Returns a stream of all the nodes present in the graph.
|
JvmCatchCfaNode |
getFunctionCatchNode(MethodSignature signature,
int offset)
Returns the catch node of a method the handler of which begins at the specific code offset,
returns null if the method or the specific catch node are not in the graph.
|
java.util.Collection<JvmCatchCfaNode> |
getFunctionCatchNodes(MethodSignature signature)
Returns all the catch nodes of a specific method, returns an empty collection if the function
is not in the graph or if it has no catch nodes.
|
JvmCfaNode |
getFunctionExceptionExitNode(MethodSignature signature,
Clazz clazz)
Returns the exception exit node (i.e.
|
JvmCfaNode |
getFunctionReturnExitNode(MethodSignature signature,
Clazz clazz)
Returns the exit node of the specified method if present, otherwise creates the exit node for
the method and returns it.
|
addFunctionEntryNode, addFunctionNode, getFunctionEntryNode, getFunctionEntryNodes, getFunctionNode, getFunctionNode, getFunctionNodes, isEmpty
public java.util.stream.Stream<JvmCfaNode> getAllNodes()
Cfa
Note: a Stream
is provided to avoid creating new collections unnecessarily.
getAllNodes
in class Cfa<JvmCfaNode,JvmCfaEdge,MethodSignature>
public java.util.Collection<JvmCatchCfaNode> getFunctionCatchNodes(MethodSignature signature)
signature
- The signature of the method.public JvmCatchCfaNode getFunctionCatchNode(MethodSignature signature, int offset)
signature
- The signature of the method, might be different for different domains.offset
- The offset of the catch handler represented by the node.public void addFunctionCatchNode(MethodSignature signature, JvmCatchCfaNode node, int offset)
public boolean containsFunctionCatchNode(MethodSignature signature, int offset)
public JvmCfaNode getFunctionReturnExitNode(MethodSignature signature, Clazz clazz)
public JvmCfaNode getFunctionExceptionExitNode(MethodSignature signature, Clazz clazz)
public JvmCfaNode addNodeIfAbsent(MethodSignature signature, int offset, Clazz clazz)
public void addInterproceduralEdge(Call call)
public void addUnknownTargetInterproceduralEdge(Call call)
CodeAttribute
, which means the target method is not present in
the CFA. The unknown node is set as the call target.public void clear()
JvmUnknownCfaNode
and clears
its node collections making it garbage collectable.