Class LockStore
java.lang.Object
org.checkerframework.framework.flow.CFAbstractStore<CFValue,LockStore>
org.checkerframework.checker.lock.LockStore
The Lock Store behaves like CFAbstractStore but requires the ability to insert exact annotations.
This is because we want to be able to insert @LockPossiblyHeld to replace @LockHeld, which
normally is not possible in CFAbstractStore since @LockHeld is more specific.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.checkerframework.dataflow.analysis.Store
Store.FlowRule, Store.Kind
-
Field Summary
Modifier and TypeFieldDescriptionprotected boolean
If true, indicates that the store refers to a point in the code inside a constructor or initializer.Fields inherited from class org.checkerframework.framework.flow.CFAbstractStore
analysis, arrayValues, classValues, fieldValues, localVariableValues, methodValues, sequentialSemantics, thisValue
-
Constructor Summary
ConstructorDescriptionLockStore
(LockAnalysis analysis, boolean sequentialSemantics) LockStore
(LockAnalysis analysis, CFAbstractStore<CFValue, LockStore> other) Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptiongetValue
(JavaExpression expr) Returns the current abstract value of a Java expression, ornull
if no information is available.void
void
insertValue
(JavaExpression je, @Nullable CFValue value, boolean permitNondeterministic) protected String
Adds a representation of the internal information of this Store to visualizerviz
.leastUpperBound
(LockStore other) Compute the least upper bound of two stores.void
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.Methods inherited from class org.checkerframework.framework.flow.CFAbstractStore
canAlias, canInsertJavaExpression, clearValue, computeNewValueAndInsert, copy, equals, getFieldValue, getFieldValues, getUid, getValue, getValue, getValue, getValue, getValue, hashCode, initializeMethodParameter, initializeThisValue, insertOrRefine, insertOrRefine, insertOrRefinePermitNondeterministic, insertThisValue, insertValue, insertValue, insertValuePermitNondeterministic, insertValuePermitNondeterministic, isMonotonicUpdate, isSideEffectFree, newFieldValueAfterMethodCall, newMonotonicFieldValueAfterMethodCall, removeConflicting, removeConflicting, removeConflicting, replaceValue, shouldInsert, supersetOf, toString, updateForArrayAssignment, updateForAssignment, updateForFieldAccessAssignment, updateForLocalVariableAssignment, visualize, widenedUpperBound
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.plumelib.util.UniqueId
getClassAndUid
-
Field Details
-
inConstructorOrInitializer
protected boolean inConstructorOrInitializerIf true, indicates that the store refers to a point in the code inside a constructor or initializer. This is useful because constructors and initializers are special with regard to the set of locks that is considered to be held. For example, 'this' is considered to be held inside a constructor.
-
-
Constructor Details
-
LockStore
-
LockStore
Copy constructor.
-
-
Method Details
-
leastUpperBound
Description copied from interface:Store
Compute the least upper bound of two stores.Important: This method must fulfill the following contract:
- Does not change
this
. - Does not change
other
. - Returns a fresh object which is not aliased yet.
- Returns an object of the same (dynamic) type as
this
, even if the signature is more permissive. - Is commutative.
- Specified by:
leastUpperBound
in interfaceStore<LockStore>
- Overrides:
leastUpperBound
in classCFAbstractStore<CFValue,
LockStore>
- Does not change
-
insertLockPossiblyHeld
-
setInConstructorOrInitializer
public void setInConstructorOrInitializer() -
getValue
Description copied from class:CFAbstractStore
Returns the current abstract value of a Java expression, ornull
if no information is available.- Overrides:
getValue
in classCFAbstractStore<CFValue,
LockStore> - Returns:
- the current abstract value of a Java expression, or
null
if no information is available
-
internalVisualize
Description copied from class:CFAbstractStore
Adds a representation of the internal information of this Store to visualizerviz
.- Overrides:
internalVisualize
in classCFAbstractStore<CFValue,
LockStore> - Parameters:
viz
- the visualizer- Returns:
- a representation of the internal information of this
Store
-
updateForMethodCall
public void updateForMethodCall(MethodInvocationNode n, AnnotatedTypeFactory atypeFactory, CFValue val) Description copied from class:CFAbstractStore
Remove any information that might not be valid any more after a method call, and add information guaranteed by the method.- If the method is side-effect-free (as indicated by
SideEffectFree
orPure
), then no information needs to be removed. - Otherwise, all information about field accesses
a.f
needs to be removed, except if the methodn
cannot modifya.f
. This unmodifiability property holds ifa
is a local variable orthis
, andf
is final, or ifa.f
has aMonotonicQualifier
in the current store. Subclasses can change this behavior by overridingCFAbstractStore.newFieldValueAfterMethodCall(FieldAccess, GenericAnnotatedTypeFactory, CFAbstractValue)
. - Furthermore, if the field has a monotonic annotation, then its information can also be kept.
val
in the store.- Overrides:
updateForMethodCall
in classCFAbstractStore<CFValue,
LockStore> - Parameters:
n
- method whose information is being updatedatypeFactory
- the type factory of the associated checkerval
- abstract value of the method call
- If the method is side-effect-free (as indicated by
-
insertValue
Description copied from class:CFAbstractStore
Helper method forCFAbstractStore.insertValue(JavaExpression, CFAbstractValue)
andCFAbstractStore.insertValuePermitNondeterministic(org.checkerframework.dataflow.expression.JavaExpression, javax.lang.model.element.AnnotationMirror)
.Every overriding implementation should start with
if (!shouldInsert) { return; }
- Overrides:
insertValue
in classCFAbstractStore<CFValue,
LockStore> - Parameters:
je
- the expression to insert in the storevalue
- the value of the expressionpermitNondeterministic
- if false, does nothing ifexpr
is nondeterministic; if true, permits nondeterministic expressions to be placed in the store
-