Class AccumulationTransfer
- All Implemented Interfaces:
- ForwardTransferFunction<AccumulationValue,,- AccumulationStore> - TransferFunction<AccumulationValue,,- AccumulationStore> - NodeVisitor<TransferResult<AccumulationValue,- AccumulationStore>, - TransferInput<AccumulationValue, - AccumulationStore>> 
- Direct Known Subclasses:
- CalledMethodsTransfer,- InitializedFieldsTransfer
Subclasses should call the accumulate(Node, TransferResult, String...) accumulate}
 method to add a string to the estimate at a particular program point.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected final AccumulationAnnotatedTypeFactoryThe type factory.Fields inherited from class org.checkerframework.framework.flow.CFAbstractTransferanalysis, sequentialSemantics
- 
Constructor SummaryConstructorsConstructorDescriptionAccumulationTransfer(AccumulationAnalysis analysis) Build a new AccumulationTransfer for the given analysis.
- 
Method SummaryModifier and TypeMethodDescriptionvoidaccumulate(Node node, TransferResult<AccumulationValue, AccumulationStore> result, String... values) Updates the estimate of how many thingsnodehas accumulated.Methods inherited from class org.checkerframework.framework.flow.CFAbstractTransferaddInformationFromPreconditions, createTransferResult, finishValue, finishValue, getNarrowedValue, getValueFromFactory, getWidenedValue, initialStore, insertIntoStores, isNotFullyInitializedReceiver, moreSpecificValue, processCommonAssignment, processConditionalPostconditions, processPostconditions, recreateTransferResult, setFixedInitialStore, splitAssignments, strengthenAnnotationOfEqualTo, usesSequentialSemantics, visitArrayAccess, visitAssignment, visitCase, visitClassName, visitConditionalNot, visitEqualTo, visitExpressionStatement, visitFieldAccess, visitInstanceOf, visitLambdaResultExpression, visitLocalVariable, visitMethodInvocation, visitNarrowingConversion, visitNode, visitNotEqual, visitObjectCreation, visitReturn, visitStringConversion, visitSwitchExpressionNode, visitTernaryExpression, visitThis, visitVariableDeclaration, visitWideningConversionMethods inherited from class org.checkerframework.dataflow.cfg.node.AbstractNodeVisitorvisitArrayCreation, 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.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.checkerframework.dataflow.cfg.node.NodeVisitorvisitArrayCreation, 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
- 
Field Details- 
atypeFactoryThe type factory.
 
- 
- 
Constructor Details- 
AccumulationTransferBuild a new AccumulationTransfer for the given analysis.- Parameters:
- analysis- the analysis
 
 
- 
- 
Method Details- 
accumulatepublic void accumulate(Node node, TransferResult<AccumulationValue, AccumulationStore> result, String... values) Updates the estimate of how many thingsnodehas accumulated.If the node is an invocation of a method that returns its receiver, then its receiver's type will also be updated. In a chain of method calls, this process will continue backward as long as each receiver is itself a receiver-returning method invocation. For example, suppose nodeis the expressiona.b().c(), the new value (added by the accumulation analysis because of the.c()call) is "foo", and b and c return their receiver. This method will directly update the estimate ofa.b().c()to include "foo". In addition, the estimates for the expressionsa.b()andawould have their estimates updated to include "foo", because c and b (respectively) return their receivers. Note that due to what kind of values can be held in the store, this information is lost outside the method chain. That is, the returns-receiver propagated information is lost outside the expression in which the returns-receiver method invocations are nested.As a concrete example, consider the Called Methods accumulation checker: if buildrequires a, b, and c to be called, thenfoo.a().b().c().build();will typecheck (they are in one fluent method chain), butfoo.a().b().c(); foo.build();will not -- the store does not keep the information that a, b, and c have been called outside the chain.foo's type will beCalledMethods("a"), because onlya()was called directly onfoo. For such code to typecheck, the Called Methods accumulation checker uses an additional rule: the return type of a receiver-returning methodrr()isCalledMethods("rr"). This rule is implemented directly in theTreeAnnotatorsubclass defined in the Called Methods type factory.- Parameters:
- node- the node whose estimate should be expanded
- result- the transfer result containing the store to be modified
- values- the new accumulation values
 
 
-