Interface TransferFunction<V extends AbstractValue<V>,S extends Store<S>>
- Type Parameters:
V
- type of the abstract value that is trackedS
- the store type used in the analysis
- All Superinterfaces:
NodeVisitor<TransferResult<V,
S>, TransferInput<V, S>>
- All Known Subinterfaces:
BackwardTransferFunction<V,
,S> ForwardTransferFunction<V,
S>
- All Known Implementing Classes:
AccumulationTransfer
,AliasingTransfer
,BusyExprTransfer
,CalledMethodsTransfer
,CFAbstractTransfer
,CFTransfer
,ConstantPropagationTransfer
,FormatterTransfer
,I18nFormatterTransfer
,IndexAbstractTransfer
,InitializationTransfer
,InitializedFieldsTransfer
,KeyForTransfer
,LessThanTransfer
,LiveVarTransfer
,LockTransfer
,LowerBoundTransfer
,MustCallTransfer
,NullnessTransfer
,ReachingDefinitionTransfer
,RegexTransfer
,ResourceLeakTransfer
,SameLenTransfer
,SearchIndexTransfer
,SignatureTransfer
,UpperBoundTransfer
,ValueTransfer
public interface TransferFunction<V extends AbstractValue<V>,S extends Store<S>>
extends NodeVisitor<TransferResult<V,S>,TransferInput<V,S>>
Interface of a transfer function for the abstract interpretation used for the flow analysis.
A transfer function consists of the following components:
- Initial store method(s) that determines which initial store should be used in the org.checkerframework.dataflow analysis.
- A function for every
Node
type that determines the behavior of the org.checkerframework.dataflow analysis in that case. This method takes aNode
and an incoming store, and produces aRegularTransferResult
.
Note: Initial store method(s) are different between forward and backward transfer
functions. Thus, this interface doesn't define any initial store method(s). ForwardTransferFunction
and BackwardTransferFunction
will create their own initial store
method(s).
Important: The individual transfer functions ( visit*
) are allowed to use
(and modify) the stores contained in the argument passed; the ownership is transferred from the
caller to that function.
-
Method Summary
Methods inherited from interface org.checkerframework.dataflow.cfg.node.NodeVisitor
visitArrayAccess, visitArrayCreation, visitArrayType, visitAssertionError, visitAssignment, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCase, visitCharacterLiteral, visitClassDeclaration, visitClassName, visitConditionalAnd, visitConditionalNot, visitConditionalOr, visitDoubleLiteral, visitEqualTo, visitExplicitThis, visitExpressionStatement, visitFieldAccess, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThis, visitInstanceOf, visitIntegerDivision, visitIntegerLiteral, visitIntegerRemainder, visitLambdaResultExpression, visitLeftShift, visitLessThan, visitLessThanOrEqual, visitLocalVariable, visitLongLiteral, visitMarker, visitMemberReference, visitMethodAccess, visitMethodInvocation, visitNarrowingConversion, visitNotEqual, visitNullChk, visitNullLiteral, visitNumericalAddition, visitNumericalMinus, visitNumericalMultiplication, visitNumericalPlus, visitNumericalSubtraction, visitObjectCreation, visitPackageName, visitParameterizedType, visitPrimitiveType, visitReturn, visitShortLiteral, visitSignedRightShift, visitStringConcatenate, visitStringConversion, visitStringLiteral, visitSuper, visitSwitchExpressionNode, visitSynchronized, visitTernaryExpression, visitThrow, visitTypeCast, visitUnsignedRightShift, visitVariableDeclaration, visitWideningConversion