Class KeyForPropagationTreeAnnotator
java.lang.Object
com.sun.source.util.SimpleTreeVisitor<Void,AnnotatedTypeMirror>
org.checkerframework.framework.type.treeannotator.TreeAnnotator
org.checkerframework.checker.nullness.KeyForPropagationTreeAnnotator
- All Implemented Interfaces:
TreeVisitor<Void,
AnnotatedTypeMirror>
For the following initializations we wish to propagate the annotations from the left-hand side to
the right-hand side or vice versa:
1. If a keySet is being saved to a newly declared set, we transfer the annotations from the keySet to the lhs. e.g.,
// The user is not required to explicitly annotate the LHS's type argument with @KeyFor("m")
Set<String> keySet = m.keySet();
2. If a variable declaration contains type arguments with an @KeyFor annotation and its
initializer is a new class tree with corresponding type arguments that have an @UknownKeyFor
primary annotation, we transfer from the LHS to RHS. e.g.,
// The user does not have to write @KeyFor("m") on both sides
List<@KeyFor("m") String> keys = new ArrayList<String>();
3. IMPORTANT NOTE: The following case must be (and is) handled in KeyForAnnotatedTypeFactory. In
BaseTypeVisitor we check to make sure that the constructor called in a NewClassTree is actually
compatible with the annotations placed on the NewClassTree. This requires that, prior to this
check we also propagate the annotations to this constructor in constructorFromUse so that the
constructor call matches the type given to the NewClassTree.-
Field Summary
Fields inherited from class org.checkerframework.framework.type.treeannotator.TreeAnnotator
atypeFactory
Fields inherited from class com.sun.source.util.SimpleTreeVisitor
DEFAULT_VALUE
-
Constructor Summary
ConstructorDescriptionKeyForPropagationTreeAnnotator
(AnnotatedTypeFactory atypeFactory, KeyForPropagator propagationTreeAnnotator) -
Method Summary
Modifier and TypeMethodDescriptionboolean
isCallToKeyset
(ExpressionTree expression) Returns true iff expression is a call to java.util.Map.KeySet.visitNewClass
(NewClassTree tree, AnnotatedTypeMirror type) Transfers annotations to type if the left hand side is a variable declaration.visitVariable
(VariableTree variableTree, AnnotatedTypeMirror type) Transfers annotations on type arguments from the initializer to the variableTree, if the initializer is a call to java.util.Map.keySet.Methods inherited from class org.checkerframework.framework.type.treeannotator.TreeAnnotator
visitBinary, visitMethod
Methods inherited from class com.sun.source.util.SimpleTreeVisitor
defaultAction, visit, visit, visitAnnotatedType, visitAnnotation, visitArrayAccess, visitArrayType, visitAssert, visitAssignment, visitBindingPattern, visitBlock, visitBreak, visitCase, visitCatch, visitClass, visitCompilationUnit, visitCompoundAssignment, visitConditionalExpression, visitContinue, visitDefaultCaseLabel, visitDoWhileLoop, visitEmptyStatement, visitEnhancedForLoop, visitErroneous, visitExports, visitExpressionStatement, visitForLoop, visitGuardedPattern, visitIdentifier, visitIf, visitImport, visitInstanceOf, visitIntersectionType, visitLabeledStatement, visitLambdaExpression, visitLiteral, visitMemberReference, visitMemberSelect, visitMethodInvocation, visitModifiers, visitModule, visitNewArray, visitOpens, visitOther, visitPackage, visitParameterizedType, visitParenthesized, visitParenthesizedPattern, visitPrimitiveType, visitProvides, visitRequires, visitReturn, visitSwitch, visitSwitchExpression, visitSynchronized, visitThrow, visitTry, visitTypeCast, visitTypeParameter, visitUnary, visitUnionType, visitUses, visitWhileLoop, visitWildcard, visitYield
-
Constructor Details
-
KeyForPropagationTreeAnnotator
public KeyForPropagationTreeAnnotator(AnnotatedTypeFactory atypeFactory, KeyForPropagator propagationTreeAnnotator)
-
-
Method Details
-
isCallToKeyset
Returns true iff expression is a call to java.util.Map.KeySet.- Returns:
- true iff expression is a call to java.util.Map.KeySet
-
visitVariable
Transfers annotations on type arguments from the initializer to the variableTree, if the initializer is a call to java.util.Map.keySet.- Specified by:
visitVariable
in interfaceTreeVisitor<Void,
AnnotatedTypeMirror> - Overrides:
visitVariable
in classSimpleTreeVisitor<Void,
AnnotatedTypeMirror>
-
visitNewClass
Transfers annotations to type if the left hand side is a variable declaration.- Specified by:
visitNewClass
in interfaceTreeVisitor<Void,
AnnotatedTypeMirror> - Overrides:
visitNewClass
in classSimpleTreeVisitor<Void,
AnnotatedTypeMirror>
-