V - type of the abstract value that is trackedS - the store type used in the analysispublic class ConditionalTransferResult<V extends AbstractValue<V>,S extends Store<S>> extends TransferResult<V,S>
TransferResult with two non-exceptional store; one for the 'then'
 edge and one for 'else'. The result of getRegularStore will be the least upper bound of
 the two underlying stores.| Modifier and Type | Field and Description | 
|---|---|
| protected S | elseStoreThe 'else' result store. | 
| protected S | thenStoreThe 'then' result store. | 
exceptionalStores, resultValue| Constructor and Description | 
|---|
| ConditionalTransferResult(V value,
                         S thenStore,
                         S elseStore)Create a new  ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean),
 usingfalsefor whether the store changed andnullforTransferResult.exceptionalStores. | 
| ConditionalTransferResult(V value,
                         S thenStore,
                         S elseStore,
                         boolean storeChanged)Create a new  ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean),
 usingnullforTransferResult.exceptionalStores. | 
| ConditionalTransferResult(V value,
                         S thenStore,
                         S elseStore,
                         Map<TypeMirror,S> exceptionalStores)Create a new  ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean),
 usingfalseforstoreChanged. | 
| ConditionalTransferResult(V value,
                         S thenStore,
                         S elseStore,
                         @Nullable Map<TypeMirror,S> exceptionalStores,
                         boolean storeChanged)Create a  ConditionalTransferResultwiththenStoreas the resulting store if
 the correspondingNodeevaluates totrueandelseStoreotherwise. | 
| Modifier and Type | Method and Description | 
|---|---|
| boolean | containsTwoStores()Returns  trueif and only if this transfer result contains two stores that are
 potentially not equal. | 
| S | getElseStore()Returns the result store produced if the  Nodethis result belongs to evaluates tofalse. | 
| S | getRegularStore()The regular result store. | 
| S | getThenStore()Returns the result store produced if the  Nodethis result belongs to evaluates totrue. | 
| boolean | storeChanged() | 
| String | toString() | 
getExceptionalStore, getExceptionalStores, getResultValue, setResultValuepublic ConditionalTransferResult(V value, S thenStore, S elseStore, boolean storeChanged)
ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean),
 using null for TransferResult.exceptionalStores.
 Exceptions: If the corresponding Node throws an exception, then it is assumed that no
 special handling is necessary and the store before the corresponding Node will be passed along any exceptional edge.
 
Aliasing: thenStore and elseStore are not allowed to be used
 anywhere outside of this class (including use through aliases). Complete control over the
 objects is transferred to this class.
value - the abstract value produced by the transfer functionthenStore - 'then' result storeelseStore - 'else' result storestoreChanged - whether the store changedConditionalTransferResult(AbstractValue, Store, Store, Map, boolean)public ConditionalTransferResult(V value, S thenStore, S elseStore)
ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean),
 using false for whether the store changed and null for TransferResult.exceptionalStores.value - the abstract value produced by the transfer functionthenStore - thenStoreelseStore - elseStoreConditionalTransferResult(AbstractValue, Store, Store, Map, boolean)public ConditionalTransferResult(V value, S thenStore, S elseStore, Map<TypeMirror,S> exceptionalStores)
ConditionalTransferResult(AbstractValue, Store, Store, Map, boolean),
 using false for storeChanged.value - the abstract value produced by the transfer functionthenStore - thenStoreelseStore - elseStoreexceptionalStores - TransferResult.exceptionalStoresConditionalTransferResult(AbstractValue, Store, Store, Map, boolean)public ConditionalTransferResult(V value, S thenStore, S elseStore, @Nullable Map<TypeMirror,S> exceptionalStores, boolean storeChanged)
ConditionalTransferResult with thenStore as the resulting store if
 the corresponding Node evaluates to true and elseStore otherwise.
 For the meaning of storeChanged, see TransferResult.storeChanged().
 
Exceptions: If the corresponding Node throws an exception, then the corresponding
 store in exceptionalStores is used. If no exception is found in exceptionalStores, then it is assumed that no special handling is necessary and the store
 before the corresponding Node will be passed
 along any exceptional edge.
 
Aliasing: thenStore, elseStore, and any store in exceptionalStores are not allowed to be used anywhere outside of this class (including use
 through aliases). Complete control over the objects is transferred to this class.
value - the abstract value produced by the transfer functionthenStore - thenStoreelseStore - elseStoreexceptionalStores - TransferResult.exceptionalStoresstoreChanged - storeChangedpublic S getRegularStore()
getRegularStore in class TransferResult<V extends AbstractValue<V>,S extends Store<S>>Node corresponding to this transfer function
     resultpublic S getThenStore()
TransferResultNode
 this result belongs to evaluates to true.getThenStore in class TransferResult<V extends AbstractValue<V>,S extends Store<S>>Node
     this result belongs to evaluates to truepublic S getElseStore()
TransferResultNode
 this result belongs to evaluates to false.getElseStore in class TransferResult<V extends AbstractValue<V>,S extends Store<S>>Node
     this result belongs to evaluates to falsepublic boolean containsTwoStores()
TransferResulttrue if and only if this transfer result contains two stores that are
 potentially not equal. Note that the result true does not imply that getRegularStore cannot be called (or vice versa for false). Rather, it indicates
 that getThenStore or getElseStore can be used to give more precise results.
 Otherwise, if the result is false, then all three methods getRegularStore,
 getThenStore, and getElseStore return equivalent stores.containsTwoStores in class TransferResult<V extends AbstractValue<V>,S extends Store<S>>true if and only if this transfer result contains two stores that are
     potentially not equalpublic boolean storeChanged()
storeChanged in class TransferResult<V extends AbstractValue<V>,S extends Store<S>>true if and only if the transfer function returning this transfer result
     changed the regularStore, elseStore, or thenStoreTransferResult.storeChanged()