Class ConditionalTransferResult<V extends AbstractValue<V>,S extends Store<S>>
- java.lang.Object
-
- org.checkerframework.dataflow.analysis.TransferResult<V,S>
-
- org.checkerframework.dataflow.analysis.ConditionalTransferResult<V,S>
-
- Type Parameters:
V- type of the abstract value that is trackedS- the store type used in the analysis
public class ConditionalTransferResult<V extends AbstractValue<V>,S extends Store<S>> extends TransferResult<V,S>
Implementation of aTransferResultwith two non-exceptional stores. The 'then' store contains information valid when the previous boolean-valued expression was true, and the 'else' store contains information valid when the expression was false.getRegularStore()returns the least upper bound of the two underlying stores.
-
-
Field Summary
Fields Modifier and Type Field Description protected SelseStoreThe 'else' result store.protected SthenStoreThe 'then' result store.-
Fields inherited from class org.checkerframework.dataflow.analysis.TransferResult
exceptionalStores, resultValue
-
-
Constructor Summary
Constructors Constructor Description ConditionalTransferResult(@Nullable V value, S thenStore, S elseStore)Create a newConditionalTransferResult(AbstractValue, Store, Store, Map, boolean), usingfalsefor whether the store changed andnullforTransferResult.exceptionalStores.ConditionalTransferResult(@Nullable V value, S thenStore, S elseStore, boolean storeChanged)Create a newConditionalTransferResult(AbstractValue, Store, Store, Map, boolean), usingnullforTransferResult.exceptionalStores.ConditionalTransferResult(@Nullable V value, S thenStore, S elseStore, @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> exceptionalStores, boolean storeChanged)Create aConditionalTransferResultwiththenStoreas the resulting store if the correspondingNodeevaluates totrueandelseStoreotherwise.ConditionalTransferResult(V value, S thenStore, S elseStore, @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> exceptionalStores)Create a newConditionalTransferResult(AbstractValue, Store, Store, Map, boolean), usingfalsefor thestoreChangedformal parameter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancontainsTwoStores()Returnstrueif and only if this transfer result contains two stores that are potentially not equal.SgetElseStore()Returns the result store produced if theNodethis result belongs to evaluates tofalse.SgetRegularStore()The regular result store.SgetThenStore()Returns the result store produced if theNodethis result belongs to evaluates totrue.booleanstoreChanged()Returnstrueif and only if the transfer function returning this transfer result changed the regularStore, elseStore, or thenStore.java.lang.StringtoString()-
Methods inherited from class org.checkerframework.dataflow.analysis.TransferResult
getExceptionalStore, getExceptionalStores, getResultValue, setResultValue
-
-
-
-
Constructor Detail
-
ConditionalTransferResult
public ConditionalTransferResult(@Nullable V value, S thenStore, S elseStore, boolean storeChanged)
Create a newConditionalTransferResult(AbstractValue, Store, Store, Map, boolean), usingnullforTransferResult.exceptionalStores.Exceptions: If the corresponding
Nodethrows an exception, then it is assumed that no special handling is necessary and the store before the correspondingNodewill be passed along any exceptional edge.Aliasing:
thenStoreandelseStoreare not allowed to be used anywhere outside of this class (including use through aliases). Complete control over the objects is transferred to this class.- Parameters:
value- the abstract value produced by the transfer functionthenStore- 'then' result storeelseStore- 'else' result storestoreChanged- whether the store changed- See Also:
ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean)
-
ConditionalTransferResult
public ConditionalTransferResult(@Nullable V value, S thenStore, S elseStore)
Create a newConditionalTransferResult(AbstractValue, Store, Store, Map, boolean), usingfalsefor whether the store changed andnullforTransferResult.exceptionalStores.- Parameters:
value- the abstract value produced by the transfer functionthenStore-thenStoreelseStore-elseStore- See Also:
ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean)
-
ConditionalTransferResult
public ConditionalTransferResult(V value, S thenStore, S elseStore, @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> exceptionalStores)
Create a newConditionalTransferResult(AbstractValue, Store, Store, Map, boolean), usingfalsefor thestoreChangedformal parameter.- Parameters:
value- the abstract value produced by the transfer functionthenStore-thenStoreelseStore-elseStoreexceptionalStores-TransferResult.exceptionalStores- See Also:
ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean)
-
ConditionalTransferResult
public ConditionalTransferResult(@Nullable V value, S thenStore, S elseStore, @Nullable java.util.Map<javax.lang.model.type.TypeMirror,S> exceptionalStores, boolean storeChanged)
Create aConditionalTransferResultwiththenStoreas the resulting store if the correspondingNodeevaluates totrueandelseStoreotherwise.Exceptions: If the corresponding
Nodethrows an exception, then the corresponding store inexceptionalStoresis used. If no exception is found inexceptionalStores, then it is assumed that no special handling is necessary and the store before the correspondingNodewill be passed along any exceptional edge.Aliasing:
thenStore,elseStore, and any store inexceptionalStoresare not allowed to be used anywhere outside of this class (including use through aliases). Complete control over the objects is transferred to this class.- Parameters:
value- the abstract value produced by the transfer functionthenStore-thenStoreelseStore-elseStoreexceptionalStores-TransferResult.exceptionalStoresstoreChanged- whether the store changed; seeTransferResult.storeChanged().
-
-
Method Detail
-
getRegularStore
public S getRegularStore()
The regular result store.- Specified by:
getRegularStorein classTransferResult<V extends AbstractValue<V>,S extends Store<S>>- Returns:
- the regular result store produced if no exception is thrown by the
Nodecorresponding to this transfer function result
-
getThenStore
public S getThenStore()
Description copied from class:TransferResultReturns the result store produced if theNodethis result belongs to evaluates totrue.- Specified by:
getThenStorein classTransferResult<V extends AbstractValue<V>,S extends Store<S>>- Returns:
- the result store produced if the
Nodethis result belongs to evaluates totrue
-
getElseStore
public S getElseStore()
Description copied from class:TransferResultReturns the result store produced if theNodethis result belongs to evaluates tofalse.- Specified by:
getElseStorein classTransferResult<V extends AbstractValue<V>,S extends Store<S>>- Returns:
- the result store produced if the
Nodethis result belongs to evaluates tofalse
-
containsTwoStores
public boolean containsTwoStores()
Description copied from class:TransferResultReturnstrueif and only if this transfer result contains two stores that are potentially not equal. Note that the resulttruedoes not imply thatgetRegularStorecannot be called (or vice versa forfalse). Rather, it indicates thatgetThenStoreorgetElseStorecan be used to give more precise results. Otherwise, if the result isfalse, then all three methodsgetRegularStore,getThenStore, andgetElseStorereturn equivalent stores.- Specified by:
containsTwoStoresin classTransferResult<V extends AbstractValue<V>,S extends Store<S>>- Returns:
trueif and only if this transfer result contains two stores that are potentially not equal
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
storeChanged
public boolean storeChanged()
Description copied from class:TransferResultReturnstrueif and only if the transfer function returning this transfer result changed the regularStore, elseStore, or thenStore.- Specified by:
storeChangedin classTransferResult<V extends AbstractValue<V>,S extends Store<S>>- Returns:
trueif and only if the transfer function returning this transfer result changed the regularStore, elseStore, or thenStore
-
-