V
- type of the abstract value that is trackedS
- the store type used in the analysispublic class RegularTransferResult<V extends AbstractValue<V>,S extends Store<S>> extends TransferResult<V,S>
TransferResult
with just one non-exceptional store. The result of
getThenStore
and getElseStore
is equal to the only underlying store.Modifier and Type | Field and Description |
---|---|
protected S |
store
The regular result store.
|
exceptionalStores, resultValue
Constructor and Description |
---|
RegularTransferResult(V value,
S resultStore)
Create a new
RegularTransferResult(AbstractValue, Store, Map, boolean) , using null for TransferResult.exceptionalStores and false for storeChanged . |
RegularTransferResult(V value,
S resultStore,
boolean storeChanged)
Create a new
RegularTransferResult(AbstractValue, Store, Map, boolean) , using null for TransferResult.exceptionalStores . |
RegularTransferResult(V value,
S resultStore,
Map<TypeMirror,S> exceptionalStores)
Create a new
RegularTransferResult(AbstractValue, Store, Map, boolean) , using false for storeChanged . |
RegularTransferResult(V value,
S resultStore,
@Nullable Map<TypeMirror,S> exceptionalStores,
boolean storeChanged)
Create a
TransferResult with resultStore as the resulting store. |
Modifier and Type | Method and Description |
---|---|
boolean |
containsTwoStores()
Returns
true if and only if this transfer result contains two stores that are
potentially not equal. |
S |
getElseStore()
Returns the result store produced if the
Node
this result belongs to evaluates to false . |
S |
getRegularStore()
The regular result store.
|
S |
getThenStore()
Returns the result store produced if the
Node
this result belongs to evaluates to true . |
boolean |
storeChanged()
|
String |
toString() |
getExceptionalStore, getExceptionalStores, getResultValue, setResultValue
public RegularTransferResult(V value, S resultStore, boolean storeChanged)
RegularTransferResult(AbstractValue, 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: resultStore
is not allowed to be used anywhere outside of this
class (including use through aliases). Complete control over the object is transferred to
this class.
value
- the abstract value produced by the transfer functionresultStore
- regular result storestoreChanged
- whether the store changedRegularTransferResult(AbstractValue, Store, Map, boolean)
public RegularTransferResult(V value, S resultStore)
RegularTransferResult(AbstractValue, Store, Map, boolean)
, using null
for TransferResult.exceptionalStores
and false
for storeChanged
.value
- the abstract value produced by the transfer functionresultStore
- store
RegularTransferResult(AbstractValue, Store, Map, boolean)
public RegularTransferResult(V value, S resultStore, Map<TypeMirror,S> exceptionalStores)
RegularTransferResult(AbstractValue, Store, Map, boolean)
, using false
for storeChanged
.value
- the abstract value produced by the transfer functionresultStore
- store
exceptionalStores
- TransferResult.exceptionalStores
RegularTransferResult(AbstractValue, Store, Map, boolean)
public RegularTransferResult(V value, S resultStore, @Nullable Map<TypeMirror,S> exceptionalStores, boolean storeChanged)
TransferResult
with resultStore
as the resulting store. If the
corresponding Node
is a boolean node, then
resultStore
is used for both the 'then' and 'else' edge.
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: resultStore
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 functionresultStore
- store
exceptionalStores
- TransferResult.exceptionalStores
storeChanged
- storeChanged
public S getRegularStore()
getRegularStore
in class TransferResult<V extends AbstractValue<V>,S extends Store<S>>
Node
corresponding to this transfer function
resultpublic S getThenStore()
TransferResult
Node
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 true
public S getElseStore()
TransferResult
Node
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 false
public boolean containsTwoStores()
TransferResult
true
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()