Package org.checkerframework.javacutil
Class TreePathUtil
java.lang.Object
org.checkerframework.javacutil.TreePathUtil
Utility methods for obtaining or analyzing a javac
TreePath
.- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionenclosingClass
(TreePath path) Gets the enclosing class of the tree node defined by the givenTreePath
.Gets the path to nearest enclosing declaration (class, method, or variable) of the tree node defined by the givenTreePath
.static @Nullable MethodTree
enclosingMethod
(TreePath path) Gets the enclosing method of the tree node defined by the givenTreePath
.Gets the enclosing method or lambda expression of the tree node defined by the givenTreePath
.enclosingNonParen
(TreePath path) Gets the first (innermost) enclosing tree in path, that is not a parenthesis.enclosingOfClass
(TreePath path, Class<T> treeClass) Gets the first (innermost) enclosing tree in path, of the given class.enclosingOfKind
(TreePath path, Tree.Kind kind) Gets the first (innermost) enclosing tree in path, of the given kind.enclosingOfKind
(TreePath path, Set<Tree.Kind> kinds) Gets the first (innermost) enclosing tree in path, with any one of the given kinds.Returns the top-level block that encloses the given path, or null if none does.static @Nullable VariableTree
enclosingVariable
(TreePath path) Gets the enclosing variable of a tree node defined by the givenTreePath
.getAssignmentContext
(TreePath treePath) Returns the "assignment context" for the leaf oftreePath
, which is often the leaf of the parent oftreePath
.static boolean
inConstructor
(TreePath path) Returns true if the tree is in a constructor or an initializer block.static boolean
Returns true if the path is to a top-level (not within a loop) assignment within an initializer block.static boolean
isTreeInStaticScope
(TreePath path) Returns true if the leaf of the tree path is in a static scope.static String
leafToStringTruncated
(@Nullable TreePath path, int length) Returns a string representation of the leaf of the given path, usingTreeUtils.toStringTruncated(com.sun.source.tree.Tree, int)
.pathTillClass
(TreePath path) Gets path to the first (innermost) enclosing class tree, where class is defined by theTreeUtils.classTreeKinds()
method.pathTillMethod
(TreePath path) Gets path to the first (innermost) enclosing method tree.pathTillOfKind
(TreePath path, Tree.Kind kind) Gets path to the first (innermost) enclosing tree of the given kind.pathTillOfKind
(TreePath path, Set<Tree.Kind> kinds) Gets path to the first (innermost) enclosing tree with any one of the given kinds.static String
Return a printed representation of a TreePath.
-
Method Details
-
pathTillOfKind
Gets path to the first (innermost) enclosing tree of the given kind. May returnpath
itself.- Parameters:
path
- the path defining the tree nodekind
- the kind of the desired tree- Returns:
- the path to the enclosing tree of the given type,
null
otherwise
-
pathTillOfKind
Gets path to the first (innermost) enclosing tree with any one of the given kinds. May returnpath
itself.- Parameters:
path
- the path defining the tree nodekinds
- the set of kinds of the desired tree- Returns:
- the path to the enclosing tree of the given type,
null
otherwise
-
pathTillClass
Gets path to the first (innermost) enclosing class tree, where class is defined by theTreeUtils.classTreeKinds()
method. May returnpath
itself.- Parameters:
path
- the path defining the tree node- Returns:
- the path to the enclosing class tree,
null
otherwise
-
pathTillMethod
Gets path to the first (innermost) enclosing method tree. May returnpath
itself.- Parameters:
path
- the path defining the tree node- Returns:
- the path to the enclosing class tree,
null
otherwise
-
enclosingOfKind
Gets the first (innermost) enclosing tree in path, of the given kind. May return the leaf ofpath
itself.- Parameters:
path
- the path defining the tree nodekind
- the kind of the desired tree- Returns:
- the enclosing tree of the given type as given by the path,
null
otherwise
-
enclosingOfKind
Gets the first (innermost) enclosing tree in path, with any one of the given kinds. May return the leaf ofpath
itself.- Parameters:
path
- the path defining the tree nodekinds
- the set of kinds of the desired tree- Returns:
- the enclosing tree of the given type as given by the path,
null
otherwise
-
enclosingOfClass
Gets the first (innermost) enclosing tree in path, of the given class. May return the leaf ofpath
itself.- Type Parameters:
T
- the type oftreeClass
- Parameters:
path
- the path defining the tree nodetreeClass
- the class of the desired tree- Returns:
- the enclosing tree of the given type as given by the path,
null
otherwise
-
enclosingDeclarationPath
Gets the path to nearest enclosing declaration (class, method, or variable) of the tree node defined by the givenTreePath
. May return the leaf ofpath
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
Gets the enclosing class of the tree node defined by the givenTreePath
. It returns aTree
, from whichcheckers.types.AnnotatedTypeMirror
orElement
can be obtained. May return the leaf ofpath
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
Gets the enclosing variable of a tree node defined by the givenTreePath
. May return the leaf ofpath
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
Gets the enclosing method of the tree node defined by the givenTreePath
. It returns aTree
, from which ancheckers.types.AnnotatedTypeMirror
orElement
can be obtained. May return the leaf ofpath
itself.Also see
AnnotatedTypeFactory#getEnclosingMethod
andAnnotatedTypeFactory#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
Gets the enclosing method or lambda expression of the tree node defined by the givenTreePath
. It returns aTree
, from which ancheckers.types.AnnotatedTypeMirror
orElement
can be obtained. May return the leaf ofpath
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
Returns the top-level block that encloses the given path, or null if none does. Never returns the leaf ofpath
itself.- Parameters:
path
- a path- Returns:
- the top-level block that encloses the given path, or null if none does
-
enclosingNonParen
Gets the first (innermost) enclosing tree in path, that is not a parenthesis. Never returns the leaf ofpath
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
-
getAssignmentContext
Returns the "assignment context" for the leaf oftreePath
, which is often the leaf of the parent oftreePath
. (Does not handle pseudo-assignment of an argument to a parameter or a receiver expression to a receiver.) This is not the same asorg.checkerframework.dataflow.cfg.node.AssignmentContext
, which represents the left-hand side rather than the assignment itself.The assignment context for
treePath
is the leaf of its parent, if that leaf is one of the following trees:- AssignmentTree
- CompoundAssignmentTree
- MethodInvocationTree
- NewArrayTree
- NewClassTree
- ReturnTree
- VariableTree
If the leaf is a ParenthesizedTree, then recurse on the parent.
Otherwise, null is returned.
- Parameters:
treePath
- a path- Returns:
- the assignment context as described,
null
otherwise
-
inConstructor
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
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
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
Return a printed representation of a TreePath.- Parameters:
path
- a TreePath- Returns:
- a printed representation of the given TreePath
-
leafToStringTruncated
Returns a string representation of the leaf of the given path, usingTreeUtils.toStringTruncated(com.sun.source.tree.Tree, int)
.- Parameters:
path
- a pathlength
- 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
-