public class LockStore extends CFAbstractStore<CFValue,LockStore>
Store.FlowRule, Store.Kind| Modifier and Type | Field and Description |
|---|---|
protected boolean |
inConstructorOrInitializer
If true, indicates that the store refers to a point in the code inside a constructor or
initializer.
|
analysis, arrayValues, classValues, fieldValues, localVariableValues, methodValues, sequentialSemantics, thisValue| Constructor and Description |
|---|
LockStore(LockAnalysis analysis,
boolean sequentialSemantics) |
LockStore(LockAnalysis analysis,
CFAbstractStore<CFValue,LockStore> other)
Copy constructor.
|
| Modifier and Type | Method and Description |
|---|---|
@Nullable CFValue |
getValue(JavaExpression expr)
Returns the current abstract value of a Java expression, or
null if no information is
available. |
void |
insertLockPossiblyHeld(JavaExpression je) |
void |
insertValue(JavaExpression je,
@Nullable CFValue value)
Add the abstract value
value for the expression expr (correctly deciding
where to store the information depending on the type of the expression expr). |
protected String |
internalVisualize(CFGVisualizer<CFValue,LockStore,?> viz)
Adds a representation of the internal information of this Store to visualizer
viz. |
protected boolean |
isSideEffectFree(AnnotatedTypeFactory atypeFactory,
ExecutableElement method)
Indicates whether the given method is side-effect-free as far as the current store is
concerned.
|
LockStore |
leastUpperBound(LockStore other)
Compute the least upper bound of two stores.
|
void |
setInConstructorOrInitializer() |
void |
updateForMethodCall(MethodInvocationNode n,
AnnotatedTypeFactory atypeFactory,
CFValue val)
Remove any information that might not be valid any more after a method call, and add
information guaranteed by the method.
|
canAlias, canInsertJavaExpression, clearValue, copy, equals, getFieldValue, getFieldValues, getUid, getValue, getValue, getValue, getValue, getValue, hashCode, initializeMethodParameter, initializeThisValue, insertOrRefine, insertThisValue, insertValue, isMonotonicUpdate, removeConflicting, removeConflicting, removeConflicting, replaceValue, supersetOf, toString, updateForArrayAssignment, updateForAssignment, updateForFieldAccessAssignment, updateForLocalVariableAssignment, visualize, widenedUpperBoundprotected boolean inConstructorOrInitializer
public LockStore(LockAnalysis analysis, boolean sequentialSemantics)
public LockStore(LockAnalysis analysis, CFAbstractStore<CFValue,LockStore> other)
public LockStore leastUpperBound(LockStore other)
StoreImportant: This method must fulfill the following contract:
this.
other.
this, even if the signature is
more permissive.
leastUpperBound in interface Store<LockStore>leastUpperBound in class CFAbstractStore<CFValue,LockStore>public void insertLockPossiblyHeld(JavaExpression je)
public void setInConstructorOrInitializer()
public @Nullable CFValue getValue(JavaExpression expr)
CFAbstractStorenull if no information is
available.getValue in class CFAbstractStore<CFValue,LockStore>null if no information is
availableprotected String internalVisualize(CFGVisualizer<CFValue,LockStore,?> viz)
CFAbstractStoreviz.internalVisualize in class CFAbstractStore<CFValue,LockStore>viz - the visualizerStoreprotected boolean isSideEffectFree(AnnotatedTypeFactory atypeFactory, ExecutableElement method)
CFAbstractStoreisSideEffectFree in class CFAbstractStore<CFValue,LockStore>atypeFactory - the type factory used to retrieve annotations on the method elementmethod - the method elementpublic void updateForMethodCall(MethodInvocationNode n, AnnotatedTypeFactory atypeFactory, CFValue val)
CFAbstractStoreSideEffectFree or Pure), then no information needs to be removed.
a.f needs to be removed, except
if the method n cannot modify a.f (e.g., if a is a local
variable or this, and f is final).
val in the store.updateForMethodCall in class CFAbstractStore<CFValue,LockStore>public void insertValue(JavaExpression je, @Nullable CFValue value)
CFAbstractStorevalue for the expression expr (correctly deciding
where to store the information depending on the type of the expression expr).
This method does not take care of removing other information that might be influenced by changes to certain parts of the state.
If there is already a value v present for expr, then the stronger of the
new and old value are taken (according to the lattice). Note that this happens per hierarchy,
and if the store already contains information about a hierarchy for which value does
not contain information, then that information is preserved.
insertValue in class CFAbstractStore<CFValue,LockStore>