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,
boolean permitNondeterministic)
|
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, insertOrRefine, insertOrRefinePermitNondeterministic, insertThisValue, insertValue, insertValue, insertValuePermitNondeterministic, insertValuePermitNondeterministic, isMonotonicUpdate, removeConflicting, removeConflicting, removeConflicting, replaceValue, shouldInsert, 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, boolean permitNondeterministic)
CFAbstractStore
CFAbstractStore.insertValue(JavaExpression, CFAbstractValue)
and CFAbstractStore.insertValuePermitNondeterministic(org.checkerframework.dataflow.expression.JavaExpression, javax.lang.model.element.AnnotationMirror)
.
Every overriding implementation should start with
if (!shouldInsert) {
return;
}
insertValue
in class CFAbstractStore<CFValue,LockStore>
je
- the expression to insert in the storevalue
- the value of the expressionpermitNondeterministic
- if false, does nothing if expr
is nondeterministic; if
true, permits nondeterministic expressions to be placed in the store