Class OptionalVisitor
- All Implemented Interfaces:
- TreeVisitor<Void,- Void> 
- See the Checker Framework Manual:
- Optional Checker
- 
Nested Class SummaryNested classes/interfaces inherited from class org.checkerframework.common.basetype.BaseTypeVisitorBaseTypeVisitor.OverrideChecker
- 
Field SummaryFields inherited from class org.checkerframework.common.basetype.BaseTypeVisitorassumePureGetters, atypeFactory, checker, DETERMINISTIC, IMPURE, methodTree, positions, PURE, qualHierarchy, showchecks, SIDE_EFFECT_FREE, TARGET, targetValueElement, typeHierarchy, typeValidator, unusedWhenElement, warnRedundantAnnotationsFields inherited from class org.checkerframework.framework.source.SourceVisitorelements, root, trees, treesWithSuppressWarnings, types
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected booleancommonAssignmentCheck(AnnotatedTypeMirror varType, ExpressionTree valueExpTree, @CompilerMessageKey String errorKey, Object... extraArgs) Checks the validity of an assignment (or pseudo-assignment) from a value to a variable and emits an error message (through the compiler's messaging interface) if it is not valid.protected BaseTypeValidatorvoidPart of rule #3.voidRule #4.voidPartial support for Rule #5 and Rule #7.voidPart of rule #3.static StatementTreeskipBlocks(StatementTree tree) If the given tree is a block tree with a single element, return the enclosed non-block statement.visitBinary(BinaryTree tree, Void p) visitMemberReference(MemberReferenceTree tree, Void p) Performs a method invocation check.visitVariable(VariableTree tree, Void p) Rule #6 (partial).Methods inherited from class org.checkerframework.common.basetype.BaseTypeVisitorcheckAccess, checkAccessAllowed, checkArguments, checkArrayInitialization, checkConditionalPostcondition, checkConstructorInvocation, checkConstructorResult, checkContract, checkDefaultConstructor, checkExceptionParameter, checkExplicitAnnotationsOnIntersectionBounds, checkExtendsAndImplements, checkExtendsOrImplements, checkFieldInvariantDeclarations, checkMethodInvocability, checkMethodReferenceAsOverride, checkOverride, checkOverride, checkPostcondition, checkPreconditions, checkPurityAnnotations, checkQualifierParameter, checkSuperConstructorCall, checkThisConstructorCall, checkThisOrSuperConstructorCall, checkThrownExpression, checkTypeArguments, checkTypecastRedundancy, checkTypecastSafety, checkVarargs, commonAssignmentCheck, commonAssignmentCheck, commonAssignmentCheckEndDiagnostic, commonAssignmentCheckEndDiagnostic, commonAssignmentCheckStartDiagnostic, contractExpressionAndType, createOverrideChecker, createTypeFactory, createTypeFactoryPublic, enclosingMemberSelect, enclosingStatement, getExceptionParameterLowerBoundAnnotations, getThrowUpperBoundAnnotations, getTypeFactory, isTypeCastSafe, isValidUse, isValidUse, isValidUse, processClassTree, processMethodTree, reportMethodInvocabilityError, reportPurityErrors, scan, setRoot, shouldPerformContractInference, shouldSkipUses, shouldWarnAboutIrrelevantJavaTypes, skipReceiverSubtypeCheck, testAnnotationInsertion, testJointJavacJavaParserVisitor, testTypevarContainment, typeCheckVectorCopyIntoArgument, validateType, validateTypeOf, visitAnnotatedType, visitAnnotatedType, visitAnnotation, visitAssignment, visitCatch, visitClass, visitCompilationUnit, visitCompoundAssignment, visitEnhancedForLoop, visitIdentifier, visitInstanceOf, visitLambdaExpression, visitMethod, visitNewArray, visitNewClass, visitReturn, visitSwitchExpression17, visitThrow, visitTypeCast, visitTypeParameter, visitUnary, warnAboutIrrelevantJavaTypes, warnInvalidPolymorphicQualifier, warnInvalidPolymorphicQualifier, warnRedundantAnnotationsMethods inherited from class org.checkerframework.framework.source.SourceVisitorvisitMethods inherited from class com.sun.source.util.TreePathScannergetCurrentPath, scanMethods inherited from class com.sun.source.util.TreeScannerreduce, scan, visitArrayAccess, visitArrayType, visitAssert, visitBindingPattern, visitBlock, visitBreak, visitCase, visitContinue, visitDefaultCaseLabel, visitDoWhileLoop, visitEmptyStatement, visitErroneous, visitExports, visitExpressionStatement, visitForLoop, visitGuardedPattern, visitImport, visitIntersectionType, visitLabeledStatement, visitLiteral, visitMemberSelect, visitModifiers, visitModule, visitOpens, visitOther, visitPackage, visitParameterizedType, visitParenthesized, visitParenthesizedPattern, visitPrimitiveType, visitProvides, visitRequires, visitSwitch, visitSwitchExpression, visitSynchronized, visitTry, visitUnionType, visitUses, visitWhileLoop, visitWildcard, visitYield
- 
Constructor Details- 
OptionalVisitorCreate an OptionalVisitor.- Parameters:
- checker- the associated OptionalChecker
 
 
- 
- 
Method Details- 
createTypeValidator- Overrides:
- createTypeValidatorin class- BaseTypeVisitor<BaseAnnotatedTypeFactory>
 
- 
visitConditionalExpression- Specified by:
- visitConditionalExpressionin interface- TreeVisitor<Void,- Void> 
- Overrides:
- visitConditionalExpressionin class- BaseTypeVisitor<BaseAnnotatedTypeFactory>
 
- 
handleTernaryIsPresentGetPart of rule #3.Pattern match for: VAR.isPresent() ? VAR.get().METHOD() : VALUEPrefer: VAR.map(METHOD).orElse(VALUE);- Parameters:
- tree- a conditional expression that can perhaps be simplified
 
- 
visitIf- Specified by:
- visitIfin interface- TreeVisitor<Void,- Void> 
- Overrides:
- visitIfin class- TreeScanner<Void,- Void> 
 
- 
handleConditionalStatementIsPresentGetPart of rule #3.Pattern match for: if (VAR.isPresent()) { METHOD(VAR.get()); }Prefer: VAR.ifPresent(METHOD);- Parameters:
- tree- an if statement that can perhaps be simplified
 
- 
visitMethodInvocationDescription copied from class:BaseTypeVisitorPerforms a method invocation check.An invocation of a method, m, on the receiver, r is valid only if: - passed arguments are subtypes of corresponding m parameters
- r is a subtype of m receiver type
- if m is generic, passed type arguments are subtypes of m type variables
 - Specified by:
- visitMethodInvocationin interface- TreeVisitor<Void,- Void> 
- Overrides:
- visitMethodInvocationin class- BaseTypeVisitor<BaseAnnotatedTypeFactory>
 
- 
visitBinary- Specified by:
- visitBinaryin interface- TreeVisitor<Void,- Void> 
- Overrides:
- visitBinaryin class- TreeScanner<Void,- Void> 
 
- 
commonAssignmentCheckprotected boolean commonAssignmentCheck(AnnotatedTypeMirror varType, ExpressionTree valueExpTree, @CompilerMessageKey String errorKey, Object... extraArgs) Description copied from class:BaseTypeVisitorChecks the validity of an assignment (or pseudo-assignment) from a value to a variable and emits an error message (through the compiler's messaging interface) if it is not valid.- Overrides:
- commonAssignmentCheckin class- BaseTypeVisitor<BaseAnnotatedTypeFactory>
- Parameters:
- varType- the annotated type for the lvalue (usually a variable)
- valueExpTree- the AST node for the rvalue (the new value)
- errorKey- the error message key to use if the check fails
- extraArgs- arguments to the error message key, before "found" and "expected" types
- Returns:
- true if the check succeeds, false if an error message was issued
 
- 
handleCreationEliminationRule #4.Pattern match for: CREATION().PROPAGATION()*.ELIMINATION()Prefer: VAR.ifPresent(METHOD);- Parameters:
- tree- a method invocation that can perhaps be simplified
 
- 
handleNestedOptionalCreationPartial support for Rule #5 and Rule #7.Rule #5: Avoid nested Optional chains, or operations that have an intermediate Optional value. Rule #7: Don't use Optional to wrap any collection type. Certain types are illegal, such as Optional<Optional>. The type validator may see a supertype of the most precise run-time type; for example, it may see the type asOptional<? extends Object>, and it would not flag any problem with such a type. This method checks atOptionalcreation sites.TODO: This finds only some Optional<Optional>: those that consist ofOptional.of(optionalExpr)orOptional.ofNullable(optionalExpr), whereoptionalExprhas typeOptional. There are other ways thatOptional<Optional>can be created, such asoptionalExpr.map(Optional::of).TODO: Also check at collection creation sites, but there are so many of them, and there often are not values of the element type at the collection creation site. - Parameters:
- tree- a method invocation that might create an Optional of an illegal type
 
- 
visitVariableRule #6 (partial).Don't use Optional in fields and method parameters. - Specified by:
- visitVariablein interface- TreeVisitor<Void,- Void> 
- Overrides:
- visitVariablein class- BaseTypeVisitor<BaseAnnotatedTypeFactory>
 
- 
skipBlocksIf the given tree is a block tree with a single element, return the enclosed non-block statement. Otherwise, return the same tree.- Parameters:
- tree- a statement tree
- Returns:
- the single enclosed statement, if it exists; otherwise, the same tree
 
- 
visitMemberReference- Specified by:
- visitMemberReferencein interface- TreeVisitor<Void,- Void> 
- Overrides:
- visitMemberReferencein class- BaseTypeVisitor<BaseAnnotatedTypeFactory>
 
 
-