Class TreePathUtil

java.lang.Object
org.checkerframework.javacutil.TreePathUtil

public final class TreePathUtil extends Object
Utility methods for obtaining or analyzing a javac TreePath.
See Also:
  • Method Details

    • pathTillOfKind

      public static @Nullable TreePath pathTillOfKind(TreePath path, Tree.Kind kind)
      Gets path to the first (innermost) enclosing tree of the given kind. May return path itself.
      Parameters:
      path - the path defining the tree node
      kind - the kind of the desired tree
      Returns:
      the path to the enclosing tree of the given type, null otherwise
    • pathTillOfKind

      public static @Nullable TreePath pathTillOfKind(TreePath path, Set<Tree.Kind> kinds)
      Gets path to the first (innermost) enclosing tree with any one of the given kinds. May return path itself.
      Parameters:
      path - the path defining the tree node
      kinds - the set of kinds of the desired tree
      Returns:
      the path to the enclosing tree of the given type, null otherwise
    • pathTillClass

      public static @Nullable TreePath pathTillClass(TreePath path)
      Gets path to the first (innermost) enclosing class tree, where class is defined by the TreeUtils.classTreeKinds() method. May return path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      the path to the enclosing class tree, null otherwise
    • pathTillMethod

      public static @Nullable TreePath pathTillMethod(TreePath path)
      Gets path to the first (innermost) enclosing method tree. May return path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      the path to the enclosing class tree, null otherwise
    • enclosingOfKind

      public static @Nullable Tree enclosingOfKind(TreePath path, Tree.Kind kind)
      Gets the first (innermost) enclosing tree in path, of the given kind. May return the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      kind - the kind of the desired tree
      Returns:
      the enclosing tree of the given type as given by the path, null otherwise
    • enclosingOfKind

      public static @Nullable Tree enclosingOfKind(TreePath path, Set<Tree.Kind> kinds)
      Gets the first (innermost) enclosing tree in path, with any one of the given kinds. May return the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      kinds - the set of kinds of the desired tree
      Returns:
      the enclosing tree of the given type as given by the path, null otherwise
    • enclosingOfClass

      public static <T extends Tree> @Nullable T enclosingOfClass(TreePath path, Class<T> treeClass)
      Gets the first (innermost) enclosing tree in path, of the given class. May return the leaf of path itself.
      Type Parameters:
      T - the type of treeClass
      Parameters:
      path - the path defining the tree node
      treeClass - the class of the desired tree
      Returns:
      the enclosing tree of the given type as given by the path, null otherwise
    • enclosingDeclarationPath

      public static @Nullable TreePath enclosingDeclarationPath(TreePath path)
      Gets the path to nearest enclosing declaration (class, method, or variable) of the tree node defined by the given TreePath. May return the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      path to the nearest enclosing class/method/variable in the path, or null if one does not exist
    • enclosingClass

      public static @Nullable ClassTree enclosingClass(TreePath path)
      Gets the enclosing class of the tree node defined by the given TreePath. It returns a Tree, from which checkers.types.AnnotatedTypeMirror or Element can be obtained. May return the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      the enclosing class (or interface) as given by the path, or null if one does not exist
    • enclosingVariable

      public static @Nullable VariableTree enclosingVariable(TreePath path)
      Gets the enclosing variable of a tree node defined by the given TreePath. May return the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      the enclosing variable as given by the path, or null if one does not exist
    • enclosingMethod

      public static @Nullable MethodTree enclosingMethod(TreePath path)
      Gets the enclosing method of the tree node defined by the given TreePath. It returns a Tree, from which an checkers.types.AnnotatedTypeMirror or Element can be obtained. May return the leaf of path itself.

      Also see AnnotatedTypeFactory#getEnclosingMethod and AnnotatedTypeFactory#getEnclosingClassOrMethod, which do not require a TreePath.

      Parameters:
      path - the path defining the tree node
      Returns:
      the enclosing method as given by the path, or null if one does not exist
    • enclosingMethodOrLambda

      public static @Nullable Tree enclosingMethodOrLambda(TreePath path)
      Gets the enclosing method or lambda expression of the tree node defined by the given TreePath. It returns a Tree, from which an checkers.types.AnnotatedTypeMirror or Element can be obtained. May return the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      the enclosing method or lambda as given by the path, or null if one does not exist
    • enclosingTopLevelBlock

      public static @Nullable BlockTree enclosingTopLevelBlock(TreePath path)
      Returns the top-level block that encloses the given path, or null if none does. Never returns the leaf of path itself.
      Parameters:
      path - a path
      Returns:
      the top-level block that encloses the given path, or null if none does
    • enclosingNonParen

      public static org.plumelib.util.IPair<Tree,Tree> enclosingNonParen(TreePath path)
      Gets the first (innermost) enclosing tree in path, that is not a parenthesis. Never returns the leaf of path itself.
      Parameters:
      path - the path defining the tree node
      Returns:
      a pair of a non-parenthesis tree that contains the argument, and its child that is the argument or is a parenthesized version of it
    • getContextForPolyExpression

      public static @Nullable Tree getContextForPolyExpression(TreePath treePath)
      Returns the tree representing the context for the poly expression which is the leaf of treePath. The context then can be used to find the target type of the poly expression. Returns null if the leaf of treePath is not a poly expression.
      Parameters:
      treePath - a path. If the leaf of the path is a poly expression, then its context is returned.
      Returns:
      the tree representing the context for the poly expression which is the leaf of treePath; or null if the leaf is not a poly expression
    • inConstructor

      public static boolean inConstructor(TreePath path)
      Returns true if the tree is in a constructor or an initializer block.
      Parameters:
      path - the path to test
      Returns:
      true if the path is in a constructor or an initializer block
    • isTreeInStaticScope

      public static boolean isTreeInStaticScope(TreePath path)
      Returns true if the leaf of the tree path is in a static scope.
      Parameters:
      path - a TreePath whose leaf may or may not be in static scope
      Returns:
      true if the leaf of the tree path is in a static scope
    • isTopLevelAssignmentInInitializerBlock

      public static boolean isTopLevelAssignmentInInitializerBlock(TreePath path)
      Returns true if the path is to a top-level (not within a loop) assignment within an initializer block. The initializer block might be instance or static. Will return true for a re-assignment even if there is another initialization (within this initializer block, another initializer block, a constructor, or the variable declaration).
      Parameters:
      path - the path to test
      Returns:
      true if the path is to an initialization within an initializer block
    • toString

      public static String toString(TreePath path)
      Return a printed representation of a TreePath.
      Parameters:
      path - a TreePath
      Returns:
      a printed representation of the given TreePath
    • leafToStringTruncated

      public static String leafToStringTruncated(@Nullable TreePath path, int length)
      Returns a string representation of the leaf of the given path, using TreeUtils.toStringTruncated(com.sun.source.tree.Tree, int).
      Parameters:
      path - a path
      length - the maximum length for the result; must be at least 6
      Returns:
      a one-line string representation of the leaf of the given path that is no longer than length characters long
    • findNearestEnclosingElement

      public static @Nullable Element findNearestEnclosingElement(TreePath path)
      Retrieves the nearest enclosing method or class element for the specified path in the AST. This utility method prioritizes method elements over class elements. It returns the element of the closest method scope if available; otherwise, it defaults to the enclosing class scope.
      Parameters:
      path - the TreePath to analyze for the nearest enclosing scope.
      Returns:
      the Element of the nearest enclosing method or class, or null if no such enclosing element can be found.