public final class TreeUtils extends Object
Tree.TreePathUtil| Modifier and Type | Field and Description | 
|---|---|
static org.plumelib.util.UniqueIdMap<Tree> | 
treeUids
Unique IDs for trees. 
 | 
| Modifier and Type | Method and Description | 
|---|---|
static AnnotationMirror | 
annotationFromAnnotationTree(AnnotationTree tree)
Converts the given AnnotationTree to an AnnotationMirror. 
 | 
static List<? extends AnnotationMirror> | 
annotationsFromArrayCreation(NewArrayTree tree,
                            int level)
Converts the given NewArrayTree to a list of AnnotationMirrors. 
 | 
static List<? extends AnnotationMirror> | 
annotationsFromTree(AnnotatedTypeTree tree)
Converts the given AnnotatedTypeTree to a list of AnnotationMirrors. 
 | 
static List<? extends AnnotationMirror> | 
annotationsFromTree(TypeParameterTree tree)
Converts the given TypeParameterTree to a list of AnnotationMirrors. 
 | 
static List<AnnotationMirror> | 
annotationsFromTypeAnnotationTrees(List<? extends AnnotationTree> annoTrees)
Converts the given AnnotationTrees to AnnotationMirrors. 
 | 
static VariableTree | 
bindingPatternTreeGetVariable(Tree bindingPatternTree)
Returns the binding variable of  
bindingPatternTree. | 
static boolean | 
canHaveTypeAnnotation(Tree tree)
Return  
true if and only if tree can have a type annotation. | 
static @Nullable Tree | 
caseTreeGetBody(CaseTree caseTree)
Returns the body of the case statement if it is of the form  
case <expression> ->
 <expression>. | 
static List<? extends ExpressionTree> | 
caseTreeGetExpressions(CaseTree caseTree)
Get the list of expressions from a case expression. 
 | 
static Set<Tree.Kind> | 
classTreeKinds()
Return the set of kinds that represent classes. 
 | 
static ExecutableElement | 
constructor(NewClassTree tree)
Determines the symbol for a constructor given an invocation via  
new. | 
static boolean | 
containsThisConstructorInvocation(MethodTree node)
Returns true if the first statement in the body is a self constructor invocation within a
 constructor. 
 | 
static LiteralTree | 
createLiteral(com.sun.tools.javac.code.TypeTag typeTag,
             @Nullable Object value,
             TypeMirror typeMirror,
             ProcessingEnvironment processingEnv)
Creates a LiteralTree for the given value. 
 | 
static TypeElement | 
elementFromDeclaration(ClassTree node)
Gets the element for a class corresponding to a declaration. 
 | 
static ExecutableElement | 
elementFromDeclaration(MethodTree node)
Gets the element for a method corresponding to a declaration. 
 | 
static VariableElement | 
elementFromDeclaration(VariableTree node)
Gets the element for a variable corresponding to its declaration. 
 | 
static @Nullable Element | 
elementFromTree(Tree tree)
Gets the  
Element for the given Tree API node. | 
static @Nullable Element | 
elementFromUse(ExpressionTree node)
Gets the element for the declaration corresponding to this use of an element. 
 | 
static ExecutableElement | 
elementFromUse(MethodInvocationTree node)
Returns the ExecutableElement for the called method, from a call. 
 | 
static ExecutableElement | 
elementFromUse(NewClassTree node)
Gets the ExecutableElement for the called constructor, from a constructor invocation. 
 | 
static com.sun.tools.javac.code.Symbol | 
findFunction(Tree tree,
            ProcessingEnvironment env)
The type of the lambda or method reference tree is a functional interface type. 
 | 
static Tree | 
firstStatement(Tree tree)
Returns the first statement of the tree if it is a block. 
 | 
static LiteralTree | 
getDefaultValueTree(TypeMirror typeMirror,
                   ProcessingEnvironment processingEnv)
Return a tree for the default value of the given type. 
 | 
static List<? extends AnnotationTree> | 
getExplicitAnnotationTrees(@Nullable List<? extends AnnotationTree> annoTrees,
                          Tree typeTree)
Returns the annotations explicitly written on the given type. 
 | 
static VariableElement | 
getField(@FullyQualifiedName String typeName,
        String fieldName,
        ProcessingEnvironment env)
Returns the VariableElement for a field declaration. 
 | 
static String | 
getFieldName(Tree tree)
Compute the name of the field that the field access  
tree accesses. | 
static Tree.Kind | 
getKindRecordAsClass(Tree tree)
Calls getKind() on the given tree, but returns CLASS if the Kind is RECORD. 
 | 
static ExecutableElement | 
getMethod(Class<?> type,
         String methodName,
         int params,
         ProcessingEnvironment env)
Returns the ExecutableElement for a method declaration. 
 | 
static ExecutableElement | 
getMethod(Class<?> type,
         String methodName,
         ProcessingEnvironment env,
         String... paramTypes)
Returns the ExecutableElement for a method declaration. 
 | 
static ExecutableElement | 
getMethod(@FullyQualifiedName String typeName,
         String methodName,
         int params,
         ProcessingEnvironment env)
Returns the ExecutableElement for a method declaration. 
 | 
static ExecutableElement | 
getMethod(@FullyQualifiedName String typeName,
         String methodName,
         ProcessingEnvironment env,
         String... paramTypes)
Returns the ExecutableElement for a method declaration. 
 | 
static String | 
getMethodName(Tree tree)
Compute the name of the method that the method access  
tree accesses. | 
static @Nullable ExecutableElement | 
getMethodOrNull(@FullyQualifiedName String typeName,
               String methodName,
               int params,
               ProcessingEnvironment env)
Returns the ExecutableElement for a method declaration. 
 | 
static List<ExecutableElement> | 
getMethods(@FullyQualifiedName String typeName,
          String methodName,
          int params,
          ProcessingEnvironment env)
Returns all ExecutableElements for method declarations of methodName, in class typeName, with
 params formal parameters. 
 | 
static @Nullable ExpressionTree | 
getReceiverTree(ExpressionTree expression)
Returns the receiver tree of a field access or a method invocation. 
 | 
static ExecutableElement | 
getSuperConstructor(NewClassTree newClassTree)
Returns the constructor invoked by  
newClassTree unless newClassTree is creating
 an anonymous class. | 
static boolean | 
hasExplicitConstructor(ClassTree node)
Determine whether the given class contains an explicit constructor. 
 | 
static boolean | 
hasSyntheticArgument(NewClassTree tree)
Returns true if  
tree has a synthetic argument. | 
static @Nullable Tree | 
instanceOfGetPattern(InstanceOfTree instanceOfTree)
Returns the pattern of  
instanceOfTree tree or null if the instanceof does not have a
 pattern. | 
static boolean | 
isAnonymousConstructor(MethodTree method)
Determines whether or not the node referred to by the given  
MethodTree is an anonymous
 constructor (the constructor for an anonymous class. | 
static boolean | 
isArrayLengthAccess(Tree tree)
Returns whether or not tree is an access of array length. 
 | 
static boolean | 
isAutoGeneratedRecordMember(Tree member)
Returns true if the given  
Tree is part of a record that has been automatically
 generated by the compiler. | 
static boolean | 
isClassLiteral(Tree tree)
Determine whether  
tree is a class literal, such as | 
static boolean | 
isClassTree(Tree tree)
Is the given tree kind a class, i.e. 
 | 
static boolean | 
isCompactCanonicalRecordConstructor(MethodTree method)
Returns true if the given  
MethodTree is a compact canonical constructor (the
 constructor for a record where the parameters are implicitly declared and implicitly assigned
 to the record's fields). | 
static boolean | 
isCompileTimeString(ExpressionTree node)
Returns true if the node is a constant-time expression. 
 | 
static boolean | 
isConstructor(MethodTree tree)
Checks if the provided method is a constructor method or no. 
 | 
static boolean | 
isDiamondTree(Tree tree)
Returns true if the tree is of a diamond type. 
 | 
static boolean | 
isEnumSuper(MethodInvocationTree node)
Returns true if this is a super call to the  
Enum constructor. | 
static boolean | 
isExplicitThisDereference(ExpressionTree tree)
Determine whether the given expression is either "this" or an outer "C.this". 
 | 
static boolean | 
isExprConstTrue(ExpressionTree node)
Determine whether an expression  
ExpressionTree has the constant value true, according
 to the compiler logic. | 
static boolean | 
isExpressionTree(Tree tree)
Determine whether the given tree represents an ExpressionTree. 
 | 
static boolean | 
isFieldAccess(Tree tree)
Determine whether  
tree is a field access expression, such as | 
static boolean | 
isImplicitlyTypedLambda(Tree tree)
Returns true if  
tree is an implicitly typed lambda. | 
static boolean | 
isLocalVariable(Tree tree)
Returns true if the tree is the declaration or use of a local variable. 
 | 
static boolean | 
isMethodAccess(Tree tree)
Determine whether  
tree refers to a method element, such as. | 
static boolean | 
isMethodInvocation(Tree tree,
                  ExecutableElement method,
                  ProcessingEnvironment env)
Returns true if the given element is an invocation of the method, or of any method that
 overrides that one. 
 | 
static boolean | 
isMethodInvocation(Tree methodTree,
                  List<ExecutableElement> methods,
                  ProcessingEnvironment processingEnv)
Returns true if the argument is an invocation of one of the given methods, or of any method
 that overrides them. 
 | 
static boolean | 
isNullExpression(Tree t)
Returns true if the given tree evaluates to  
null. | 
static boolean | 
isSelfAccess(ExpressionTree tree)
Returns true if the tree is a tree that 'looks like' either an access of a field or an
 invocation of a method that are owned by the same accessing instance. 
 | 
static boolean | 
isSpecificFieldAccess(Tree tree,
                     VariableElement var)
Returns true if and only if the given  
tree represents a field access of the given
 VariableElement. | 
static boolean | 
isStringCompoundConcatenation(CompoundAssignmentTree tree)
Returns true if the compound assignment tree is a string concatenation. 
 | 
static boolean | 
isStringConcatenation(Tree tree)
Returns true if the tree represents a  
String concatenation operation. | 
static boolean | 
isSuperConstructorCall(MethodInvocationTree tree)
Checks if the method invocation is a call to super. 
 | 
static boolean | 
isSynthetic(ExecutableElement ee)
Returns true if the given method is synthetic. 
 | 
static boolean | 
isSynthetic(MethodTree node)
Returns true if the given method is synthetic. 
 | 
static boolean | 
isThisConstructorCall(MethodInvocationTree tree)
Checks if the method invocation is a call to "this". 
 | 
static boolean | 
isTypeDeclaration(Tree node)
Determine whether the given tree represents a declaration of a type (including type
 parameters). 
 | 
static boolean | 
isTypeTree(Tree tree)
Is the given tree a type instantiation? 
 | 
static boolean | 
isUseOfElement(ExpressionTree node)
Determine whether the given ExpressionTree has an underlying element. 
 | 
static boolean | 
isVarArgs(MethodInvocationTree invok)
Returns true if the given method invocation is a varargs invocation. 
 | 
static boolean | 
isVarArgs(NewClassTree newClassTree)
Returns true if the given constructor invocation is a varargs invocation. 
 | 
static boolean | 
isVarArgs(Tree tree)
Returns true if the given method/constructor invocation is a varargs invocation. 
 | 
static boolean | 
isWideningBinary(BinaryTree node)
Returns true if the binary operator may do a widening primitive conversion. 
 | 
static Name | 
methodName(MethodInvocationTree node)
Returns the name of the invoked method. 
 | 
static String | 
nameExpressionToString(ExpressionTree nameExpr)
Given a javac ExpressionTree representing a fully qualified name such as "java.lang.Object",
 creates a String containing the name. 
 | 
static boolean | 
sameTree(ExpressionTree expr1,
        ExpressionTree expr2)
Returns true if two expressions originating from the same scope are identical, i.e. 
 | 
static List<? extends CaseTree> | 
switchExpressionTreeGetCases(Tree switchExpressionTree)
Returns the cases of  
switchExpressionTree. | 
static ExpressionTree | 
switchExpressionTreeGetExpression(Tree switchExpressionTree)
Returns the selector expression of  
switchExpressionTree. | 
static String | 
toStringOneLine(Tree tree)
Return toString(), but without line separators. 
 | 
static String | 
toStringTruncated(Tree tree,
                 int length)
Return either  
toStringOneLine(com.sun.source.tree.Tree) if it is no more than length characters, or
 toStringOneLine(com.sun.source.tree.Tree) quoted and truncated. | 
static TypeMirror | 
typeOf(Tree tree)
Returns the type as a TypeMirror of  
tree. | 
static Set<Tree.Kind> | 
typeTreeKinds()  | 
static @PolyInterned ExpressionTree | 
withoutParens(@PolyInterned ExpressionTree tree)
If the given tree is a parenthesized tree, return the enclosed non-parenthesized tree. 
 | 
static @PolyInterned ExpressionTree | 
withoutParensOrCasts(@PolyInterned ExpressionTree tree)
If the given tree is a parenthesized tree or cast tree, return the enclosed non-parenthesized,
 non-cast tree. 
 | 
static ExpressionTree | 
yieldTreeGetValue(Tree yieldTree)
Returns the value (expression) for  
yieldTree. | 
public static final org.plumelib.util.UniqueIdMap<Tree> treeUids
public static boolean isConstructor(MethodTree tree)
tree - a tree defining the methodpublic static boolean isSuperConstructorCall(MethodInvocationTree tree)
tree - a tree defining a method invocationpublic static boolean isThisConstructorCall(MethodInvocationTree tree)
tree - a tree defining a method invocationpublic static boolean isSelfAccess(ExpressionTree tree)
It would only return true if the access tree is of the form:
field this.field method() this.method()It does not perform any semantical check to differentiate between fields and local variables; local methods or imported static methods.
tree - expression tree representing an access to object membertrue iff the member is a member of this instancepublic static @PolyInterned ExpressionTree withoutParens(@PolyInterned ExpressionTree tree)
tree - an expression treepublic static @PolyInterned ExpressionTree withoutParensOrCasts(@PolyInterned ExpressionTree tree)
tree - an expression tree@Pure public static @Nullable Element elementFromTree(Tree tree)
Element for the given Tree API node. For an object instantiation returns the
 value of the JCTree.JCNewClass.constructor field.tree - the Tree node to get the symbol forSymbol for the given tree, or null if one could not be foundIllegalArgumentException - if tree is null or is not a valid javac-internal tree
     (JCTree)public static TypeElement elementFromDeclaration(ClassTree node)
node - class declarationpublic static ExecutableElement elementFromDeclaration(MethodTree node)
public static VariableElement elementFromDeclaration(VariableTree node)
@Pure public static @Nullable Element elementFromUse(ExpressionTree node)
elementFromDeclaration(ClassTree), elementFromDeclaration(MethodTree), or elementFromDeclaration(VariableTree) instead.
 This method is just a wrapper around elementFromTree(Tree), but this class
 might be the first place someone looks for this functionality.
node - the tree corresponding to a use of an elementnull otherwise@Pure public static ExecutableElement elementFromUse(MethodInvocationTree node)
node - a method call@Pure public static ExecutableElement elementFromUse(NewClassTree node)
node - a constructor invocationconstructor(NewClassTree)public static ExecutableElement getSuperConstructor(NewClassTree newClassTree)
newClassTree unless newClassTree is creating
 an anonymous class. In which case, the super constructor is returned.newClassTree - the constructor invocationconstructor(NewClassTree) if newClassTree is not creating an anonymous classpublic static ExecutableElement constructor(NewClassTree tree)
new.tree - the constructor invocationExecutableElement corresponding to the constructor call in treeelementFromUse(NewClassTree)@EnsuresNonNullIf(result=true, expression="elementFromUse(#1)") @Pure public static boolean isUseOfElement(ExpressionTree node)
node - the ExpressionTree to testpublic static boolean hasSyntheticArgument(NewClassTree tree)
tree has a synthetic argument.
 For some anonymous classes with an explicit enclosing expression, javac creates a synthetic argument to the constructor that is the enclosing expression of the NewClassTree. Suppose a programmer writes:
 class Outer {
   class Inner { }
     void method() {
       this.new Inner(){};
     }
 }
 Java 9 javac creates the following synthetic tree for this.new Inner(){}:
  new Inner(this) {
   (.Outer x0) {
     x0.super();
   }
 }
 Java 11 javac creates a different tree without the synthetic argument for this.new
 Inner(){}; the first line in the below code differs:
  this.new Inner() {
   (.Outer x0) {
     x0.super();
   }
 }tree - a new class treetree has a synthetic argumentpublic static Name methodName(MethodInvocationTree node)
public static boolean containsThisConstructorInvocation(MethodTree node)
public static Tree firstStatement(Tree tree)
tree - any kind of treepublic static boolean hasExplicitConstructor(ClassTree node)
node - a class treepublic static boolean isSynthetic(ExecutableElement ee)
ee - a method or constructor elementpublic static boolean isSynthetic(MethodTree node)
node - a method declaration treepublic static boolean isDiamondTree(Tree tree)
TreeInfo.isDiamond(JCTree)public static boolean isStringConcatenation(Tree tree)
String concatenation operation.public static boolean isStringCompoundConcatenation(CompoundAssignmentTree tree)
public static boolean isCompileTimeString(ExpressionTree node)
A tree is a constant-time expression if it is:
public static @Nullable ExpressionTree getReceiverTree(ExpressionTree expression)
expression - a field access or a method invocationpublic static Set<Tree.Kind> classTreeKinds()
public static boolean isClassTree(Tree tree)
tree - the tree to testpublic static boolean isTypeTree(Tree tree)
TODO: this is an under-approximation: e.g. an identifier could be either a type use or an expression. How can we distinguish.
tree - the tree to testpublic static boolean isMethodInvocation(Tree tree, ExecutableElement method, ProcessingEnvironment env)
public static boolean isMethodInvocation(Tree methodTree, List<ExecutableElement> methods, ProcessingEnvironment processingEnv)
public static ExecutableElement getMethod(Class<?> type, String methodName, int params, ProcessingEnvironment env)
getMethod(String, String, ProcessingEnvironment, String...).type - the class that contains the methodmethodName - the name of the methodparams - the number of formal parametersenv - the processing environmentpublic static ExecutableElement getMethod(@FullyQualifiedName String typeName, String methodName, int params, ProcessingEnvironment env)
getMethod(String, String, ProcessingEnvironment, String...).typeName - the class that contains the methodmethodName - the name of the methodparams - the number of formal parametersenv - the processing environmentpublic static @Nullable ExecutableElement getMethodOrNull(@FullyQualifiedName String typeName, String methodName, int params, ProcessingEnvironment env)
getMethod(String, String, ProcessingEnvironment,
 String...).typeName - the class that contains the methodmethodName - the name of the methodparams - the number of formal parametersenv - the processing environmentpublic static List<ExecutableElement> getMethods(@FullyQualifiedName String typeName, String methodName, int params, ProcessingEnvironment env)
typeName - the class that contains the methodmethodName - the name of the methodparams - the number of formal parametersenv - the processing environmentpublic static ExecutableElement getMethod(Class<?> type, String methodName, ProcessingEnvironment env, String... paramTypes)
type - the class that contains the methodmethodName - the name of the methodenv - the processing environmentparamTypes - the method's formal parameter typespublic static ExecutableElement getMethod(@FullyQualifiedName String typeName, String methodName, ProcessingEnvironment env, String... paramTypes)
typeName - the class that contains the methodmethodName - the name of the methodenv - the processing environmentparamTypes - the method's formal parameter typespublic static boolean isExplicitThisDereference(ExpressionTree tree)
TODO: Should this also handle "super"?
public static boolean isClassLiteral(Tree tree)
tree is a class literal, such as
 Object . class
public static boolean isFieldAccess(Tree tree)
tree is a field access expression, such as
 f obj . fThis method currently also returns true for class literals and qualified this.
tree - a tree that might be a field accesspublic static String getFieldName(Tree tree)
tree accesses. Requires tree to be a field access, as determined by isFieldAccess (which currently also
 returns true for class literals and qualified this).tree - a field access treetreepublic static boolean isMethodAccess(Tree tree)
tree refers to a method element, such as.
 m(...) obj . m(...)
public static String getMethodName(Tree tree)
tree accesses. Requires tree to be a method access, as determined by isMethodAccess.tree - a method access treetreepublic static boolean canHaveTypeAnnotation(Tree tree)
true if and only if tree can have a type annotation.true if and only if tree can have a type annotationpublic static boolean isSpecificFieldAccess(Tree tree, VariableElement var)
tree represents a field access of the given
 VariableElement.public static VariableElement getField(@FullyQualifiedName String typeName, String fieldName, ProcessingEnvironment env)
typeName - the class where the field is declaredfieldName - the name of the fieldenv - the processing environmentpublic static boolean isExpressionTree(Tree tree)
tree - the Tree to testpublic static boolean isEnumSuper(MethodInvocationTree node)
Enum constructor.node - the method invocation to checkEnum constructorpublic static boolean isTypeDeclaration(Tree node)
node - the Tree to testpublic static boolean isArrayLengthAccess(Tree tree)
tree - tree to checkpublic static boolean isAnonymousConstructor(MethodTree method)
MethodTree is an anonymous
 constructor (the constructor for an anonymous class.method - a method tree that may be an anonymous constructorpublic static boolean isCompactCanonicalRecordConstructor(MethodTree method)
MethodTree is a compact canonical constructor (the
 constructor for a record where the parameters are implicitly declared and implicitly assigned
 to the record's fields). This may be an explicitly declared compact canonical constructor or an
 implicitly generated one.method - a method tree that may be a compact canonical constructorpublic static boolean isAutoGeneratedRecordMember(Tree member)
Tree is part of a record that has been automatically
 generated by the compiler. This can be a field that is derived from the record's header field
 list, or an automatically generated canonical constructor.member - the Tree for a member of a recordpublic static List<AnnotationMirror> annotationsFromTypeAnnotationTrees(List<? extends AnnotationTree> annoTrees)
annoTrees - list of annotation trees to convert to annotation mirrorspublic static AnnotationMirror annotationFromAnnotationTree(AnnotationTree tree)
tree - annotation tree to convert to an annotation mirrorpublic static List<? extends AnnotationMirror> annotationsFromTree(AnnotatedTypeTree tree)
tree - annotated type tree to convertpublic static List<? extends AnnotationMirror> annotationsFromTree(TypeParameterTree tree)
tree - type parameter tree to convertpublic static List<? extends AnnotationMirror> annotationsFromArrayCreation(NewArrayTree tree, int level)
tree - new array treepublic static boolean isLocalVariable(Tree tree)
tree - the tree to checkpublic static TypeMirror typeOf(Tree tree)
tree. To obtain tree's AnnotatedTypeMirror,
 call AnnotatedTypeFactory.getAnnotatedType().treepublic static com.sun.tools.javac.code.Symbol findFunction(Tree tree, ProcessingEnvironment env)
tree - lambda or member reference treeenv - ProcessingEnvironmentpublic static boolean isImplicitlyTypedLambda(Tree tree)
tree is an implicitly typed lambda.
 A lambda expression whose formal type parameters have inferred types is an implicitly typed lambda. (See JLS 15.27.1)
tree - any kind of treetree is an implicitly typed lambdapublic static boolean isExprConstTrue(ExpressionTree node)
ExpressionTree has the constant value true, according
 to the compiler logic.node - the expression to be checkednode has the constant value truepublic static String toStringOneLine(Tree tree)
tree - a treepublic static String toStringTruncated(Tree tree, int length)
toStringOneLine(com.sun.source.tree.Tree) if it is no more than length characters, or
 toStringOneLine(com.sun.source.tree.Tree) quoted and truncated.tree - a treelength - the maximum length for the result; must be at least 6length
     characters longpublic static String nameExpressionToString(ExpressionTree nameExpr)
nameExpr - an ExpressionTree representing a fully qualified namepublic static boolean isWideningBinary(BinaryTree node)
node - a binary treepublic static List<? extends AnnotationTree> getExplicitAnnotationTrees(@Nullable List<? extends AnnotationTree> annoTrees, Tree typeTree)
annoTrees - annotations written before a variable/method declaration; null if this type is
     not from such a location. This might contain type annotations that the Java parser attached
     to the declaration rather than to the type.typeTree - the type whose annotations to returnpublic static LiteralTree getDefaultValueTree(TypeMirror typeMirror, ProcessingEnvironment processingEnv)
typeMirror - a typeprocessingEnv - the processing environmenttype's default valuepublic static LiteralTree createLiteral(com.sun.tools.javac.code.TypeTag typeTag, @Nullable Object value, TypeMirror typeMirror, ProcessingEnvironment processingEnv)
typeTag - the literal's type tagvalue - a wrapped primitive, null, or a StringtypeMirror - the typeMirror for the literalprocessingEnv - the processing environmentpublic static boolean isNullExpression(Tree t)
null.t - a treenullpublic static boolean sameTree(ExpressionTree expr1, ExpressionTree expr2)
If the expression includes one or more method calls, assumes the method calls are deterministic.
expr1 - the first expression to compareexpr2 - the second expression to compare; expr2 must originate from the same scope as
     expr1public static List<? extends ExpressionTree> caseTreeGetExpressions(CaseTree caseTree)
caseTree - the case expression to get the expressions frompublic static @Nullable Tree caseTreeGetBody(CaseTree caseTree)
case <expression> ->
 <expression>. This method should only be called if CaseTree.getStatements() returns
 null.caseTree - the case expression to get the body frompublic static VariableTree bindingPatternTreeGetVariable(Tree bindingPatternTree)
bindingPatternTree.bindingPatternTree - the BindingPatternTree whose binding variable is returnedbindingPatternTreepublic static @Nullable Tree instanceOfGetPattern(InstanceOfTree instanceOfTree)
instanceOfTree tree or null if the instanceof does not have a
 pattern.instanceOfTree - the InstanceOfTree whose pattern is returnedPatternTree of instanceOfTree or null if is doesn't existpublic static ExpressionTree switchExpressionTreeGetExpression(Tree switchExpressionTree)
switchExpressionTree. For example
 
   switch ( expression ) { ... }
 switchExpressionTree - the switch expression whose selector expression is returnedswitchExpressionTreepublic static List<? extends CaseTree> switchExpressionTreeGetCases(Tree switchExpressionTree)
switchExpressionTree. For example
 
   switch ( expression ) {
     cases
   }
 switchExpressionTree - the switch expression whose cases are returnedswitchExpressionTreepublic static ExpressionTree yieldTreeGetValue(Tree yieldTree)
yieldTree.yieldTree - the yield treeyieldTree.public static boolean isVarArgs(Tree tree)
tree - a method/constructor invocationpublic static boolean isVarArgs(MethodInvocationTree invok)
invok - the method invocationpublic static boolean isVarArgs(NewClassTree newClassTree)
newClassTree - the constructor invocationpublic static Tree.Kind getKindRecordAsClass(Tree tree)
tree - the tree to get the kind for