T
- the type of the transfer functionpublic class InitializationTransfer<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,T extends InitializationTransfer<V,T,S>,S extends InitializationStore<V,S>>
extends org.checkerframework.framework.flow.CFAbstractTransfer<V,S,T>
CFAbstractTransfer
and tracks InitializationStore
s. In addition to the features of CFAbstractTransfer
, this transfer
function also track which fields of the current class ('self' receiver) have been initialized.
More precisely, the following refinements are performed:
InitializationStore.insertValue(FlowExpressions.Receiver, CFAbstractValue)
).
InitializationStore.insertValue(FlowExpressions.Receiver, CFAbstractValue)
).
InitializationStore
Modifier and Type | Field and Description |
---|---|
protected InitializationAnnotatedTypeFactory<?,?,?,?> |
atypeFactory |
Constructor and Description |
---|
InitializationTransfer(org.checkerframework.framework.flow.CFAbstractAnalysis<V,S,T> analysis) |
Modifier and Type | Method and Description |
---|---|
protected List<VariableElement> |
initializedFieldsAfterCall(org.checkerframework.dataflow.cfg.node.MethodInvocationNode node,
org.checkerframework.dataflow.analysis.ConditionalTransferResult<V,S> transferResult)
Returns the fields that can safely be considered initialized after the method call
node . |
protected boolean |
isNotFullyInitializedReceiver(MethodTree methodTree) |
protected void |
markInvariantFieldsAsInitialized(List<VariableElement> result,
TypeElement clazzElem)
Adds all the fields of the class
clazzElem that have the 'invariant annotation' to
the set of initialized fields result . |
org.checkerframework.dataflow.analysis.TransferResult<V,S> |
visitAssignment(org.checkerframework.dataflow.cfg.node.AssignmentNode n,
org.checkerframework.dataflow.analysis.TransferInput<V,S> in) |
org.checkerframework.dataflow.analysis.TransferResult<V,S> |
visitFieldAccess(org.checkerframework.dataflow.cfg.node.FieldAccessNode n,
org.checkerframework.dataflow.analysis.TransferInput<V,S> p)
If an invariant field is initialized and has the invariant annotation, than it has at least
the invariant annotation.
|
org.checkerframework.dataflow.analysis.TransferResult<V,S> |
visitMethodInvocation(org.checkerframework.dataflow.cfg.node.MethodInvocationNode n,
org.checkerframework.dataflow.analysis.TransferInput<V,S> in) |
addInformationFromPreconditions, finishValue, finishValue, getValueFromFactory, getValueWithSameAnnotations, initialStore, moreSpecificValue, processCommonAssignment, processConditionalPostconditions, processPostconditions, setFixedInitialStore, splitAssignments, strengthenAnnotationOfEqualTo, usesSequentialSemantics, visitArrayAccess, visitCase, visitClassName, visitConditionalNot, visitEqualTo, visitLambdaResultExpression, visitLocalVariable, visitNarrowingConversion, visitNode, visitNotEqual, visitObjectCreation, visitReturn, visitStringConcatenateAssignment, visitStringConversion, visitTernaryExpression, visitThisLiteral, visitVariableDeclaration, visitWideningConversion
visitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, visitClassDeclaration, visitConditionalAnd, visitConditionalOr, visitDoubleLiteral, visitExplicitThisLiteral, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThisLiteral, visitInstanceOf, visitIntegerDivision, visitIntegerLiteral, visitIntegerRemainder, visitLeftShift, visitLessThan, visitLessThanOrEqual, visitLongLiteral, visitMarker, visitMemberReference, visitMethodAccess, visitNullChk, visitNullLiteral, visitNumericalAddition, visitNumericalMinus, visitNumericalMultiplication, visitNumericalPlus, visitNumericalSubtraction, visitPackageName, visitParameterizedType, visitPrimitiveType, visitShortLiteral, visitSignedRightShift, visitStringConcatenate, visitStringLiteral, visitSuper, visitSynchronized, visitThrow, visitTypeCast, visitUnsignedRightShift, visitValueLiteral
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
visitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, visitClassDeclaration, visitConditionalAnd, visitConditionalOr, visitDoubleLiteral, visitExplicitThisLiteral, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThisLiteral, visitInstanceOf, visitIntegerDivision, visitIntegerLiteral, visitIntegerRemainder, visitLeftShift, visitLessThan, visitLessThanOrEqual, visitLongLiteral, visitMarker, visitMemberReference, visitMethodAccess, visitNullChk, visitNullLiteral, visitNumericalAddition, visitNumericalMinus, visitNumericalMultiplication, visitNumericalPlus, visitNumericalSubtraction, visitPackageName, visitParameterizedType, visitPrimitiveType, visitShortLiteral, visitSignedRightShift, visitStringConcatenate, visitStringLiteral, visitSuper, visitSynchronized, visitThrow, visitTypeCast, visitUnsignedRightShift
protected final InitializationAnnotatedTypeFactory<?,?,?,?> atypeFactory
protected boolean isNotFullyInitializedReceiver(MethodTree methodTree)
protected List<VariableElement> initializedFieldsAfterCall(org.checkerframework.dataflow.cfg.node.MethodInvocationNode node, org.checkerframework.dataflow.analysis.ConditionalTransferResult<V,S> transferResult)
node
.protected void markInvariantFieldsAsInitialized(List<VariableElement> result, TypeElement clazzElem)
clazzElem
that have the 'invariant annotation' to
the set of initialized fields result
.public org.checkerframework.dataflow.analysis.TransferResult<V,S> visitAssignment(org.checkerframework.dataflow.cfg.node.AssignmentNode n, org.checkerframework.dataflow.analysis.TransferInput<V,S> in)
visitAssignment
in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>>,org.checkerframework.dataflow.analysis.TransferInput<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>>>
visitAssignment
in class org.checkerframework.framework.flow.CFAbstractTransfer<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>,T extends InitializationTransfer<V,T,S>>
public org.checkerframework.dataflow.analysis.TransferResult<V,S> visitFieldAccess(org.checkerframework.dataflow.cfg.node.FieldAccessNode n, org.checkerframework.dataflow.analysis.TransferInput<V,S> p)
visitFieldAccess
in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>>,org.checkerframework.dataflow.analysis.TransferInput<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>>>
visitFieldAccess
in class org.checkerframework.framework.flow.CFAbstractTransfer<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>,T extends InitializationTransfer<V,T,S>>
public org.checkerframework.dataflow.analysis.TransferResult<V,S> visitMethodInvocation(org.checkerframework.dataflow.cfg.node.MethodInvocationNode n, org.checkerframework.dataflow.analysis.TransferInput<V,S> in)
visitMethodInvocation
in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>>,org.checkerframework.dataflow.analysis.TransferInput<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>>>
visitMethodInvocation
in class org.checkerframework.framework.flow.CFAbstractTransfer<V extends org.checkerframework.framework.flow.CFAbstractValue<V>,S extends InitializationStore<V,S>,T extends InitializationTransfer<V,T,S>>