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 |
protected javax.lang.model.element.AnnotationMirror |
NONNULL
Annotations of the non-null type system.
|
protected javax.lang.model.element.AnnotationMirror |
NULLABLE
Annotations of the non-null type system.
|
atypeFactory
Constructor and Description |
---|
NullnessTransfer(NullnessAnalysis 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, visitAssignment
addInformationFromPreconditions, 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, visitWideningConversion
visitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, 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, visitValueLiteral
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
visitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, 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
protected final javax.lang.model.element.AnnotationMirror NONNULL
protected final javax.lang.model.element.AnnotationMirror NULLABLE
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)
InitializationTransfer
visitFieldAccess
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>