/*
* Copyright (c) 2005, 2016, 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 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 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 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);
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> – result type of this operation.
- <D> – 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> result type of this operation.
* @param <D> 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);
}