public class NullnessTransfer extends InitializationTransfer<NullnessValue,NullnessTransfer,NullnessStore>
null literal, then that expression can
safely be considered NonNull if the result of the comparison is false.
NullPointerException.
PolyNull is known to be Nullable.
| Modifier and Type | Field and Description |
|---|---|
protected KeyForAnnotatedTypeFactory |
keyForTypeFactory
The type factory for the map key analysis.
|
protected org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedDeclaredType |
MAP_TYPE
Java's Map interface.
|
protected AnnotationMirror |
NONNULL
Annotations of the non-null type system.
|
protected AnnotationMirror |
NULLABLE
Annotations of the non-null type system.
|
protected org.checkerframework.framework.type.GenericAnnotatedTypeFactory<NullnessValue,NullnessStore,NullnessTransfer,? extends org.checkerframework.framework.flow.CFAbstractAnalysis<NullnessValue,NullnessStore,NullnessTransfer>> |
nullnessTypeFactory
The type factory for the nullness analysis that was passed to the constructor.
|
atypeFactory| Constructor and Description |
|---|
NullnessTransfer(NullnessAnalysis analysis)
Create a new NullnessTransfer for the given analysis.
|
| Modifier and Type | Method and Description |
|---|---|
protected NullnessValue |
finishValue(NullnessValue value,
NullnessStore store) |
protected void |
makeNonNull(NullnessStore store,
org.checkerframework.dataflow.cfg.node.Node node)
Sets a given
Node to non-null in the given store. |
protected void |
makeNonNull(org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> result,
org.checkerframework.dataflow.cfg.node.Node node)
Sets a given
Node node to non-null in the given TransferResult. |
protected org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
strengthenAnnotationOfEqualTo(org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> res,
org.checkerframework.dataflow.cfg.node.Node firstNode,
org.checkerframework.dataflow.cfg.node.Node secondNode,
NullnessValue firstValue,
NullnessValue secondValue,
boolean notEqualTo) |
org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
visitArrayAccess(org.checkerframework.dataflow.cfg.node.ArrayAccessNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p) |
org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
visitFieldAccess(org.checkerframework.dataflow.cfg.node.FieldAccessNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> 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<NullnessValue,NullnessStore> |
visitInstanceOf(org.checkerframework.dataflow.cfg.node.InstanceOfNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p) |
org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
visitMethodAccess(org.checkerframework.dataflow.cfg.node.MethodAccessNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p) |
org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
visitMethodInvocation(org.checkerframework.dataflow.cfg.node.MethodInvocationNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> in) |
org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
visitReturn(org.checkerframework.dataflow.cfg.node.ReturnNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> in) |
org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> |
visitThrow(org.checkerframework.dataflow.cfg.node.ThrowNode n,
org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p) |
initializedFieldsAfterCall, isNotFullyInitializedReceiver, markInvariantFieldsAsInitialized, visitAssignmentaddInformationFromPreconditions, finishValue, getValueFromFactory, getValueWithSameAnnotations, initialStore, moreSpecificValue, processCommonAssignment, processConditionalPostconditions, processPostconditions, setFixedInitialStore, splitAssignments, usesSequentialSemantics, visitCase, visitClassName, visitConditionalNot, visitEqualTo, visitLambdaResultExpression, visitLocalVariable, visitNarrowingConversion, visitNode, visitNotEqual, visitObjectCreation, visitStringConcatenateAssignment, visitStringConversion, visitTernaryExpression, visitThisLiteral, visitVariableDeclaration, visitWideningConversionvisitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, visitClassDeclaration, visitConditionalAnd, visitConditionalOr, visitDoubleLiteral, visitExplicitThisLiteral, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThisLiteral, visitIntegerDivision, visitIntegerLiteral, visitIntegerRemainder, visitLeftShift, visitLessThan, visitLessThanOrEqual, visitLongLiteral, visitMarker, visitMemberReference, visitNullChk, visitNullLiteral, visitNumericalAddition, visitNumericalMinus, visitNumericalMultiplication, visitNumericalPlus, visitNumericalSubtraction, visitPackageName, visitParameterizedType, visitPrimitiveType, visitShortLiteral, visitSignedRightShift, visitStringConcatenate, visitStringLiteral, visitSuper, visitSynchronized, visitTypeCast, visitUnsignedRightShift, visitValueLiteralclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitvisitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, visitClassDeclaration, visitConditionalAnd, visitConditionalOr, visitDoubleLiteral, visitExplicitThisLiteral, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThisLiteral, visitIntegerDivision, visitIntegerLiteral, visitIntegerRemainder, visitLeftShift, visitLessThan, visitLessThanOrEqual, visitLongLiteral, visitMarker, visitMemberReference, visitNullChk, visitNullLiteral, visitNumericalAddition, visitNumericalMinus, visitNumericalMultiplication, visitNumericalPlus, visitNumericalSubtraction, visitPackageName, visitParameterizedType, visitPrimitiveType, visitShortLiteral, visitSignedRightShift, visitStringConcatenate, visitStringLiteral, visitSuper, visitSynchronized, visitTypeCast, visitUnsignedRightShiftprotected final AnnotationMirror NONNULL
protected final AnnotationMirror NULLABLE
protected final org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedDeclaredType MAP_TYPE
The qualifiers in this type don't matter -- it is not used as a fully-annotated AnnotatedDeclaredType, but just passed to asSuper().
protected final org.checkerframework.framework.type.GenericAnnotatedTypeFactory<NullnessValue,NullnessStore,NullnessTransfer,? extends org.checkerframework.framework.flow.CFAbstractAnalysis<NullnessValue,NullnessStore,NullnessTransfer>> nullnessTypeFactory
protected final KeyForAnnotatedTypeFactory keyForTypeFactory
public NullnessTransfer(NullnessAnalysis analysis)
protected void makeNonNull(NullnessStore store, org.checkerframework.dataflow.cfg.node.Node node)
Node to non-null in the given store. Calls to this method
implement case 2.protected void makeNonNull(org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> result, org.checkerframework.dataflow.cfg.node.Node node)
Node node to non-null in the given TransferResult.protected NullnessValue finishValue(NullnessValue value, NullnessStore store)
finishValue in class org.checkerframework.framework.flow.CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>protected org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> strengthenAnnotationOfEqualTo(org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> res, org.checkerframework.dataflow.cfg.node.Node firstNode, org.checkerframework.dataflow.cfg.node.Node secondNode, NullnessValue firstValue, NullnessValue secondValue, boolean notEqualTo)
Furthermore, this method refines the type to NonNull for the appropriate branch if
an expression is compared to the null literal (listed as case 1 in the class
description).
strengthenAnnotationOfEqualTo in class org.checkerframework.framework.flow.CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitArrayAccess(org.checkerframework.dataflow.cfg.node.ArrayAccessNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p)
visitArrayAccess in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitArrayAccess in class org.checkerframework.framework.flow.CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitInstanceOf(org.checkerframework.dataflow.cfg.node.InstanceOfNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p)
visitInstanceOf in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitInstanceOf in class org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitMethodAccess(org.checkerframework.dataflow.cfg.node.MethodAccessNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p)
visitMethodAccess in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitMethodAccess in class org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitFieldAccess(org.checkerframework.dataflow.cfg.node.FieldAccessNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p)
InitializationTransfervisitFieldAccess in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitFieldAccess in class InitializationTransfer<NullnessValue,NullnessTransfer,NullnessStore>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitThrow(org.checkerframework.dataflow.cfg.node.ThrowNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> p)
visitThrow in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitThrow in class org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitMethodInvocation(org.checkerframework.dataflow.cfg.node.MethodInvocationNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> in)
visitMethodInvocation in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitMethodInvocation in class InitializationTransfer<NullnessValue,NullnessTransfer,NullnessStore>public org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore> visitReturn(org.checkerframework.dataflow.cfg.node.ReturnNode n, org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore> in)
visitReturn in interface org.checkerframework.dataflow.cfg.node.NodeVisitor<org.checkerframework.dataflow.analysis.TransferResult<NullnessValue,NullnessStore>,org.checkerframework.dataflow.analysis.TransferInput<NullnessValue,NullnessStore>>visitReturn in class org.checkerframework.framework.flow.CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>