/*
* Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.source.tree;
Common interface for all nodes in an abstract syntax tree.
WARNING: This interface and its sub-interfaces are
subject to change as the Java programming language evolves.
These interfaces are implemented by the JDK Java compiler (javac)
and should not be implemented either directly or indirectly by
other applications.
Author: Peter von der Ahé, Jonathan Gibbons Since: 1.6
/**
* Common interface for all nodes in an abstract syntax tree.
*
* <p><b>WARNING:</b> This interface and its sub-interfaces are
* subject to change as the Java programming language evolves.
* These interfaces are implemented by the JDK Java compiler (javac)
* and should not be implemented either directly or indirectly by
* other applications.
*
* @author Peter von der Ahé
* @author Jonathan Gibbons
*
* @since 1.6
*/
public interface Tree {
Enumerates all kinds of trees.
/**
* Enumerates all kinds of trees.
*/
public enum Kind {
Used for instances of AnnotatedTypeTree
representing annotated types. /**
* Used for instances of {@link AnnotatedTypeTree}
* representing annotated types.
*/
ANNOTATED_TYPE(AnnotatedTypeTree.class),
Used for instances of AnnotationTree
representing declaration annotations. /**
* Used for instances of {@link AnnotationTree}
* representing declaration annotations.
*/
ANNOTATION(AnnotationTree.class),
Used for instances of AnnotationTree
representing type annotations. /**
* Used for instances of {@link AnnotationTree}
* representing type annotations.
*/
TYPE_ANNOTATION(AnnotationTree.class),
Used for instances of ArrayAccessTree
. /**
* Used for instances of {@link ArrayAccessTree}.
*/
ARRAY_ACCESS(ArrayAccessTree.class),
Used for instances of ArrayTypeTree
. /**
* Used for instances of {@link ArrayTypeTree}.
*/
ARRAY_TYPE(ArrayTypeTree.class),
Used for instances of AssertTree
. /**
* Used for instances of {@link AssertTree}.
*/
ASSERT(AssertTree.class),
Used for instances of AssignmentTree
. /**
* Used for instances of {@link AssignmentTree}.
*/
ASSIGNMENT(AssignmentTree.class),
Used for instances of BlockTree
. /**
* Used for instances of {@link BlockTree}.
*/
BLOCK(BlockTree.class),
Used for instances of BreakTree
. /**
* Used for instances of {@link BreakTree}.
*/
BREAK(BreakTree.class),
Used for instances of CaseTree
. /**
* Used for instances of {@link CaseTree}.
*/
CASE(CaseTree.class),
Used for instances of CatchTree
. /**
* Used for instances of {@link CatchTree}.
*/
CATCH(CatchTree.class),
Used for instances of ClassTree
representing classes. /**
* Used for instances of {@link ClassTree} representing classes.
*/
CLASS(ClassTree.class),
Used for instances of CompilationUnitTree
. /**
* Used for instances of {@link CompilationUnitTree}.
*/
COMPILATION_UNIT(CompilationUnitTree.class),
Used for instances of ConditionalExpressionTree
. /**
* Used for instances of {@link ConditionalExpressionTree}.
*/
CONDITIONAL_EXPRESSION(ConditionalExpressionTree.class),
Used for instances of ContinueTree
. /**
* Used for instances of {@link ContinueTree}.
*/
CONTINUE(ContinueTree.class),
Used for instances of DoWhileLoopTree
. /**
* Used for instances of {@link DoWhileLoopTree}.
*/
DO_WHILE_LOOP(DoWhileLoopTree.class),
Used for instances of EnhancedForLoopTree
. /**
* Used for instances of {@link EnhancedForLoopTree}.
*/
ENHANCED_FOR_LOOP(EnhancedForLoopTree.class),
Used for instances of ExpressionStatementTree
. /**
* Used for instances of {@link ExpressionStatementTree}.
*/
EXPRESSION_STATEMENT(ExpressionStatementTree.class),
Used for instances of MemberSelectTree
. /**
* Used for instances of {@link MemberSelectTree}.
*/
MEMBER_SELECT(MemberSelectTree.class),
Used for instances of MemberReferenceTree
. /**
* Used for instances of {@link MemberReferenceTree}.
*/
MEMBER_REFERENCE(MemberReferenceTree.class),
Used for instances of ForLoopTree
. /**
* Used for instances of {@link ForLoopTree}.
*/
FOR_LOOP(ForLoopTree.class),
Used for instances of IdentifierTree
. /**
* Used for instances of {@link IdentifierTree}.
*/
IDENTIFIER(IdentifierTree.class),
Used for instances of IfTree
. /**
* Used for instances of {@link IfTree}.
*/
IF(IfTree.class),
Used for instances of ImportTree
. /**
* Used for instances of {@link ImportTree}.
*/
IMPORT(ImportTree.class),
Used for instances of InstanceOfTree
. /**
* Used for instances of {@link InstanceOfTree}.
*/
INSTANCE_OF(InstanceOfTree.class),
Used for instances of LabeledStatementTree
. /**
* Used for instances of {@link LabeledStatementTree}.
*/
LABELED_STATEMENT(LabeledStatementTree.class),
Used for instances of MethodTree
. /**
* Used for instances of {@link MethodTree}.
*/
METHOD(MethodTree.class),
Used for instances of MethodInvocationTree
. /**
* Used for instances of {@link MethodInvocationTree}.
*/
METHOD_INVOCATION(MethodInvocationTree.class),
Used for instances of ModifiersTree
. /**
* Used for instances of {@link ModifiersTree}.
*/
MODIFIERS(ModifiersTree.class),
Used for instances of NewArrayTree
. /**
* Used for instances of {@link NewArrayTree}.
*/
NEW_ARRAY(NewArrayTree.class),
Used for instances of NewClassTree
. /**
* Used for instances of {@link NewClassTree}.
*/
NEW_CLASS(NewClassTree.class),
Used for instances of LambdaExpressionTree
. /**
* Used for instances of {@link LambdaExpressionTree}.
*/
LAMBDA_EXPRESSION(LambdaExpressionTree.class),
Used for instances of PackageTree
. Since: 9
/**
* Used for instances of {@link PackageTree}.
* @since 9
*/
PACKAGE(PackageTree.class),
Used for instances of ParenthesizedTree
. /**
* Used for instances of {@link ParenthesizedTree}.
*/
PARENTHESIZED(ParenthesizedTree.class),
Used for instances of BindingPatternTree
. Since: 16
/**
* Used for instances of {@link BindingPatternTree}.
*
* @since 16
*/
BINDING_PATTERN(BindingPatternTree.class),
Used for instances of PrimitiveTypeTree
. /**
* Used for instances of {@link PrimitiveTypeTree}.
*/
PRIMITIVE_TYPE(PrimitiveTypeTree.class),
Used for instances of ReturnTree
. /**
* Used for instances of {@link ReturnTree}.
*/
RETURN(ReturnTree.class),
Used for instances of EmptyStatementTree
. /**
* Used for instances of {@link EmptyStatementTree}.
*/
EMPTY_STATEMENT(EmptyStatementTree.class),
Used for instances of SwitchTree
. /**
* Used for instances of {@link SwitchTree}.
*/
SWITCH(SwitchTree.class),
Used for instances of SwitchExpressionTree
. Since: 12
/**
* Used for instances of {@link SwitchExpressionTree}.
*
* @since 12
*/
SWITCH_EXPRESSION(SwitchExpressionTree.class),
Used for instances of SynchronizedTree
. /**
* Used for instances of {@link SynchronizedTree}.
*/
SYNCHRONIZED(SynchronizedTree.class),
Used for instances of ThrowTree
. /**
* Used for instances of {@link ThrowTree}.
*/
THROW(ThrowTree.class),
Used for instances of TryTree
. /**
* Used for instances of {@link TryTree}.
*/
TRY(TryTree.class),
Used for instances of ParameterizedTypeTree
. /**
* Used for instances of {@link ParameterizedTypeTree}.
*/
PARAMETERIZED_TYPE(ParameterizedTypeTree.class),
Used for instances of UnionTypeTree
. /**
* Used for instances of {@link UnionTypeTree}.
*/
UNION_TYPE(UnionTypeTree.class),
Used for instances of IntersectionTypeTree
. /**
* Used for instances of {@link IntersectionTypeTree}.
*/
INTERSECTION_TYPE(IntersectionTypeTree.class),
Used for instances of TypeCastTree
. /**
* Used for instances of {@link TypeCastTree}.
*/
TYPE_CAST(TypeCastTree.class),
Used for instances of TypeParameterTree
. /**
* Used for instances of {@link TypeParameterTree}.
*/
TYPE_PARAMETER(TypeParameterTree.class),
Used for instances of VariableTree
. /**
* Used for instances of {@link VariableTree}.
*/
VARIABLE(VariableTree.class),
Used for instances of WhileLoopTree
. /**
* Used for instances of {@link WhileLoopTree}.
*/
WHILE_LOOP(WhileLoopTree.class),
Used for instances of UnaryTree
representing postfix increment operator ++
. /**
* Used for instances of {@link UnaryTree} representing postfix
* increment operator {@code ++}.
*/
POSTFIX_INCREMENT(UnaryTree.class),
Used for instances of UnaryTree
representing postfix decrement operator --
. /**
* Used for instances of {@link UnaryTree} representing postfix
* decrement operator {@code --}.
*/
POSTFIX_DECREMENT(UnaryTree.class),
Used for instances of UnaryTree
representing prefix increment operator ++
. /**
* Used for instances of {@link UnaryTree} representing prefix
* increment operator {@code ++}.
*/
PREFIX_INCREMENT(UnaryTree.class),
Used for instances of UnaryTree
representing prefix decrement operator --
. /**
* Used for instances of {@link UnaryTree} representing prefix
* decrement operator {@code --}.
*/
PREFIX_DECREMENT(UnaryTree.class),
Used for instances of UnaryTree
representing unary plus operator +
. /**
* Used for instances of {@link UnaryTree} representing unary plus
* operator {@code +}.
*/
UNARY_PLUS(UnaryTree.class),
Used for instances of UnaryTree
representing unary minus operator -
. /**
* Used for instances of {@link UnaryTree} representing unary minus
* operator {@code -}.
*/
UNARY_MINUS(UnaryTree.class),
Used for instances of UnaryTree
representing bitwise complement operator ~
. /**
* Used for instances of {@link UnaryTree} representing bitwise
* complement operator {@code ~}.
*/
BITWISE_COMPLEMENT(UnaryTree.class),
Used for instances of UnaryTree
representing logical complement operator !
. /**
* Used for instances of {@link UnaryTree} representing logical
* complement operator {@code !}.
*/
LOGICAL_COMPLEMENT(UnaryTree.class),
Used for instances of BinaryTree
representing multiplication *
. /**
* Used for instances of {@link BinaryTree} representing
* multiplication {@code *}.
*/
MULTIPLY(BinaryTree.class),
Used for instances of BinaryTree
representing division /
. /**
* Used for instances of {@link BinaryTree} representing
* division {@code /}.
*/
DIVIDE(BinaryTree.class),
Used for instances of BinaryTree
representing remainder %
. /**
* Used for instances of {@link BinaryTree} representing
* remainder {@code %}.
*/
REMAINDER(BinaryTree.class),
Used for instances of BinaryTree
representing addition or string concatenation +
. /**
* Used for instances of {@link BinaryTree} representing
* addition or string concatenation {@code +}.
*/
PLUS(BinaryTree.class),
Used for instances of BinaryTree
representing subtraction -
. /**
* Used for instances of {@link BinaryTree} representing
* subtraction {@code -}.
*/
MINUS(BinaryTree.class),
Used for instances of BinaryTree
representing left shift <<
. /**
* Used for instances of {@link BinaryTree} representing
* left shift {@code <<}.
*/
LEFT_SHIFT(BinaryTree.class),
Used for instances of BinaryTree
representing right shift >>
. /**
* Used for instances of {@link BinaryTree} representing
* right shift {@code >>}.
*/
RIGHT_SHIFT(BinaryTree.class),
Used for instances of BinaryTree
representing unsigned right shift >>>
. /**
* Used for instances of {@link BinaryTree} representing
* unsigned right shift {@code >>>}.
*/
UNSIGNED_RIGHT_SHIFT(BinaryTree.class),
Used for instances of BinaryTree
representing less-than <
. /**
* Used for instances of {@link BinaryTree} representing
* less-than {@code <}.
*/
LESS_THAN(BinaryTree.class),
Used for instances of BinaryTree
representing greater-than >
. /**
* Used for instances of {@link BinaryTree} representing
* greater-than {@code >}.
*/
GREATER_THAN(BinaryTree.class),
Used for instances of BinaryTree
representing less-than-equal <=
. /**
* Used for instances of {@link BinaryTree} representing
* less-than-equal {@code <=}.
*/
LESS_THAN_EQUAL(BinaryTree.class),
Used for instances of BinaryTree
representing greater-than-equal >=
. /**
* Used for instances of {@link BinaryTree} representing
* greater-than-equal {@code >=}.
*/
GREATER_THAN_EQUAL(BinaryTree.class),
Used for instances of BinaryTree
representing equal-to ==
. /**
* Used for instances of {@link BinaryTree} representing
* equal-to {@code ==}.
*/
EQUAL_TO(BinaryTree.class),
Used for instances of BinaryTree
representing not-equal-to !=
. /**
* Used for instances of {@link BinaryTree} representing
* not-equal-to {@code !=}.
*/
NOT_EQUAL_TO(BinaryTree.class),
Used for instances of BinaryTree
representing bitwise and logical "and" &
. /**
* Used for instances of {@link BinaryTree} representing
* bitwise and logical "and" {@code &}.
*/
AND(BinaryTree.class),
Used for instances of BinaryTree
representing bitwise and logical "xor" ^
. /**
* Used for instances of {@link BinaryTree} representing
* bitwise and logical "xor" {@code ^}.
*/
XOR(BinaryTree.class),
Used for instances of BinaryTree
representing bitwise and logical "or" |
. /**
* Used for instances of {@link BinaryTree} representing
* bitwise and logical "or" {@code |}.
*/
OR(BinaryTree.class),
Used for instances of BinaryTree
representing conditional-and &&
. /**
* Used for instances of {@link BinaryTree} representing
* conditional-and {@code &&}.
*/
CONDITIONAL_AND(BinaryTree.class),
Used for instances of BinaryTree
representing conditional-or ||
. /**
* Used for instances of {@link BinaryTree} representing
* conditional-or {@code ||}.
*/
CONDITIONAL_OR(BinaryTree.class),
Used for instances of CompoundAssignmentTree
representing multiplication assignment *=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* multiplication assignment {@code *=}.
*/
MULTIPLY_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing division assignment /=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* division assignment {@code /=}.
*/
DIVIDE_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing remainder assignment %=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* remainder assignment {@code %=}.
*/
REMAINDER_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing addition or string concatenation assignment +=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* addition or string concatenation assignment {@code +=}.
*/
PLUS_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing subtraction assignment -=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* subtraction assignment {@code -=}.
*/
MINUS_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing left shift assignment <<=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* left shift assignment {@code <<=}.
*/
LEFT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing right shift assignment >>=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* right shift assignment {@code >>=}.
*/
RIGHT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing unsigned right shift assignment >>>=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* unsigned right shift assignment {@code >>>=}.
*/
UNSIGNED_RIGHT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing bitwise and logical "and" assignment &=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* bitwise and logical "and" assignment {@code &=}.
*/
AND_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing bitwise and logical "xor" assignment ^=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* bitwise and logical "xor" assignment {@code ^=}.
*/
XOR_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of CompoundAssignmentTree
representing bitwise and logical "or" assignment |=
. /**
* Used for instances of {@link CompoundAssignmentTree} representing
* bitwise and logical "or" assignment {@code |=}.
*/
OR_ASSIGNMENT(CompoundAssignmentTree.class),
Used for instances of LiteralTree
representing an integral literal expression of type int
. /**
* Used for instances of {@link LiteralTree} representing
* an integral literal expression of type {@code int}.
*/
INT_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing an integral literal expression of type long
. /**
* Used for instances of {@link LiteralTree} representing
* an integral literal expression of type {@code long}.
*/
LONG_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing a floating-point literal expression of type float
. /**
* Used for instances of {@link LiteralTree} representing
* a floating-point literal expression of type {@code float}.
*/
FLOAT_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing a floating-point literal expression of type double
. /**
* Used for instances of {@link LiteralTree} representing
* a floating-point literal expression of type {@code double}.
*/
DOUBLE_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing a boolean literal expression of type boolean
. /**
* Used for instances of {@link LiteralTree} representing
* a boolean literal expression of type {@code boolean}.
*/
BOOLEAN_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing a character literal expression of type char
. /**
* Used for instances of {@link LiteralTree} representing
* a character literal expression of type {@code char}.
*/
CHAR_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing a string literal expression of type String
. /**
* Used for instances of {@link LiteralTree} representing
* a string literal expression of type {@link String}.
*/
STRING_LITERAL(LiteralTree.class),
Used for instances of LiteralTree
representing the use of null
. /**
* Used for instances of {@link LiteralTree} representing
* the use of {@code null}.
*/
NULL_LITERAL(LiteralTree.class),
Used for instances of WildcardTree
representing an unbounded wildcard type argument. /**
* Used for instances of {@link WildcardTree} representing
* an unbounded wildcard type argument.
*/
UNBOUNDED_WILDCARD(WildcardTree.class),
Used for instances of WildcardTree
representing an extends bounded wildcard type argument. /**
* Used for instances of {@link WildcardTree} representing
* an extends bounded wildcard type argument.
*/
EXTENDS_WILDCARD(WildcardTree.class),
Used for instances of WildcardTree
representing a super bounded wildcard type argument. /**
* Used for instances of {@link WildcardTree} representing
* a super bounded wildcard type argument.
*/
SUPER_WILDCARD(WildcardTree.class),
Used for instances of ErroneousTree
. /**
* Used for instances of {@link ErroneousTree}.
*/
ERRONEOUS(ErroneousTree.class),
Used for instances of ClassTree
representing interfaces. /**
* Used for instances of {@link ClassTree} representing interfaces.
*/
INTERFACE(ClassTree.class),
Used for instances of ClassTree
representing enums. /**
* Used for instances of {@link ClassTree} representing enums.
*/
ENUM(ClassTree.class),
Used for instances of ClassTree
representing annotation types. /**
* Used for instances of {@link ClassTree} representing annotation types.
*/
ANNOTATION_TYPE(ClassTree.class),
Used for instances of ModuleTree
representing module declarations. /**
* Used for instances of {@link ModuleTree} representing module declarations.
*/
MODULE(ModuleTree.class),
Used for instances of ExportsTree
representing exports directives in a module declaration. /**
* Used for instances of {@link ExportsTree} representing
* exports directives in a module declaration.
*/
EXPORTS(ExportsTree.class),
Used for instances of ExportsTree
representing opens directives in a module declaration. /**
* Used for instances of {@link ExportsTree} representing
* opens directives in a module declaration.
*/
OPENS(OpensTree.class),
Used for instances of ProvidesTree
representing provides directives in a module declaration. /**
* Used for instances of {@link ProvidesTree} representing
* provides directives in a module declaration.
*/
PROVIDES(ProvidesTree.class),
Used for instances of ClassTree
representing records. Since: 16
/**
* Used for instances of {@link ClassTree} representing records.
* @since 16
*/
RECORD(ClassTree.class),
Used for instances of RequiresTree
representing requires directives in a module declaration. /**
* Used for instances of {@link RequiresTree} representing
* requires directives in a module declaration.
*/
REQUIRES(RequiresTree.class),
Used for instances of UsesTree
representing uses directives in a module declaration. /**
* Used for instances of {@link UsesTree} representing
* uses directives in a module declaration.
*/
USES(UsesTree.class),
An implementation-reserved node. This is the not the node
you are looking for.
/**
* An implementation-reserved node. This is the not the node
* you are looking for.
*/
OTHER(null),
Used for instances of YieldTree
. Since: 13
/**
* Used for instances of {@link YieldTree}.
*
* @since 13
*/
YIELD(YieldTree.class);
Kind(Class<? extends Tree> intf) {
associatedInterface = intf;
}
Returns the associated interface type that uses this kind.
Returns: the associated interface
/**
* Returns the associated interface type that uses this kind.
* @return the associated interface
*/
public Class<? extends Tree> asInterface() {
return associatedInterface;
}
private final Class<? extends Tree> associatedInterface;
}
Returns the kind of this tree.
Returns: the kind of this tree
/**
* Returns the kind of this tree.
*
* @return the kind of this tree
*/
Kind getKind();
Accept method used to implement the visitor pattern. The
visitor pattern is used to implement operations on trees.
Params: - visitor – the visitor to be called
- data – a value to be passed to the visitor
Type parameters: - <R> – the result type of this operation
- <D> – the type of additional data
Returns: the result returned from calling the visitor
/**
* Accept method used to implement the visitor pattern. The
* visitor pattern is used to implement operations on trees.
*
* @param <R> the result type of this operation
* @param <D> the type of additional data
* @param visitor the visitor to be called
* @param data a value to be passed to the visitor
* @return the result returned from calling the visitor
*/
<R,D> R accept(TreeVisitor<R,D> visitor, D data);
}