Class TransferResult<V extends AbstractValue<V>,S extends Store<S>>
- java.lang.Object
-
- org.checkerframework.dataflow.analysis.TransferResult<V,S>
-
- Type Parameters:
V
- type of the abstract value that is trackedS
- the store type used in the analysis
- Direct Known Subclasses:
ConditionalTransferResult
,RegularTransferResult
public abstract class TransferResult<V extends AbstractValue<V>,S extends Store<S>> extends java.lang.Object
TransferResult
is used as the result type of the individual transfer functions of aTransferFunction
. It always belongs to the result of the individual transfer function for a particularNode
, even though thatorg.checkerframework.dataflow.cfg.node.Node
is not explicitly stored inTransferResult
.A
TransferResult
consists of a result value, plus one or more stores. It contains one or two stores (for 'then' and 'else'), and zero or more stores with a cause (TypeMirror
).
-
-
Field Summary
Fields Modifier and Type Field Description protected @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S>
exceptionalStores
The stores in case the basic block throws an exception (ornull
if the correspondingNode
does not throw any exceptions).protected @Nullable V
resultValue
The abstract value of theNode
associated with thisTransferResult
, ornull
if no value has been produced.
-
Constructor Summary
Constructors Modifier Constructor Description protected
TransferResult(@Nullable V resultValue, @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> exceptionalStores)
Create a new TransferResult, givenresultValue
andexceptionalStores
.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract boolean
containsTwoStores()
Returnstrue
if and only if this transfer result contains two stores that are potentially not equal.abstract S
getElseStore()
Returns the result store produced if theNode
this result belongs to evaluates tofalse
.@Nullable S
getExceptionalStore(javax.lang.model.type.TypeMirror exception)
Returns the store that flows along the outgoing exceptional edge labeled withexception
(ornull
if no special handling is required for exceptional edges).@Nullable java.util.Map<javax.lang.model.type.TypeMirror,S>
getExceptionalStores()
abstract S
getRegularStore()
Returns the regular result store produced if no exception is thrown by theNode
corresponding to this transfer function result.@Nullable V
getResultValue()
Returns the abstract value produced by the transfer function,null
otherwise.abstract S
getThenStore()
Returns the result store produced if theNode
this result belongs to evaluates totrue
.void
setResultValue(V resultValue)
Set the value ofresultValue
.abstract boolean
storeChanged()
Returnstrue
if and only if the transfer function returning this transfer result changed the regularStore, elseStore, or thenStore.
-
-
-
Field Detail
-
resultValue
protected @Nullable V extends AbstractValue<V> resultValue
The abstract value of theNode
associated with thisTransferResult
, ornull
if no value has been produced.Is set by
setResultValue(V)
.
-
exceptionalStores
protected final @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S extends Store<S>> exceptionalStores
The stores in case the basic block throws an exception (ornull
if the correspondingNode
does not throw any exceptions). Does not necessarily contain a store for every exception, in which case the in-store will be used.
-
-
Constructor Detail
-
TransferResult
protected TransferResult(@Nullable V resultValue, @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> exceptionalStores)
Create a new TransferResult, givenresultValue
andexceptionalStores
.- Parameters:
resultValue
- the abstract value of theNode
associated with thisTransferResult
exceptionalStores
- the stores in case the basic block throws an exception (ornull
if the correspondingNode
does not throw any exceptions)
-
-
Method Detail
-
getResultValue
public @Nullable V getResultValue()
Returns the abstract value produced by the transfer function,null
otherwise.- Returns:
- the abstract value produced by the transfer function,
null
otherwise
-
setResultValue
public void setResultValue(V resultValue)
Set the value ofresultValue
.- Parameters:
resultValue
- the abstract value of theNode
associated with thisTransferResult
-
getRegularStore
public abstract S getRegularStore()
Returns the regular result store produced if no exception is thrown by theNode
corresponding to this transfer function result.- Returns:
- the regular result store produced if no exception is thrown by the
Node
corresponding to this transfer function result
-
getThenStore
public abstract S getThenStore()
Returns the result store produced if theNode
this result belongs to evaluates totrue
.- Returns:
- the result store produced if the
Node
this result belongs to evaluates totrue
-
getElseStore
public abstract S getElseStore()
Returns the result store produced if theNode
this result belongs to evaluates tofalse
.- Returns:
- the result store produced if the
Node
this result belongs to evaluates tofalse
-
getExceptionalStore
public @Nullable S getExceptionalStore(javax.lang.model.type.TypeMirror exception)
Returns the store that flows along the outgoing exceptional edge labeled withexception
(ornull
if no special handling is required for exceptional edges).- Parameters:
exception
- an exception type- Returns:
- the store that flows along the outgoing exceptional edge labeled with
exception
(ornull
if no special handling is required for exceptional edges)
-
getExceptionalStores
public @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> getExceptionalStores()
- Returns:
- a Map of
TypeMirror
toStore
,null
otherwise - See Also:
getExceptionalStore(TypeMirror)
-
containsTwoStores
public abstract boolean containsTwoStores()
Returnstrue
if and only if this transfer result contains two stores that are potentially not equal. Note that the resulttrue
does not imply thatgetRegularStore
cannot be called (or vice versa forfalse
). Rather, it indicates thatgetThenStore
orgetElseStore
can be used to give more precise results. Otherwise, if the result isfalse
, then all three methodsgetRegularStore
,getThenStore
, andgetElseStore
return equivalent stores.- Returns:
true
if and only if this transfer result contains two stores that are potentially not equal
-
storeChanged
public abstract boolean storeChanged()
Returnstrue
if and only if the transfer function returning this transfer result changed the regularStore, elseStore, or thenStore.- Returns:
true
if and only if the transfer function returning this transfer result changed the regularStore, elseStore, or thenStore
-
-