Class AnalysisResult<V extends AbstractValue<V>,S extends Store<S>>
- java.lang.Object
-
- org.checkerframework.dataflow.analysis.AnalysisResult<V,S>
-
- Type Parameters:
V- type of the abstract value that is trackedS- the store type used in the analysis
- All Implemented Interfaces:
org.plumelib.util.UniqueId
public class AnalysisResult<V extends AbstractValue<V>,S extends Store<S>> extends java.lang.Object implements org.plumelib.util.UniqueIdAnAnalysisResultrepresents the result of a org.checkerframework.dataflow analysis by providing the abstract values given a node or a tree. Note that it does not keep track of custom results computed by some analysis.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>>analysisCachesCaches of the analysis results for each input for the block of the node and each node.protected java.util.Map<javax.lang.model.element.VariableElement,V>finalLocalValuesMap from (effectively final) local variable elements to their abstract value.protected java.util.IdentityHashMap<Node,V>nodeValuesAbstract values of nodes.protected java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,com.sun.source.tree.BinaryTree>postfixLookupMap from postfix increment or decrement trees that are ASTUnaryTrees to the synthetic tree that isv + 1orv - 1.protected java.util.IdentityHashMap<Block,TransferInput<V,S>>storesThe stores before every method call.protected java.util.IdentityHashMap<com.sun.source.tree.Tree,java.util.Set<Node>>treeLookupMap from ASTTrees to sets ofNodes.
-
Constructor Summary
Constructors Modifier Constructor Description AnalysisResult(java.util.IdentityHashMap<Node,V> nodeValues, java.util.IdentityHashMap<Block,TransferInput<V,S>> stores, java.util.IdentityHashMap<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup, java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,com.sun.source.tree.BinaryTree> postfixLookup, java.util.Map<javax.lang.model.element.VariableElement,V> finalLocalValues)Initialize with given mappings and empty cache.protectedAnalysisResult(java.util.IdentityHashMap<Node,V> nodeValues, java.util.IdentityHashMap<Block,TransferInput<V,S>> stores, java.util.IdentityHashMap<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup, java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,com.sun.source.tree.BinaryTree> postfixLookup, java.util.Map<javax.lang.model.element.VariableElement,V> finalLocalValues, java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)Initialize with given mappings.AnalysisResult(java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)Initialize empty result with specified cache.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcombine(AnalysisResult<V,S> other)Combine with another analysis result.java.util.Map<javax.lang.model.element.VariableElement,V>getFinalLocalValues()Returns the value of effectively final local variables.@Nullable java.util.Set<Node>getNodesForTree(com.sun.source.tree.Tree tree)Returns theNodes corresponding to a particularTree.com.sun.source.tree.BinaryTreegetPostfixBinaryTree(com.sun.source.tree.UnaryTree postfixTree)Returns the syntheticv + 1orv - 1corresponding to the postfix increment or decrement tree.@Nullable SgetStoreAfter(com.sun.source.tree.Tree tree)Returns the store immediately after a givenTree.SgetStoreAfter(Block block)Returns the regular store immediately after a given block.@Nullable SgetStoreAfter(Node node)Returns the store immediately after a givenNode.@Nullable SgetStoreBefore(com.sun.source.tree.Tree tree)Returns the store immediately before a givenTree.SgetStoreBefore(Block block)Returns the regular store immediately before a givenBlock.@Nullable SgetStoreBefore(Node node)Returns the store immediately before a givenNode.longgetUid()@Nullable VgetValue(com.sun.source.tree.Tree t)Returns the abstract value forTreet, ornullif no information is available.@Nullable VgetValue(Node n)static <V> java.lang.StringnodeValuesToString(java.util.Map<Node,V> nodeValues)Returns a verbose string representation, useful for debugging.protected @Nullable SrunAnalysisFor(Node node, Analysis.BeforeOrAfter preOrPost)Runs the analysis again within the block ofnodeand returns the store at the location ofnode.static <V extends AbstractValue<V>,S extends Store<S>>
SrunAnalysisFor(Node node, Analysis.BeforeOrAfter preOrPost, TransferInput<V,S> transferInput, java.util.IdentityHashMap<Node,V> nodeValues, @Nullable java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)Runs the analysis again within the block ofnodeand returns the store at the location ofnode.java.lang.StringtoStringDebug()Returns a verbose string representation of this, useful for debugging.static java.lang.StringtreeLookupToString(java.util.Map<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup)Returns a verbose string representation of a map, useful for debugging.
-
-
-
Field Detail
-
nodeValues
protected java.util.IdentityHashMap<Node,V extends AbstractValue<V>> nodeValues
Abstract values of nodes.
-
treeLookup
protected java.util.IdentityHashMap<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup
Map from ASTTrees to sets ofNodes.Some of those Nodes might not be keys in
nodeValues. One reason is that the Node is unreachable in the control flow graph, so dataflow never gave it a value.
-
postfixLookup
protected java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,com.sun.source.tree.BinaryTree> postfixLookup
Map from postfix increment or decrement trees that are ASTUnaryTrees to the synthetic tree that isv + 1orv - 1.
-
finalLocalValues
protected final java.util.Map<javax.lang.model.element.VariableElement,V extends AbstractValue<V>> finalLocalValues
Map from (effectively final) local variable elements to their abstract value.
-
stores
protected final java.util.IdentityHashMap<Block,TransferInput<V extends AbstractValue<V>,S extends Store<S>>> stores
The stores before every method call.
-
analysisCaches
protected final java.util.Map<TransferInput<V extends AbstractValue<V>,S extends Store<S>>,java.util.IdentityHashMap<Node,TransferResult<V extends AbstractValue<V>,S extends Store<S>>>> analysisCaches
Caches of the analysis results for each input for the block of the node and each node.
-
-
Constructor Detail
-
AnalysisResult
protected AnalysisResult(java.util.IdentityHashMap<Node,V> nodeValues, java.util.IdentityHashMap<Block,TransferInput<V,S>> stores, java.util.IdentityHashMap<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup, java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,com.sun.source.tree.BinaryTree> postfixLookup, java.util.Map<javax.lang.model.element.VariableElement,V> finalLocalValues, java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)
Initialize with given mappings.- Parameters:
nodeValues-nodeValuesstores-storestreeLookup-treeLookuppostfixLookup-postfixLookupfinalLocalValues-finalLocalValuesanalysisCaches-analysisCaches
-
AnalysisResult
public AnalysisResult(java.util.IdentityHashMap<Node,V> nodeValues, java.util.IdentityHashMap<Block,TransferInput<V,S>> stores, java.util.IdentityHashMap<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup, java.util.IdentityHashMap<com.sun.source.tree.UnaryTree,com.sun.source.tree.BinaryTree> postfixLookup, java.util.Map<javax.lang.model.element.VariableElement,V> finalLocalValues)
Initialize with given mappings and empty cache.- Parameters:
nodeValues-nodeValuesstores-storestreeLookup-treeLookuppostfixLookup-postfixLookupfinalLocalValues-finalLocalValues
-
AnalysisResult
public AnalysisResult(java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)
Initialize empty result with specified cache.- Parameters:
analysisCaches-analysisCaches
-
-
Method Detail
-
getUid
public long getUid(@UnknownInitialization AnalysisResult<V extends AbstractValue<V>,S extends Store<S>> this)
- Specified by:
getUidin interfaceorg.plumelib.util.UniqueId
-
combine
public void combine(AnalysisResult<V,S> other)
Combine with another analysis result.- Parameters:
other- an analysis result to combine with this
-
getFinalLocalValues
public java.util.Map<javax.lang.model.element.VariableElement,V> getFinalLocalValues()
Returns the value of effectively final local variables.- Returns:
- the value of effectively final local variables
-
getValue
public @Nullable V getValue(Node n)
Returns the abstract value forNoden, ornullif no information is available. Note that if the analysis has not finished yet, this value might not represent the final value for this node.- Parameters:
n- a node- Returns:
- the abstract value for
Noden, ornullif no information is available
-
getValue
public @Nullable V getValue(com.sun.source.tree.Tree t)
Returns the abstract value forTreet, ornullif no information is available. Note that if the analysis has not finished yet, this value might not represent the final value for this node.- Parameters:
t- a tree- Returns:
- the abstract value for
Treet, ornullif no information is available
-
getNodesForTree
public @Nullable java.util.Set<Node> getNodesForTree(com.sun.source.tree.Tree tree)
Returns theNodes corresponding to a particularTree. MultipleNodes can correspond to a singleTreebecause of several reasons:- In a lambda expression such as
() -> 5the5is both anIntegerLiteralNodeand aLambdaResultExpressionNode. - Widening and narrowing primitive conversions can result in
WideningConversionNodeandNarrowingConversionNode. - Automatic String conversion can result in a
StringConversionNode. - Trees for
finallyblocks are cloned to achieve a precise CFG. AnyTreewithin a finally block can have multiple correspondingNodes attached to them.
Nodes they are not interested in.- Parameters:
tree- a tree- Returns:
- the set of
Nodes for a givenTree
- In a lambda expression such as
-
getPostfixBinaryTree
public com.sun.source.tree.BinaryTree getPostfixBinaryTree(com.sun.source.tree.UnaryTree postfixTree)
Returns the syntheticv + 1orv - 1corresponding to the postfix increment or decrement tree.- Parameters:
postfixTree- a postfix increment or decrement tree- Returns:
- the synthetic
v + 1orv - 1corresponding to the postfix increment or decrement tree
-
getStoreBefore
public @Nullable S getStoreBefore(com.sun.source.tree.Tree tree)
Returns the store immediately before a givenTree.- Parameters:
tree- a tree- Returns:
- the store immediately before a given
Tree
-
getStoreBefore
public @Nullable S getStoreBefore(Node node)
Returns the store immediately before a givenNode.- Parameters:
node- a node- Returns:
- the store immediately before a given
Node
-
getStoreBefore
public S getStoreBefore(Block block)
Returns the regular store immediately before a givenBlock.- Parameters:
block- a block- Returns:
- the store right before the given block
-
getStoreAfter
public S getStoreAfter(Block block)
Returns the regular store immediately after a given block.- Parameters:
block- a block- Returns:
- the store after the given block
-
getStoreAfter
public @Nullable S getStoreAfter(com.sun.source.tree.Tree tree)
Returns the store immediately after a givenTree.- Parameters:
tree- a tree- Returns:
- the store immediately after a given
Tree
-
getStoreAfter
public @Nullable S getStoreAfter(Node node)
Returns the store immediately after a givenNode.- Parameters:
node- a node- Returns:
- the store immediately after a given
Node
-
runAnalysisFor
protected @Nullable S runAnalysisFor(Node node, Analysis.BeforeOrAfter preOrPost)
Runs the analysis again within the block ofnodeand returns the store at the location ofnode. Ifbeforeis true, then the store immediately before theNodenodeis returned. Otherwise, the store afternodeis returned.If the given
Nodecannot be reached (in the control flow graph), thennullis returned.- Parameters:
node- the node to analyzepreOrPost- which store to return: the store immediately beforenodeor the store afternode- Returns:
- the store before or after
node(depends on the value ofbefore) after running the analysis
-
runAnalysisFor
public static <V extends AbstractValue<V>,S extends Store<S>> S runAnalysisFor(Node node, Analysis.BeforeOrAfter preOrPost, TransferInput<V,S> transferInput, java.util.IdentityHashMap<Node,V> nodeValues, @Nullable java.util.Map<TransferInput<V,S>,java.util.IdentityHashMap<Node,TransferResult<V,S>>> analysisCaches)
Runs the analysis again within the block ofnodeand returns the store at the location ofnode. Ifbeforeis true, then the store immediately before theNodenodeis returned. Otherwise, the store immediately afternodeis returned. IfanalysisCachesis not null, this method uses a cache.analysisCachesis a map of a block of node to the cached analysis result. If the cache fortransferInputis not inanalysisCaches, this method creates new cache and stores it inanalysisCaches. The cache is a map of nodes to the analysis results of the nodes.- Type Parameters:
V- the abstract value type to be tracked by the analysisS- the store type used in the analysis- Parameters:
node- the node to analyzepreOrPost- which store to return: the store immediately beforenodeor the store afternodetransferInput- a transfer inputnodeValues-nodeValuesanalysisCaches-analysisCaches- Returns:
- the store before or after
node(depends on the value ofbefore) after running the analysis
-
toStringDebug
public java.lang.String toStringDebug()
Returns a verbose string representation of this, useful for debugging.- Returns:
- a string representation of this
-
nodeValuesToString
public static <V> java.lang.String nodeValuesToString(java.util.Map<Node,V> nodeValues)
Returns a verbose string representation, useful for debugging. The map has the same type as thenodeValuesfield.- Type Parameters:
V- the type of values in the map- Parameters:
nodeValues- a map to format- Returns:
- a printed representation of the given map
-
treeLookupToString
public static java.lang.String treeLookupToString(java.util.Map<com.sun.source.tree.Tree,java.util.Set<Node>> treeLookup)
Returns a verbose string representation of a map, useful for debugging. The map has the same type as thetreeLookupfield.- Parameters:
treeLookup- a map to format- Returns:
- a printed representation of the given map
-
-