Class InitializationStore<V extends CFAbstractValue<V>,S extends InitializationStore<V,S>>  
java.lang.Object
org.checkerframework.framework.flow.CFAbstractStore<V,S>
 
org.checkerframework.checker.initialization.InitializationStore<V,S> 
- All Implemented Interfaces:
- Store<S>,- org.plumelib.util.UniqueId
- Direct Known Subclasses:
- NullnessStore
public class InitializationStore<V extends CFAbstractValue<V>,S extends InitializationStore<V,S>>  
extends CFAbstractStore<V,S> 
A store that extends 
CFAbstractStore and additionally tracks which fields of the 'self'
 reference have been initialized.- See Also:
- 
Nested Class SummaryNested classes/interfaces inherited from interface org.checkerframework.dataflow.analysis.StoreStore.FlowRule, Store.Kind
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected final Set<VariableElement> The set of fields that are initialized.protected final Map<FieldAccess, V> The set of fields that have the 'invariant' annotation, and their value.Fields inherited from class org.checkerframework.framework.flow.CFAbstractStoreanalysis, arrayValues, classValues, fieldValues, localVariableValues, methodCallExpressions, sequentialSemantics, thisValue
- 
Constructor SummaryConstructorsConstructorDescriptionInitializationStore(CFAbstractAnalysis<V, S, ?> analysis, boolean sequentialSemantics) Creates a new InitializationStore.InitializationStore(S other) A copy constructor.
- 
Method SummaryModifier and TypeMethodDescriptionvoidMark the field identified by the elementfas initialized (the caller needs to ensure that the field belongs to the current class, or is a static field).voidaddInitializedField(FieldAccess field) Mark the field identified by the elementfieldas initialized if it belongs to the current class, or is static (in which case there is no aliasing issue and we can just add all static fields).CFAbstractAnalysis<V, S, ?> Returns the analysis associated with this store.voidinsertValue(JavaExpression je, V value, boolean permitNondeterministic) protected StringinternalVisualize(CFGVisualizer<V, S, ?> viz) Adds a representation of the internal information of this Store to visualizerviz.booleanIs the field identified by the elementfinitialized?leastUpperBound(S other) Compute the least upper bound of two stores.protected booleansupersetOf(CFAbstractStore<V, S> o) Returns true iff thisCFAbstractStorecontains a superset of the map entries of the argumentCFAbstractStore.voidupdateForMethodCall(MethodInvocationNode n, AnnotatedTypeFactory atypeFactory, V 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.CFAbstractStorecanAlias, canInsertJavaExpression, clearValue, computeNewValueAndInsert, copy, equals, getFieldValue, getFieldValues, getUid, getValue, 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, toString, updateForArrayAssignment, updateForAssignment, updateForFieldAccessAssignment, updateForLocalVariableAssignment, visualize, widenedUpperBoundMethods inherited from class java.lang.Objectclone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface org.plumelib.util.UniqueIdgetClassAndUid
- 
Field Details- 
initializedFieldsThe set of fields that are initialized.
- 
invariantFieldsThe set of fields that have the 'invariant' annotation, and their value.
 
- 
- 
Constructor Details- 
InitializationStoreCreates a new InitializationStore.- Parameters:
- analysis- the analysis class this store belongs to
- sequentialSemantics- should the analysis use sequential Java semantics?
 
- 
InitializationStoreA copy constructor.
 
- 
- 
Method Details- 
insertValueHelper 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; }If the receiver is a field, and has an invariant annotation, then it can be considered initialized. - Overrides:
- insertValuein class- CFAbstractStore<V extends CFAbstractValue<V>,- S extends InitializationStore<V, - S>> 
- Parameters:
- je- the expression to insert in the store
- value- the value of the expression
- permitNondeterministic- if false, does nothing if- expris nondeterministic; if true, permits nondeterministic expressions to be placed in the store
 
- 
updateForMethodCallRemove 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 SideEffectFreeorPure), then no information needs to be removed.
- Otherwise, all information about field accesses a.fneeds to be removed, except if the methodncannot modifya.f. This unmodifiability property holds ifais a local variable orthis, andfis final, or ifa.fhas aMonotonicQualifierin 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.
 valin the store.Additionally, the InitializationStorekeeps all field values for fields that have the 'invariant' annotation.- Overrides:
- updateForMethodCallin class- CFAbstractStore<V extends CFAbstractValue<V>,- S extends InitializationStore<V, - S>> 
- Parameters:
- n- method whose information is being updated
- atypeFactory- the type factory of the associated checker
- val- abstract value of the method call
 
- If the method is side-effect-free (as indicated by 
- 
addInitializedFieldMark the field identified by the elementfieldas initialized if it belongs to the current class, or is static (in which case there is no aliasing issue and we can just add all static fields).- Parameters:
- field- a field that is initialized
 
- 
addInitializedFieldMark the field identified by the elementfas initialized (the caller needs to ensure that the field belongs to the current class, or is a static field).- Parameters:
- f- a field that is initialized
 
- 
isFieldInitializedIs the field identified by the elementfinitialized?
- 
supersetOfDescription copied from class:CFAbstractStoreReturns true iff thisCFAbstractStorecontains a superset of the map entries of the argumentCFAbstractStore. Note that we test the entry keys and values by Java equality, not by any subtype relationship. This method is used primarily to simplify the equals predicate.- Overrides:
- supersetOfin class- CFAbstractStore<V extends CFAbstractValue<V>,- S extends InitializationStore<V, - S>> 
 
- 
leastUpperBoundDescription copied from interface:StoreCompute 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:
- leastUpperBoundin interface- Store<V extends CFAbstractValue<V>>
- Overrides:
- leastUpperBoundin class- CFAbstractStore<V extends CFAbstractValue<V>,- S extends InitializationStore<V, - S>> 
 
- Does not change 
- 
internalVisualizeDescription copied from class:CFAbstractStoreAdds a representation of the internal information of this Store to visualizerviz.- Overrides:
- internalVisualizein class- CFAbstractStore<V extends CFAbstractValue<V>,- S extends InitializationStore<V, - S>> 
- Parameters:
- viz- the visualizer
- Returns:
- a representation of the internal information of this Store
 
- 
getAnalysisReturns the analysis associated with this store.- Returns:
- the analysis associated with this store
 
 
-