1 /*
   2  * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.source.tree;
  27 
  28 /**
  29  * Common interface for all nodes in an abstract syntax tree.
  30  *
  31  * <p><b>WARNING:</b> This interface and its sub-interfaces are
  32  * subject to change as the Java&trade; programming language evolves.
  33  * These interfaces are implemented by the JDK Java compiler (javac)
  34  * and should not be implemented either directly or indirectly by
  35  * other applications.
  36  *
  37  * @author Peter von der Ah&eacute;
  38  * @author Jonathan Gibbons
  39  *
  40  * @since 1.6
  41  */
  42 public interface Tree {
  43 
  44     /**
  45      * Enumerates all kinds of trees.
  46      */
  47     public enum Kind {
  48 
  49         /**
  50          * Used for instances of {@link AnnotationTree}.
  51          */
  52         ANNOTATION(AnnotationTree.class),
  53 
  54         /**
  55          * Used for instances of {@link ArrayAccessTree}.
  56          */
  57         ARRAY_ACCESS(ArrayAccessTree.class),
  58 
  59         /**
  60          * Used for instances of {@link ArrayTypeTree}.
  61          */
  62         ARRAY_TYPE(ArrayTypeTree.class),
  63 
  64         /**
  65          * Used for instances of {@link AssertTree}.
  66          */
  67         ASSERT(AssertTree.class),
  68 
  69         /**
  70          * Used for instances of {@link AssignmentTree}.
  71          */
  72         ASSIGNMENT(AssignmentTree.class),
  73 
  74         /**
  75          * Used for instances of {@link BlockTree}.
  76          */
  77         BLOCK(BlockTree.class),
  78 
  79         /**
  80          * Used for instances of {@link BreakTree}.
  81          */
  82         BREAK(BreakTree.class),
  83 
  84         /**
  85          * Used for instances of {@link CaseTree}.
  86          */
  87         CASE(CaseTree.class),
  88 
  89         /**
  90          * Used for instances of {@link CatchTree}.
  91          */
  92         CATCH(CatchTree.class),
  93 
  94         /**
  95          * Used for instances of {@link ClassTree} representing classes.
  96          */
  97         CLASS(ClassTree.class),
  98 
  99         /**
 100          * Used for instances of {@link CompilationUnitTree}.
 101          */
 102         COMPILATION_UNIT(CompilationUnitTree.class),
 103 
 104         /**
 105          * Used for instances of {@link ConditionalExpressionTree}.
 106          */
 107         CONDITIONAL_EXPRESSION(ConditionalExpressionTree.class),
 108 
 109         /**
 110          * Used for instances of {@link ContinueTree}.
 111          */
 112         CONTINUE(ContinueTree.class),
 113 
 114         /**
 115          * Used for instances of {@link DoWhileLoopTree}.
 116          */
 117         DO_WHILE_LOOP(DoWhileLoopTree.class),
 118 
 119         /**
 120          * Used for instances of {@link EnhancedForLoopTree}.
 121          */
 122         ENHANCED_FOR_LOOP(EnhancedForLoopTree.class),
 123 
 124         /**
 125          * Used for instances of {@link ExpressionStatementTree}.
 126          */
 127         EXPRESSION_STATEMENT(ExpressionStatementTree.class),
 128 
 129         /**
 130          * Used for instances of {@link MemberSelectTree}.
 131          */
 132         MEMBER_SELECT(MemberSelectTree.class),
 133 
 134         /**
 135          * Used for instances of {@link ForLoopTree}.
 136          */
 137         FOR_LOOP(ForLoopTree.class),
 138 
 139         /**
 140          * Used for instances of {@link IdentifierTree}.
 141          */
 142         IDENTIFIER(IdentifierTree.class),
 143 
 144         /**
 145          * Used for instances of {@link IfTree}.
 146          */
 147         IF(IfTree.class),
 148 
 149         /**
 150          * Used for instances of {@link ImportTree}.
 151          */
 152         IMPORT(ImportTree.class),
 153 
 154         /**
 155          * Used for instances of {@link InstanceOfTree}.
 156          */
 157         INSTANCE_OF(InstanceOfTree.class),
 158 
 159         /**
 160          * Used for instances of {@link LabeledStatementTree}.
 161          */
 162         LABELED_STATEMENT(LabeledStatementTree.class),
 163 
 164         /**
 165          * Used for instances of {@link MethodTree}.
 166          */
 167         METHOD(MethodTree.class),
 168 
 169         /**
 170          * Used for instances of {@link MethodInvocationTree}.
 171          */
 172         METHOD_INVOCATION(MethodInvocationTree.class),
 173 
 174         /**
 175          * Used for instances of {@link ModifiersTree}.
 176          */
 177         MODIFIERS(ModifiersTree.class),
 178 
 179         /**
 180          * Used for instances of {@link NewArrayTree}.
 181          */
 182         NEW_ARRAY(NewArrayTree.class),
 183 
 184         /**
 185          * Used for instances of {@link NewClassTree}.
 186          */
 187         NEW_CLASS(NewClassTree.class),
 188 
 189         /**
 190          * Used for instances of {@link ParenthesizedTree}.
 191          */
 192         PARENTHESIZED(ParenthesizedTree.class),
 193 
 194         /**
 195          * Used for instances of {@link PrimitiveTypeTree}.
 196          */
 197         PRIMITIVE_TYPE(PrimitiveTypeTree.class),
 198 
 199         /**
 200          * Used for instances of {@link ReturnTree}.
 201          */
 202         RETURN(ReturnTree.class),
 203 
 204         /**
 205          * Used for instances of {@link EmptyStatementTree}.
 206          */
 207         EMPTY_STATEMENT(EmptyStatementTree.class),
 208 
 209         /**
 210          * Used for instances of {@link SwitchTree}.
 211          */
 212         SWITCH(SwitchTree.class),
 213 
 214         /**
 215          * Used for instances of {@link SynchronizedTree}.
 216          */
 217         SYNCHRONIZED(SynchronizedTree.class),
 218 
 219         /**
 220          * Used for instances of {@link ThrowTree}.
 221          */
 222         THROW(ThrowTree.class),
 223 
 224         /**
 225          * Used for instances of {@link TryTree}.
 226          */
 227         TRY(TryTree.class),
 228 
 229         /**
 230          * Used for instances of {@link ParameterizedTypeTree}.
 231          */
 232         PARAMETERIZED_TYPE(ParameterizedTypeTree.class),
 233 
 234         /**
 235          * Used for instances of {@link UnionTypeTree}.
 236          */
 237         UNION_TYPE(UnionTypeTree.class),
 238 
 239         /**
 240          * Used for instances of {@link TypeCastTree}.
 241          */
 242         TYPE_CAST(TypeCastTree.class),
 243 
 244         /**
 245          * Used for instances of {@link TypeParameterTree}.
 246          */
 247         TYPE_PARAMETER(TypeParameterTree.class),
 248 
 249         /**
 250          * Used for instances of {@link VariableTree}.
 251          */
 252         VARIABLE(VariableTree.class),
 253 
 254         /**
 255          * Used for instances of {@link WhileLoopTree}.
 256          */
 257         WHILE_LOOP(WhileLoopTree.class),
 258 
 259         /**
 260          * Used for instances of {@link UnaryTree} representing postfix
 261          * increment operator {@code ++}.
 262          */
 263         POSTFIX_INCREMENT(UnaryTree.class),
 264 
 265         /**
 266          * Used for instances of {@link UnaryTree} representing postfix
 267          * decrement operator {@code --}.
 268          */
 269         POSTFIX_DECREMENT(UnaryTree.class),
 270 
 271         /**
 272          * Used for instances of {@link UnaryTree} representing prefix
 273          * increment operator {@code ++}.
 274          */
 275         PREFIX_INCREMENT(UnaryTree.class),
 276 
 277         /**
 278          * Used for instances of {@link UnaryTree} representing prefix
 279          * decrement operator {@code --}.
 280          */
 281         PREFIX_DECREMENT(UnaryTree.class),
 282 
 283         /**
 284          * Used for instances of {@link UnaryTree} representing unary plus
 285          * operator {@code +}.
 286          */
 287         UNARY_PLUS(UnaryTree.class),
 288 
 289         /**
 290          * Used for instances of {@link UnaryTree} representing unary minus
 291          * operator {@code -}.
 292          */
 293         UNARY_MINUS(UnaryTree.class),
 294 
 295         /**
 296          * Used for instances of {@link UnaryTree} representing bitwise
 297          * complement operator {@code ~}.
 298          */
 299         BITWISE_COMPLEMENT(UnaryTree.class),
 300 
 301         /**
 302          * Used for instances of {@link UnaryTree} representing logical
 303          * complement operator {@code !}.
 304          */
 305         LOGICAL_COMPLEMENT(UnaryTree.class),
 306 
 307         /**
 308          * Used for instances of {@link BinaryTree} representing
 309          * multiplication {@code *}.
 310          */
 311         MULTIPLY(BinaryTree.class),
 312 
 313         /**
 314          * Used for instances of {@link BinaryTree} representing
 315          * division {@code /}.
 316          */
 317         DIVIDE(BinaryTree.class),
 318 
 319         /**
 320          * Used for instances of {@link BinaryTree} representing
 321          * remainder {@code %}.
 322          */
 323         REMAINDER(BinaryTree.class),
 324 
 325         /**
 326          * Used for instances of {@link BinaryTree} representing
 327          * addition or string concatenation {@code +}.
 328          */
 329         PLUS(BinaryTree.class),
 330 
 331         /**
 332          * Used for instances of {@link BinaryTree} representing
 333          * subtraction {@code -}.
 334          */
 335         MINUS(BinaryTree.class),
 336 
 337         /**
 338          * Used for instances of {@link BinaryTree} representing
 339          * left shift {@code <<}.
 340          */
 341         LEFT_SHIFT(BinaryTree.class),
 342 
 343         /**
 344          * Used for instances of {@link BinaryTree} representing
 345          * right shift {@code >>}.
 346          */
 347         RIGHT_SHIFT(BinaryTree.class),
 348 
 349         /**
 350          * Used for instances of {@link BinaryTree} representing
 351          * unsigned right shift {@code >>>}.
 352          */
 353         UNSIGNED_RIGHT_SHIFT(BinaryTree.class),
 354 
 355         /**
 356          * Used for instances of {@link BinaryTree} representing
 357          * less-than {@code <}.
 358          */
 359         LESS_THAN(BinaryTree.class),
 360 
 361         /**
 362          * Used for instances of {@link BinaryTree} representing
 363          * greater-than {@code >}.
 364          */
 365         GREATER_THAN(BinaryTree.class),
 366 
 367         /**
 368          * Used for instances of {@link BinaryTree} representing
 369          * less-than-equal {@code <=}.
 370          */
 371         LESS_THAN_EQUAL(BinaryTree.class),
 372 
 373         /**
 374          * Used for instances of {@link BinaryTree} representing
 375          * greater-than-equal {@code >=}.
 376          */
 377         GREATER_THAN_EQUAL(BinaryTree.class),
 378 
 379         /**
 380          * Used for instances of {@link BinaryTree} representing
 381          * equal-to {@code ==}.
 382          */
 383         EQUAL_TO(BinaryTree.class),
 384 
 385         /**
 386          * Used for instances of {@link BinaryTree} representing
 387          * not-equal-to {@code !=}.
 388          */
 389         NOT_EQUAL_TO(BinaryTree.class),
 390 
 391         /**
 392          * Used for instances of {@link BinaryTree} representing
 393          * bitwise and logical "and" {@code &}.
 394          */
 395         AND(BinaryTree.class),
 396 
 397         /**
 398          * Used for instances of {@link BinaryTree} representing
 399          * bitwise and logical "xor" {@code ^}.
 400          */
 401         XOR(BinaryTree.class),
 402 
 403         /**
 404          * Used for instances of {@link BinaryTree} representing
 405          * bitwise and logical "or" {@code |}.
 406          */
 407         OR(BinaryTree.class),
 408 
 409         /**
 410          * Used for instances of {@link BinaryTree} representing
 411          * conditional-and {@code &&}.
 412          */
 413         CONDITIONAL_AND(BinaryTree.class),
 414 
 415         /**
 416          * Used for instances of {@link BinaryTree} representing
 417          * conditional-or {@code ||}.
 418          */
 419         CONDITIONAL_OR(BinaryTree.class),
 420 
 421         /**
 422          * Used for instances of {@link CompoundAssignmentTree} representing
 423          * multiplication assignment {@code *=}.
 424          */
 425         MULTIPLY_ASSIGNMENT(CompoundAssignmentTree.class),
 426 
 427         /**
 428          * Used for instances of {@link CompoundAssignmentTree} representing
 429          * division assignment {@code /=}.
 430          */
 431         DIVIDE_ASSIGNMENT(CompoundAssignmentTree.class),
 432 
 433         /**
 434          * Used for instances of {@link CompoundAssignmentTree} representing
 435          * remainder assignment {@code %=}.
 436          */
 437         REMAINDER_ASSIGNMENT(CompoundAssignmentTree.class),
 438 
 439         /**
 440          * Used for instances of {@link CompoundAssignmentTree} representing
 441          * addition or string concatenation assignment {@code +=}.
 442          */
 443         PLUS_ASSIGNMENT(CompoundAssignmentTree.class),
 444 
 445         /**
 446          * Used for instances of {@link CompoundAssignmentTree} representing
 447          * subtraction assignment {@code -=}.
 448          */
 449         MINUS_ASSIGNMENT(CompoundAssignmentTree.class),
 450 
 451         /**
 452          * Used for instances of {@link CompoundAssignmentTree} representing
 453          * left shift assignment {@code <<=}.
 454          */
 455         LEFT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class),
 456 
 457         /**
 458          * Used for instances of {@link CompoundAssignmentTree} representing
 459          * right shift assignment {@code >>=}.
 460          */
 461         RIGHT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class),
 462 
 463         /**
 464          * Used for instances of {@link CompoundAssignmentTree} representing
 465          * unsigned right shift assignment {@code >>>=}.
 466          */
 467         UNSIGNED_RIGHT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class),
 468 
 469         /**
 470          * Used for instances of {@link CompoundAssignmentTree} representing
 471          * bitwise and logical "and" assignment {@code &=}.
 472          */
 473         AND_ASSIGNMENT(CompoundAssignmentTree.class),
 474 
 475         /**
 476          * Used for instances of {@link CompoundAssignmentTree} representing
 477          * bitwise and logical "xor" assignment {@code ^=}.
 478          */
 479         XOR_ASSIGNMENT(CompoundAssignmentTree.class),
 480 
 481         /**
 482          * Used for instances of {@link CompoundAssignmentTree} representing
 483          * bitwise and logical "or" assignment {@code |=}.
 484          */
 485         OR_ASSIGNMENT(CompoundAssignmentTree.class),
 486 
 487         /**
 488          * Used for instances of {@link LiteralTree} representing
 489          * an integral literal expression of type {@code int}.
 490          */
 491         INT_LITERAL(LiteralTree.class),
 492 
 493         /**
 494          * Used for instances of {@link LiteralTree} representing
 495          * an integral literal expression of type {@code long}.
 496          */
 497         LONG_LITERAL(LiteralTree.class),
 498 
 499         /**
 500          * Used for instances of {@link LiteralTree} representing
 501          * a floating-point literal expression of type {@code float}.
 502          */
 503         FLOAT_LITERAL(LiteralTree.class),
 504 
 505         /**
 506          * Used for instances of {@link LiteralTree} representing
 507          * a floating-point literal expression of type {@code double}.
 508          */
 509         DOUBLE_LITERAL(LiteralTree.class),
 510 
 511         /**
 512          * Used for instances of {@link LiteralTree} representing
 513          * a boolean literal expression of type {@code boolean}.
 514          */
 515         BOOLEAN_LITERAL(LiteralTree.class),
 516 
 517         /**
 518          * Used for instances of {@link LiteralTree} representing
 519          * a character literal expression of type {@code char}.
 520          */
 521         CHAR_LITERAL(LiteralTree.class),
 522 
 523         /**
 524          * Used for instances of {@link LiteralTree} representing
 525          * a string literal expression of type {@link String}.
 526          */
 527         STRING_LITERAL(LiteralTree.class),
 528 
 529         /**
 530          * Used for instances of {@link LiteralTree} representing
 531          * the use of {@code null}.
 532          */
 533         NULL_LITERAL(LiteralTree.class),
 534 
 535         /**
 536          * Used for instances of {@link WildcardTree} representing
 537          * an unbounded wildcard type argument.
 538          */
 539         UNBOUNDED_WILDCARD(WildcardTree.class),
 540 
 541         /**
 542          * Used for instances of {@link WildcardTree} representing
 543          * an extends bounded wildcard type argument.
 544          */
 545         EXTENDS_WILDCARD(WildcardTree.class),
 546 
 547         /**
 548          * Used for instances of {@link WildcardTree} representing
 549          * a super bounded wildcard type argument.
 550          */
 551         SUPER_WILDCARD(WildcardTree.class),
 552 
 553         /**
 554          * Used for instances of {@link ErroneousTree}.
 555          */
 556         ERRONEOUS(ErroneousTree.class),
 557 
 558         /**
 559          * Used for instances of {@link ClassTree} representing interfaces.
 560          */
 561         INTERFACE(ClassTree.class),
 562 
 563         /**
 564          * Used for instances of {@link ClassTree} representing enums.
 565          */
 566         ENUM(ClassTree.class),
 567 
 568         /**
 569          * Used for instances of {@link ClassTree} representing annotation types.
 570          */
 571         ANNOTATION_TYPE(ClassTree.class),
 572 
 573         /**
 574          * An implementation-reserved node. This is the not the node
 575          * you are looking for.
 576          */
 577         OTHER(null);
 578 
 579 
 580         Kind(Class<? extends Tree> intf) {
 581             associatedInterface = intf;
 582         }
 583 
 584         public Class<? extends Tree> asInterface() {
 585             return associatedInterface;
 586         }
 587 
 588         private final Class<? extends Tree> associatedInterface;
 589     }
 590 
 591     /**
 592      * Gets the kind of this tree.
 593      *
 594      * @return the kind of this tree.
 595      */
 596     Kind getKind();
 597 
 598     /**
 599      * Accept method used to implement the visitor pattern.  The
 600      * visitor pattern is used to implement operations on trees.
 601      *
 602      * @param <R> result type of this operation.
 603      * @param <D> type of additonal data.
 604      */
 605     <R,D> R accept(TreeVisitor<R,D> visitor, D data);
 606 }