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, widenedUpperBound
protected boolean inConstructorOrInitializer
public LockStore(LockAnalysis analysis, boolean sequentialSemantics)
public LockStore(LockAnalysis analysis, CFAbstractStore<CFValue,LockStore> other)
public LockStore leastUpperBound(LockStore other)
Store
Important: 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)
CFAbstractStore
null
if no information is
available.getValue
in class CFAbstractStore<CFValue,LockStore>
null
if no information is
availableprotected String internalVisualize(CFGVisualizer<CFValue,LockStore,?> viz)
CFAbstractStore
viz
.internalVisualize
in class CFAbstractStore<CFValue,LockStore>
viz
- the visualizerStore
protected boolean isSideEffectFree(AnnotatedTypeFactory atypeFactory, ExecutableElement method)
CFAbstractStore
isSideEffectFree
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)
CFAbstractStore
SideEffectFree
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)
CFAbstractStore
value
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>