Class MustCallTransfer
- java.lang.Object
-
- org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor<TransferResult<V,S>,TransferInput<V,S>>
-
- org.checkerframework.framework.flow.CFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
- org.checkerframework.framework.flow.CFTransfer
-
- org.checkerframework.checker.mustcall.MustCallTransfer
-
- All Implemented Interfaces:
ForwardTransferFunction<CFValue,CFStore>,TransferFunction<CFValue,CFStore>,NodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>
public class MustCallTransfer extends CFTransfer
Transfer function for the must-call type system. Its primary purposes are (1) to create temporary variables for expressions (which allow those expressions to have refined information in the store, which the consistency checker can use), and (2) to reset refined information when a method annotated with @CreatesMustCallFor is called.
-
-
Field Summary
-
Fields inherited from class org.checkerframework.framework.flow.CFAbstractTransfer
analysis, sequentialSemantics
-
-
Constructor Summary
Constructors Constructor Description MustCallTransfer(CFAnalysis analysis)Create a MustCallTransfer.
-
Method Summary
-
Methods inherited from class org.checkerframework.framework.flow.CFAbstractTransfer
addInformationFromPreconditions, createTransferResult, finishValue, finishValue, getNarrowedValue, getValueFromFactory, getWidenedValue, initialStore, insertIntoStores, isNotFullyInitializedReceiver, moreSpecificValue, processCommonAssignment, processConditionalPostconditions, processPostconditions, recreateTransferResult, setFixedInitialStore, splitAssignments, strengthenAnnotationOfEqualTo, usesSequentialSemantics, visitArrayAccess, visitCase, visitClassName, visitConditionalNot, visitDeconstructorPattern, visitEqualTo, visitExpressionStatement, visitFieldAccess, visitInstanceOf, visitLambdaResultExpression, visitLocalVariable, visitNarrowingConversion, visitNode, visitNotEqual, visitReturn, visitThis, visitVariableDeclaration, visitWideningConversion
-
Methods inherited from class org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor
visitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, visitClassDeclaration, visitConditionalAnd, visitConditionalOr, visitDoubleLiteral, visitExplicitThis, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThis, 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
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.checkerframework.dataflow.cfg.node.NodeVisitor
visitArrayCreation, visitArrayType, visitAssertionError, visitBitwiseAnd, visitBitwiseComplement, visitBitwiseOr, visitBitwiseXor, visitBooleanLiteral, visitCharacterLiteral, visitClassDeclaration, visitConditionalAnd, visitConditionalOr, visitDoubleLiteral, visitExplicitThis, visitFloatingDivision, visitFloatingRemainder, visitFloatLiteral, visitGreaterThan, visitGreaterThanOrEqual, visitImplicitThis, 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
-
-
-
-
Constructor Detail
-
MustCallTransfer
public MustCallTransfer(CFAnalysis analysis)
Create a MustCallTransfer.- Parameters:
analysis- the analysis
-
-
Method Detail
-
visitStringConversion
public TransferResult<CFValue,CFStore> visitStringConversion(StringConversionNode n, TransferInput<CFValue,CFStore> p)
- Specified by:
visitStringConversionin interfaceNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>- Overrides:
visitStringConversionin classCFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
visitAssignment
public TransferResult<CFValue,CFStore> visitAssignment(AssignmentNode n, TransferInput<CFValue,CFStore> in)
- Specified by:
visitAssignmentin interfaceNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>- Overrides:
visitAssignmentin classCFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
visitMethodInvocation
public TransferResult<CFValue,CFStore> visitMethodInvocation(MethodInvocationNode n, TransferInput<CFValue,CFStore> in)
- Specified by:
visitMethodInvocationin interfaceNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>- Overrides:
visitMethodInvocationin classCFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
visitObjectCreation
public TransferResult<CFValue,CFStore> visitObjectCreation(ObjectCreationNode node, TransferInput<CFValue,CFStore> input)
- Specified by:
visitObjectCreationin interfaceNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>- Overrides:
visitObjectCreationin classCFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
visitTernaryExpression
public TransferResult<CFValue,CFStore> visitTernaryExpression(TernaryExpressionNode node, TransferInput<CFValue,CFStore> input)
- Specified by:
visitTernaryExpressionin interfaceNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>- Overrides:
visitTernaryExpressionin classCFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
visitSwitchExpressionNode
public TransferResult<CFValue,CFStore> visitSwitchExpressionNode(SwitchExpressionNode node, TransferInput<CFValue,CFStore> input)
- Specified by:
visitSwitchExpressionNodein interfaceNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>- Overrides:
visitSwitchExpressionNodein classCFAbstractTransfer<CFValue,CFStore,CFTransfer>
-
updateStoreWithTempVar
public void updateStoreWithTempVar(TransferResult<CFValue,CFStore> result, Node node)
This method either creates or looks up the temp var t for node, and then updates the store to give t the same type asnode.- Parameters:
node- the node to be assigned to a temporary variableresult- the transfer result containing the store to be modified
-
createTemporaryVar
protected @Nullable com.sun.source.tree.VariableTree createTemporaryVar(Node node)
Creates a variable declaration for the given expression node, if possible.- Parameters:
node- an expression node- Returns:
- a variable tree for the node, or null if an appropriate containing element cannot be located
-
uniqueName
protected java.lang.String uniqueName(java.lang.String prefix)
Creates a unique, arbitrary string that can be used as a name for a temporary variable, using the given prefix. Can be used up to Long.MAX_VALUE times.Note that the correctness of the Resource Leak Checker depends on these names actually being unique, because
LocalVariableNodes derived from them are used as keys in a map.- Parameters:
prefix- the prefix for the name- Returns:
- a unique name that starts with the prefix
-
-