Class MustCallTransfer
java.lang.Object
org.checkerframework.dataflow.cfg.node.AbstractNodeVisitor<TransferResult<CFValue,CFStore>,TransferInput<CFValue,CFStore>>
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>>
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 -
Method Summary
Modifier and TypeMethodDescriptionprotected @Nullable VariableTreecreateTemporaryVar(Node node) Creates a variable declaration for the given expression node, if possible.protected booleanChecks if WPI is enabled for the Resource Leak Checker inference.protected booleanprotected booleanshouldPerformWholeProgramInference(Tree expressionTree, Tree lhsTree) protected StringuniqueName(String prefix) Creates a unique, arbitrary string that can be used as a name for a temporary variable, using the given prefix.voidupdateStoreWithTempVar(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.visitObjectCreation(ObjectCreationNode node, TransferInput<CFValue, CFStore> input) visitSwitchExpressionNode(SwitchExpressionNode node, TransferInput<CFValue, CFStore> input) visitTernaryExpression(TernaryExpressionNode node, TransferInput<CFValue, CFStore> input) Methods inherited from class org.checkerframework.framework.flow.CFAbstractTransfer
addInformationFromPreconditions, createTransferResult, createTransferResult, finishValue, finishValue, getNarrowedValue, getValueFromFactory, getWidenedValue, initialStore, insertIntoStores, insertIntoStoresPermitNonDeterministic, isNotFullyInitializedReceiver, moreSpecificValue, processCommonAssignment, processConditionalPostconditions, processPostconditions, recreateTransferResult, recreateTransferResult, setFixedInitialStore, splitAssignments, strengthenAnnotationOfEqualTo, usesSequentialSemantics, visitAnyPattern, visitArrayAccess, visitAssignment, visitCase, visitClassName, visitConditionalNot, visitDeconstructorPattern, visitEqualTo, visitExpressionStatement, visitFieldAccess, visitInstanceOf, visitLambdaResultExpression, visitLocalVariable, visitNarrowingConversion, visitNode, visitNotEqual, visitReturn, visitThis, visitVariableDeclaration, visitWideningConversionMethods 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, visitValueLiteralMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods 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 Details
-
MustCallTransfer
Create a MustCallTransfer.- Parameters:
analysis- the analysis
-
-
Method Details
-
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>
-
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>
-
shouldPerformWholeProgramInference
- Overrides:
shouldPerformWholeProgramInferencein classCFAbstractTransfer<CFValue,CFStore, CFTransfer> - Parameters:
tree- a tree- Returns:
- false if Resource Leak Checker is running as one of the upstream checkers and the -AenableWpiForRlc flag is not passed as a command line argument, otherwise returns the result of the super call
-
shouldPerformWholeProgramInference
- Overrides:
shouldPerformWholeProgramInferencein classCFAbstractTransfer<CFValue,CFStore, CFTransfer> - Parameters:
expressionTree- a treelhsTree- its element- Returns:
- false if Resource Leak Checker is running as one of the upstream checkers and the -AenableWpiForRlc flag is not passed as a command line argument, otherwise returns the result of the super call
-
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
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:
result- the transfer result containing the store to be modifiednode- the node to be assigned to a temporary variable
-
createTemporaryVar
Creates a variable declaration for the given expression node, if possible.Note that error reporting code assumes that the names of temporary variables are not legal Java identifiers (see JLS 3.8). The temporary variable names generated here include an
'-'character to make the names invalid.- Parameters:
node- an expression node- Returns:
- a variable tree for the node, or null if an appropriate containing element cannot be located
-
uniqueName
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
-
isWpiEnabledForRLC
protected boolean isWpiEnabledForRLC()Checks if WPI is enabled for the Resource Leak Checker inference. SeeResourceLeakChecker.ENABLE_WPI_FOR_RLC.- Returns:
- returns true if WPI is enabled for the Resource Leak Checker
-