public class OptionalVisitor extends BaseTypeVisitor<BaseAnnotatedTypeFactory>
BaseTypeVisitor.OverrideCheckeratypeFactory, checker, DETERMINISTIC, inferPurity, methodTree, positions, PURE, SIDE_EFFECT_FREE, TARGET, targetValueElement, typeValidator, unusedWhenElementelements, root, trees, treesWithSuppressWarnings, types| Constructor and Description |
|---|
OptionalVisitor(BaseTypeChecker checker)
Create an OptionalVisitor.
|
| Modifier and Type | Method and Description |
|---|---|
protected BaseTypeValidator |
createTypeValidator() |
void |
handleConditionalStatementIsPresentGet(IfTree node)
Part of rule #3.
|
void |
handleCreationElimination(MethodInvocationTree node)
Rule #4.
|
void |
handleTernaryIsPresentGet(ConditionalExpressionTree node)
Part of rule #3.
|
static StatementTree |
skipBlocks(StatementTree tree)
If the given tree is a block tree with a single element, return the enclosed non-block
statement.
|
Void |
visitConditionalExpression(ConditionalExpressionTree node,
Void p)
If the computation of the type of the ConditionalExpressionTree in
org.checkerframework.framework.type.TypeFromTree.TypeFromExpression.visitConditionalExpression(ConditionalExpressionTree,
AnnotatedTypeFactory) is correct, the following checks are redundant.
|
Void |
visitIf(IfTree node,
Void p) |
Void |
visitMethodInvocation(MethodInvocationTree node,
Void p)
Performs a method invocation check.
|
Void |
visitVariable(VariableTree node,
Void p)
Rule #6 (partial).
|
checkAccess, checkAccessAllowed, checkArguments, checkArrayInitialization, checkConditionalPostcondition, checkConstructorInvocation, checkConstructorResult, checkContract, checkDefaultConstructor, checkExceptionParameter, checkExplicitAnnotationsOnIntersectionBounds, checkExtendsImplements, checkFieldInvariantDeclarations, checkForPolymorphicQualifiers, checkForPolymorphicQualifiers, checkMethodInvocability, checkMethodReferenceAsOverride, checkOverride, checkOverride, checkPostcondition, checkPreconditions, checkPurity, checkQualifierParameter, checkSuperConstructorCall, checkThisConstructorCall, checkThisOrSuperConstructorCall, checkThrownExpression, checkTypeArguments, checkTypecastRedundancy, checkTypecastSafety, checkVarargs, commonAssignmentCheck, commonAssignmentCheck, commonAssignmentCheck, commonAssignmentCheckEndDiagnostic, commonAssignmentCheckEndDiagnostic, commonAssignmentCheckStartDiagnostic, createOverrideChecker, createTypeFactory, createTypeFactoryPublic, enclosingMemberSelect, enclosingStatement, getExceptionParameterLowerBoundAnnotations, getThrowUpperBoundAnnotations, getTypeFactory, isTypeCastSafe, isValidUse, isValidUse, isValidUse, processClassTree, reportMethodInvocabilityError, reportPurityErrors, scan, setRoot, shouldSkipUses, skipReceiverSubtypeCheck, testAnnotationInsertion, testJointJavacJavaParserVisitor, testTypevarContainment, typeCheckVectorCopyIntoArgument, validateType, validateTypeOf, visitAnnotatedType, visitAnnotatedType, visitAnnotation, visitAssignment, visitCatch, visitClass, visitCompilationUnit, visitCompoundAssignment, visitEnhancedForLoop, visitIdentifier, visitInstanceOf, visitLambdaExpression, visitMemberReference, visitMethod, visitNewArray, visitNewClass, visitReturn, visitThrow, visitTypeCast, visitTypeParameter, visitUnary, warnAboutIrrelevantJavaTypesvisitgetCurrentPath, scanreduce, scan, visitArrayAccess, visitArrayType, visitAssert, visitBinary, visitBlock, visitBreak, visitCase, visitContinue, visitDoWhileLoop, visitEmptyStatement, visitErroneous, visitExports, visitExpressionStatement, visitForLoop, visitImport, visitIntersectionType, visitLabeledStatement, visitLiteral, visitMemberSelect, visitModifiers, visitModule, visitOpens, visitOther, visitPackage, visitParameterizedType, visitParenthesized, visitPrimitiveType, visitProvides, visitRequires, visitSwitch, visitSynchronized, visitTry, visitUnionType, visitUses, visitWhileLoop, visitWildcardpublic OptionalVisitor(BaseTypeChecker checker)
protected BaseTypeValidator createTypeValidator()
createTypeValidator in class BaseTypeVisitor<BaseAnnotatedTypeFactory>public Void visitConditionalExpression(ConditionalExpressionTree node, Void p)
BaseTypeVisitorvisitConditionalExpression in interface TreeVisitor<Void,Void>visitConditionalExpression in class BaseTypeVisitor<BaseAnnotatedTypeFactory>public void handleTernaryIsPresentGet(ConditionalExpressionTree node)
Pattern match for: VAR.isPresent() ? VAR.get().METHOD() : VALUE
Prefer: VAR.map(METHOD).orElse(VALUE);
public Void visitIf(IfTree node, Void p)
visitIf in interface TreeVisitor<Void,Void>visitIf in class TreeScanner<Void,Void>public void handleConditionalStatementIsPresentGet(IfTree node)
Pattern match for: if (VAR.isPresent()) { METHOD(VAR.get()); }
Prefer: VAR.ifPresent(METHOD);
public Void visitMethodInvocation(MethodInvocationTree node, Void p)
BaseTypeVisitorAn invocation of a method, m, on the receiver, r is valid only if:
visitMethodInvocation in interface TreeVisitor<Void,Void>visitMethodInvocation in class BaseTypeVisitor<BaseAnnotatedTypeFactory>public void handleCreationElimination(MethodInvocationTree node)
Pattern match for: CREATION().ELIMINATION()
Prefer: VAR.ifPresent(METHOD);
public Void visitVariable(VariableTree node, Void p)
Don't use Optional in fields and method parameters.
visitVariable in interface TreeVisitor<Void,Void>visitVariable in class BaseTypeVisitor<BaseAnnotatedTypeFactory>public static StatementTree skipBlocks(StatementTree tree)
tree - a statement tree