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 NullnessAnalysis |
analysis
Type-specific version of super.analysis.
|
protected KeyForAnnotatedTypeFactory |
keyForTypeFactory |
protected AnnotationMirror |
NONNULL
Annotations of the non-null type system.
|
protected AnnotationMirror |
NULLABLE
Annotations of the non-null type system.
|
atypeFactorysequentialSemantics| Constructor and Description |
|---|
NullnessTransfer(NullnessAnalysis analysis) |
initializedFieldsAfterCall, isNotFullyInitializedReceiver, markInvariantFieldsAsInitialized, visitAssignmentaddInformationFromPreconditions, finishValue, getTypeFactoryOfSubchecker, getValueFromFactory, getValueWithSameAnnotations, initialStore, moreSpecificValue, processCommonAssignment, processConditionalPostconditions, processPostconditions, setFixedInitialStore, splitAssignments, visitCase, visitClassName, visitConditionalNot, visitEqualTo, visitInstanceOf, visitLocalVariable, visitNarrowingConversion, visitNode, visitNotEqual, visitStringConcatenateAssignment, visitStringConversion, visitTernaryExpression, visitThisLiteral, visitVariableDeclaration, visitWideningConversionvisitArrayCreation, 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, visitObjectCreation, 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, 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, visitObjectCreation, visitPackageName, visitParameterizedType, visitPrimitiveType, visitShortLiteral, visitSignedRightShift, visitStringConcatenate, visitStringLiteral, visitSuper, visitSynchronized, visitTypeCast, visitUnsignedRightShiftprotected final NullnessAnalysis analysis
protected final AnnotationMirror NONNULL
protected final AnnotationMirror NULLABLE
protected final KeyForAnnotatedTypeFactory keyForTypeFactory
public NullnessTransfer(NullnessAnalysis analysis)
protected void makeNonNull(NullnessStore store, Node node)
Node to non-null in the given store. Calls
to this method implement case 2.protected void makeNonNull(TransferResult<NullnessValue,NullnessStore> result, Node node)
protected NullnessValue finishValue(NullnessValue value, NullnessStore store)
CFAbstractTransfervalue
as the result of the transfer function. By default, the value is not
changed but subclasses might decide to implement some functionality. The
store at this position is also passed.finishValue in class CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>protected TransferResult<NullnessValue,NullnessStore> strengthenAnnotationOfEqualTo(TransferResult<NullnessValue,NullnessStore> res, Node firstNode, Node secondNode, NullnessValue firstValue, NullnessValue secondValue, boolean notEqualTo)
secondNode if the annotation
secondValue is less precise than firstvalue. This is
possible, if secondNode is an expression that is tracked by the
store (e.g., a local variable or a field).
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 CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>res - The previous result.notEqualTo - If true, indicates that the logic is flipped (i.e., the
information is added to the elseStore instead of the
thenStore) for a not-equal comparison.null.public TransferResult<NullnessValue,NullnessStore> visitArrayAccess(ArrayAccessNode n, TransferInput<NullnessValue,NullnessStore> p)
visitArrayAccess in interface NodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>visitArrayAccess in class CFAbstractTransfer<NullnessValue,NullnessStore,NullnessTransfer>public TransferResult<NullnessValue,NullnessStore> visitMethodAccess(MethodAccessNode n, TransferInput<NullnessValue,NullnessStore> p)
visitMethodAccess in interface NodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>visitMethodAccess in class AbstractNodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>public TransferResult<NullnessValue,NullnessStore> visitFieldAccess(FieldAccessNode n, TransferInput<NullnessValue,NullnessStore> p)
InitializationTransfervisitFieldAccess in interface NodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>visitFieldAccess in class InitializationTransfer<NullnessValue,NullnessTransfer,NullnessStore>public TransferResult<NullnessValue,NullnessStore> visitThrow(ThrowNode n, TransferInput<NullnessValue,NullnessStore> p)
visitThrow in interface NodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>visitThrow in class AbstractNodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>public TransferResult<NullnessValue,NullnessStore> visitMethodInvocation(MethodInvocationNode n, TransferInput<NullnessValue,NullnessStore> in)
visitMethodInvocation in interface NodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>visitMethodInvocation in class InitializationTransfer<NullnessValue,NullnessTransfer,NullnessStore>public TransferResult<NullnessValue,NullnessStore> visitReturn(ReturnNode n, TransferInput<NullnessValue,NullnessStore> in)
visitReturn in interface NodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>visitReturn in class AbstractNodeVisitor<TransferResult<NullnessValue,NullnessStore>,TransferInput<NullnessValue,NullnessStore>>