Class UpperBoundAnnotatedTypeFactory.UpperBoundTreeAnnotator

java.lang.Object
com.sun.source.util.SimpleTreeVisitor<Void,AnnotatedTypeMirror>
org.checkerframework.framework.type.treeannotator.TreeAnnotator
org.checkerframework.checker.index.upperbound.UpperBoundAnnotatedTypeFactory.UpperBoundTreeAnnotator
All Implemented Interfaces:
com.sun.source.tree.TreeVisitor<Void,AnnotatedTypeMirror>
Enclosing class:
UpperBoundAnnotatedTypeFactory

protected class UpperBoundAnnotatedTypeFactory.UpperBoundTreeAnnotator extends TreeAnnotator
  • 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

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    visitBinary(com.sun.source.tree.BinaryTree tree, AnnotatedTypeMirror type)
    When overriding this method, getAnnotatedType on the left and right operands should only be called when absolutely necessary.
    visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree node, AnnotatedTypeMirror type)
     
    visitLiteral(com.sun.source.tree.LiteralTree node, AnnotatedTypeMirror type)
     
    visitMethodInvocation(com.sun.source.tree.MethodInvocationTree tree, AnnotatedTypeMirror type)
    This exists for Math.min and Random.nextInt, which must be special-cased.
    visitUnary(com.sun.source.tree.UnaryTree node, AnnotatedTypeMirror type)
     

    Methods inherited from class org.checkerframework.framework.type.treeannotator.TreeAnnotator

    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, visitConditionalExpression, visitContinue, visitDefaultCaseLabel, visitDoWhileLoop, visitEmptyStatement, visitEnhancedForLoop, visitErroneous, visitExports, visitExpressionStatement, visitForLoop, visitGuardedPattern, visitIdentifier, visitIf, visitImport, visitInstanceOf, visitIntersectionType, visitLabeledStatement, visitLambdaExpression, visitMemberReference, visitMemberSelect, visitModifiers, visitModule, visitNewArray, visitNewClass, visitOpens, visitOther, visitPackage, visitParameterizedType, visitParenthesized, visitParenthesizedPattern, visitPrimitiveType, visitProvides, visitRequires, visitReturn, visitSwitch, visitSwitchExpression, visitSynchronized, visitThrow, visitTry, visitTypeCast, visitTypeParameter, visitUnionType, visitUses, visitVariable, visitWhileLoop, visitWildcard, visitYield

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

  • Method Details

    • visitMethodInvocation

      public Void visitMethodInvocation(com.sun.source.tree.MethodInvocationTree tree, AnnotatedTypeMirror type)
      This exists for Math.min and Random.nextInt, which must be special-cased.
      • Math.min has unusual semantics that combines annotations for the UBC.
      • The return type of Random.nextInt depends on the argument, but is not equal to it, so a polymorphic qualifier is insufficient.
      Other methods should not be special-cased here unless there is a compelling reason to do so.
      Specified by:
      visitMethodInvocation in interface com.sun.source.tree.TreeVisitor<Void,AnnotatedTypeMirror>
      Overrides:
      visitMethodInvocation in class com.sun.source.util.SimpleTreeVisitor<Void,AnnotatedTypeMirror>
    • visitLiteral

      public Void visitLiteral(com.sun.source.tree.LiteralTree node, AnnotatedTypeMirror type)
      Specified by:
      visitLiteral in interface com.sun.source.tree.TreeVisitor<Void,AnnotatedTypeMirror>
      Overrides:
      visitLiteral in class com.sun.source.util.SimpleTreeVisitor<Void,AnnotatedTypeMirror>
    • visitUnary

      public Void visitUnary(com.sun.source.tree.UnaryTree node, AnnotatedTypeMirror type)
      Specified by:
      visitUnary in interface com.sun.source.tree.TreeVisitor<Void,AnnotatedTypeMirror>
      Overrides:
      visitUnary in class com.sun.source.util.SimpleTreeVisitor<Void,AnnotatedTypeMirror>
    • visitCompoundAssignment

      public Void visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree node, AnnotatedTypeMirror type)
      Specified by:
      visitCompoundAssignment in interface com.sun.source.tree.TreeVisitor<Void,AnnotatedTypeMirror>
      Overrides:
      visitCompoundAssignment in class com.sun.source.util.SimpleTreeVisitor<Void,AnnotatedTypeMirror>
    • visitBinary

      public Void visitBinary(com.sun.source.tree.BinaryTree tree, AnnotatedTypeMirror type)
      Description copied from class: TreeAnnotator
      When overriding this method, getAnnotatedType on the left and right operands should only be called when absolutely necessary. Otherwise, the checker will be very slow on heavily nested binary trees. (For example, a + b + c + d + e + f + g + h.)

      If a checker's performance is still too slow, the types of binary trees could be computed in a subclass of CFTransfer. When computing the types in a transfer, look up the value in the store rather than the AnnotatedTypeFactory. Then this method should annotate binary trees with top so that the type applied in the transfer is always a subtype of the type the AnnotatedTypeFactory computes.

      Specified by:
      visitBinary in interface com.sun.source.tree.TreeVisitor<Void,AnnotatedTypeMirror>
      Overrides:
      visitBinary in class TreeAnnotator