1 /* 2 * Copyright (c) 2005, 2016, 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™ 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é 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 * Used for instances of {@link AnnotatedTypeTree} 50 * representing annotated types. 51 */ 52 ANNOTATED_TYPE(AnnotatedTypeTree.class), 53 54 /** 55 * Used for instances of {@link AnnotationTree} 56 * representing declaration annotations. 57 */ 58 ANNOTATION(AnnotationTree.class), 59 60 /** 61 * Used for instances of {@link AnnotationTree} 62 * representing type annotations. 63 */ 64 TYPE_ANNOTATION(AnnotationTree.class), 65 66 /** 67 * Used for instances of {@link ArrayAccessTree}. 68 */ 69 ARRAY_ACCESS(ArrayAccessTree.class), 70 71 /** 72 * Used for instances of {@link ArrayTypeTree}. 73 */ 74 ARRAY_TYPE(ArrayTypeTree.class), 75 76 /** 77 * Used for instances of {@link AssertTree}. 78 */ 79 ASSERT(AssertTree.class), 80 81 /** 82 * Used for instances of {@link AssignmentTree}. 83 */ 84 ASSIGNMENT(AssignmentTree.class), 85 86 /** 87 * Used for instances of {@link BlockTree}. 88 */ 89 BLOCK(BlockTree.class), 90 91 /** 92 * Used for instances of {@link BreakTree}. 93 */ 94 BREAK(BreakTree.class), 95 96 /** 97 * Used for instances of {@link CaseTree}. 98 */ 99 CASE(CaseTree.class), 100 101 /** 102 * Used for instances of {@link CatchTree}. 103 */ 104 CATCH(CatchTree.class), 105 106 /** 107 * Used for instances of {@link ClassTree} representing classes. 108 */ 109 CLASS(ClassTree.class), 110 111 /** 112 * Used for instances of {@link CompilationUnitTree}. 113 */ 114 COMPILATION_UNIT(CompilationUnitTree.class), 115 116 /** 117 * Used for instances of {@link ConditionalExpressionTree}. 118 */ 119 CONDITIONAL_EXPRESSION(ConditionalExpressionTree.class), 120 121 /** 122 * Used for instances of {@link ContinueTree}. 123 */ 124 CONTINUE(ContinueTree.class), 125 126 /** 127 * Used for instances of {@link DoWhileLoopTree}. 128 */ 129 DO_WHILE_LOOP(DoWhileLoopTree.class), 130 131 /** 132 * Used for instances of {@link EnhancedForLoopTree}. 133 */ 134 ENHANCED_FOR_LOOP(EnhancedForLoopTree.class), 135 136 /** 137 * Used for instances of {@link ExpressionStatementTree}. 138 */ 139 EXPRESSION_STATEMENT(ExpressionStatementTree.class), 140 141 /** 142 * Used for instances of {@link MemberSelectTree}. 143 */ 144 MEMBER_SELECT(MemberSelectTree.class), 145 146 /** 147 * Used for instances of {@link MemberReferenceTree}. 148 */ 149 MEMBER_REFERENCE(MemberReferenceTree.class), 150 151 /** 152 * Used for instances of {@link ForLoopTree}. 153 */ 154 FOR_LOOP(ForLoopTree.class), 155 156 /** 157 * Used for instances of {@link IdentifierTree}. 158 */ 159 IDENTIFIER(IdentifierTree.class), 160 161 /** 162 * Used for instances of {@link IfTree}. 163 */ 164 IF(IfTree.class), 165 166 /** 167 * Used for instances of {@link ImportTree}. 168 */ 169 IMPORT(ImportTree.class), 170 171 /** 172 * Used for instances of {@link InstanceOfTree}. 173 */ 174 INSTANCE_OF(InstanceOfTree.class), 175 176 /** 177 * Used for instances of {@link LabeledStatementTree}. 178 */ 179 LABELED_STATEMENT(LabeledStatementTree.class), 180 181 /** 182 * Used for instances of {@link MethodTree}. 183 */ 184 METHOD(MethodTree.class), 185 186 /** 187 * Used for instances of {@link MethodInvocationTree}. 188 */ 189 METHOD_INVOCATION(MethodInvocationTree.class), 190 191 /** 192 * Used for instances of {@link ModifiersTree}. 193 */ 194 MODIFIERS(ModifiersTree.class), 195 196 /** 197 * Used for instances of {@link NewArrayTree}. 198 */ 199 NEW_ARRAY(NewArrayTree.class), 200 201 /** 202 * Used for instances of {@link NewClassTree}. 203 */ 204 NEW_CLASS(NewClassTree.class), 205 206 /** 207 * Used for instances of {@link LambdaExpressionTree}. 208 */ 209 LAMBDA_EXPRESSION(LambdaExpressionTree.class), 210 211 /** 212 * Used for instances of {@link PackageTree}. 213 * @since 9 214 */ 215 PACKAGE(PackageTree.class), 216 217 /** 218 * Used for instances of {@link ParenthesizedTree}. 219 */ 220 PARENTHESIZED(ParenthesizedTree.class), 221 222 /** 223 * Used for instances of {@link PrimitiveTypeTree}. 224 */ 225 PRIMITIVE_TYPE(PrimitiveTypeTree.class), 226 227 /** 228 * Used for instances of {@link ReturnTree}. 229 */ 230 RETURN(ReturnTree.class), 231 232 /** 233 * Used for instances of {@link EmptyStatementTree}. 234 */ 235 EMPTY_STATEMENT(EmptyStatementTree.class), 236 237 /** 238 * Used for instances of {@link SwitchTree}. 239 */ 240 SWITCH(SwitchTree.class), 241 242 /** 243 * Used for instances of {@link SynchronizedTree}. 244 */ 245 SYNCHRONIZED(SynchronizedTree.class), 246 247 /** 248 * Used for instances of {@link ThrowTree}. 249 */ 250 THROW(ThrowTree.class), 251 252 /** 253 * Used for instances of {@link TryTree}. 254 */ 255 TRY(TryTree.class), 256 257 /** 258 * Used for instances of {@link ParameterizedTypeTree}. 259 */ 260 PARAMETERIZED_TYPE(ParameterizedTypeTree.class), 261 262 /** 263 * Used for instances of {@link UnionTypeTree}. 264 */ 265 UNION_TYPE(UnionTypeTree.class), 266 267 /** 268 * Used for instances of {@link IntersectionTypeTree}. 269 */ 270 INTERSECTION_TYPE(IntersectionTypeTree.class), 271 272 /** 273 * Used for instances of {@link TypeCastTree}. 274 */ 275 TYPE_CAST(TypeCastTree.class), 276 277 /** 278 * Used for instances of {@link TypeParameterTree}. 279 */ 280 TYPE_PARAMETER(TypeParameterTree.class), 281 282 /** 283 * Used for instances of {@link VariableTree}. 284 */ 285 VARIABLE(VariableTree.class), 286 287 /** 288 * Used for instances of {@link WhileLoopTree}. 289 */ 290 WHILE_LOOP(WhileLoopTree.class), 291 292 /** 293 * Used for instances of {@link UnaryTree} representing postfix 294 * increment operator {@code ++}. 295 */ 296 POSTFIX_INCREMENT(UnaryTree.class), 297 298 /** 299 * Used for instances of {@link UnaryTree} representing postfix 300 * decrement operator {@code --}. 301 */ 302 POSTFIX_DECREMENT(UnaryTree.class), 303 304 /** 305 * Used for instances of {@link UnaryTree} representing prefix 306 * increment operator {@code ++}. 307 */ 308 PREFIX_INCREMENT(UnaryTree.class), 309 310 /** 311 * Used for instances of {@link UnaryTree} representing prefix 312 * decrement operator {@code --}. 313 */ 314 PREFIX_DECREMENT(UnaryTree.class), 315 316 /** 317 * Used for instances of {@link UnaryTree} representing unary plus 318 * operator {@code +}. 319 */ 320 UNARY_PLUS(UnaryTree.class), 321 322 /** 323 * Used for instances of {@link UnaryTree} representing unary minus 324 * operator {@code -}. 325 */ 326 UNARY_MINUS(UnaryTree.class), 327 328 /** 329 * Used for instances of {@link UnaryTree} representing bitwise 330 * complement operator {@code ~}. 331 */ 332 BITWISE_COMPLEMENT(UnaryTree.class), 333 334 /** 335 * Used for instances of {@link UnaryTree} representing logical 336 * complement operator {@code !}. 337 */ 338 LOGICAL_COMPLEMENT(UnaryTree.class), 339 340 /** 341 * Used for instances of {@link BinaryTree} representing 342 * multiplication {@code *}. 343 */ 344 MULTIPLY(BinaryTree.class), 345 346 /** 347 * Used for instances of {@link BinaryTree} representing 348 * division {@code /}. 349 */ 350 DIVIDE(BinaryTree.class), 351 352 /** 353 * Used for instances of {@link BinaryTree} representing 354 * remainder {@code %}. 355 */ 356 REMAINDER(BinaryTree.class), 357 358 /** 359 * Used for instances of {@link BinaryTree} representing 360 * addition or string concatenation {@code +}. 361 */ 362 PLUS(BinaryTree.class), 363 364 /** 365 * Used for instances of {@link BinaryTree} representing 366 * subtraction {@code -}. 367 */ 368 MINUS(BinaryTree.class), 369 370 /** 371 * Used for instances of {@link BinaryTree} representing 372 * left shift {@code <<}. 373 */ 374 LEFT_SHIFT(BinaryTree.class), 375 376 /** 377 * Used for instances of {@link BinaryTree} representing 378 * right shift {@code >>}. 379 */ 380 RIGHT_SHIFT(BinaryTree.class), 381 382 /** 383 * Used for instances of {@link BinaryTree} representing 384 * unsigned right shift {@code >>>}. 385 */ 386 UNSIGNED_RIGHT_SHIFT(BinaryTree.class), 387 388 /** 389 * Used for instances of {@link BinaryTree} representing 390 * less-than {@code <}. 391 */ 392 LESS_THAN(BinaryTree.class), 393 394 /** 395 * Used for instances of {@link BinaryTree} representing 396 * greater-than {@code >}. 397 */ 398 GREATER_THAN(BinaryTree.class), 399 400 /** 401 * Used for instances of {@link BinaryTree} representing 402 * less-than-equal {@code <=}. 403 */ 404 LESS_THAN_EQUAL(BinaryTree.class), 405 406 /** 407 * Used for instances of {@link BinaryTree} representing 408 * greater-than-equal {@code >=}. 409 */ 410 GREATER_THAN_EQUAL(BinaryTree.class), 411 412 /** 413 * Used for instances of {@link BinaryTree} representing 414 * equal-to {@code ==}. 415 */ 416 EQUAL_TO(BinaryTree.class), 417 418 /** 419 * Used for instances of {@link BinaryTree} representing 420 * not-equal-to {@code !=}. 421 */ 422 NOT_EQUAL_TO(BinaryTree.class), 423 424 /** 425 * Used for instances of {@link BinaryTree} representing 426 * bitwise and logical "and" {@code &}. 427 */ 428 AND(BinaryTree.class), 429 430 /** 431 * Used for instances of {@link BinaryTree} representing 432 * bitwise and logical "xor" {@code ^}. 433 */ 434 XOR(BinaryTree.class), 435 436 /** 437 * Used for instances of {@link BinaryTree} representing 438 * bitwise and logical "or" {@code |}. 439 */ 440 OR(BinaryTree.class), 441 442 /** 443 * Used for instances of {@link BinaryTree} representing 444 * conditional-and {@code &&}. 445 */ 446 CONDITIONAL_AND(BinaryTree.class), 447 448 /** 449 * Used for instances of {@link BinaryTree} representing 450 * conditional-or {@code ||}. 451 */ 452 CONDITIONAL_OR(BinaryTree.class), 453 454 /** 455 * Used for instances of {@link CompoundAssignmentTree} representing 456 * multiplication assignment {@code *=}. 457 */ 458 MULTIPLY_ASSIGNMENT(CompoundAssignmentTree.class), 459 460 /** 461 * Used for instances of {@link CompoundAssignmentTree} representing 462 * division assignment {@code /=}. 463 */ 464 DIVIDE_ASSIGNMENT(CompoundAssignmentTree.class), 465 466 /** 467 * Used for instances of {@link CompoundAssignmentTree} representing 468 * remainder assignment {@code %=}. 469 */ 470 REMAINDER_ASSIGNMENT(CompoundAssignmentTree.class), 471 472 /** 473 * Used for instances of {@link CompoundAssignmentTree} representing 474 * addition or string concatenation assignment {@code +=}. 475 */ 476 PLUS_ASSIGNMENT(CompoundAssignmentTree.class), 477 478 /** 479 * Used for instances of {@link CompoundAssignmentTree} representing 480 * subtraction assignment {@code -=}. 481 */ 482 MINUS_ASSIGNMENT(CompoundAssignmentTree.class), 483 484 /** 485 * Used for instances of {@link CompoundAssignmentTree} representing 486 * left shift assignment {@code <<=}. 487 */ 488 LEFT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class), 489 490 /** 491 * Used for instances of {@link CompoundAssignmentTree} representing 492 * right shift assignment {@code >>=}. 493 */ 494 RIGHT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class), 495 496 /** 497 * Used for instances of {@link CompoundAssignmentTree} representing 498 * unsigned right shift assignment {@code >>>=}. 499 */ 500 UNSIGNED_RIGHT_SHIFT_ASSIGNMENT(CompoundAssignmentTree.class), 501 502 /** 503 * Used for instances of {@link CompoundAssignmentTree} representing 504 * bitwise and logical "and" assignment {@code &=}. 505 */ 506 AND_ASSIGNMENT(CompoundAssignmentTree.class), 507 508 /** 509 * Used for instances of {@link CompoundAssignmentTree} representing 510 * bitwise and logical "xor" assignment {@code ^=}. 511 */ 512 XOR_ASSIGNMENT(CompoundAssignmentTree.class), 513 514 /** 515 * Used for instances of {@link CompoundAssignmentTree} representing 516 * bitwise and logical "or" assignment {@code |=}. 517 */ 518 OR_ASSIGNMENT(CompoundAssignmentTree.class), 519 520 /** 521 * Used for instances of {@link LiteralTree} representing 522 * an integral literal expression of type {@code int}. 523 */ 524 INT_LITERAL(LiteralTree.class), 525 526 /** 527 * Used for instances of {@link LiteralTree} representing 528 * an integral literal expression of type {@code long}. 529 */ 530 LONG_LITERAL(LiteralTree.class), 531 532 /** 533 * Used for instances of {@link LiteralTree} representing 534 * a floating-point literal expression of type {@code float}. 535 */ 536 FLOAT_LITERAL(LiteralTree.class), 537 538 /** 539 * Used for instances of {@link LiteralTree} representing 540 * a floating-point literal expression of type {@code double}. 541 */ 542 DOUBLE_LITERAL(LiteralTree.class), 543 544 /** 545 * Used for instances of {@link LiteralTree} representing 546 * a boolean literal expression of type {@code boolean}. 547 */ 548 BOOLEAN_LITERAL(LiteralTree.class), 549 550 /** 551 * Used for instances of {@link LiteralTree} representing 552 * a character literal expression of type {@code char}. 553 */ 554 CHAR_LITERAL(LiteralTree.class), 555 556 /** 557 * Used for instances of {@link LiteralTree} representing 558 * a string literal expression of type {@link String}. 559 */ 560 STRING_LITERAL(LiteralTree.class), 561 562 /** 563 * Used for instances of {@link LiteralTree} representing 564 * the use of {@code null}. 565 */ 566 NULL_LITERAL(LiteralTree.class), 567 568 /** 569 * Used for instances of {@link WildcardTree} representing 570 * an unbounded wildcard type argument. 571 */ 572 UNBOUNDED_WILDCARD(WildcardTree.class), 573 574 /** 575 * Used for instances of {@link WildcardTree} representing 576 * an extends bounded wildcard type argument. 577 */ 578 EXTENDS_WILDCARD(WildcardTree.class), 579 580 /** 581 * Used for instances of {@link WildcardTree} representing 582 * a super bounded wildcard type argument. 583 */ 584 SUPER_WILDCARD(WildcardTree.class), 585 586 /** 587 * Used for instances of {@link ErroneousTree}. 588 */ 589 ERRONEOUS(ErroneousTree.class), 590 591 /** 592 * Used for instances of {@link ClassTree} representing interfaces. 593 */ 594 INTERFACE(ClassTree.class), 595 596 /** 597 * Used for instances of {@link ClassTree} representing enums. 598 */ 599 ENUM(ClassTree.class), 600 601 /** 602 * Used for instances of {@link ClassTree} representing annotation types. 603 */ 604 ANNOTATION_TYPE(ClassTree.class), 605 606 /** 607 * Used for instances of {@link ModuleTree} representing module declarations. 608 */ 609 MODULE(ModuleTree.class), 610 611 /** 612 * Used for instances of {@link ExportsTree} representing 613 * exports directives in a module declaration. 614 */ 615 EXPORTS(ExportsTree.class), 616 617 /** 618 * Used for instances of {@link ExportsTree} representing 619 * opens directives in a module declaration. 620 */ 621 OPENS(OpensTree.class), 622 623 /** 624 * Used for instances of {@link ProvidesTree} representing 625 * provides directives in a module declaration. 626 */ 627 PROVIDES(ProvidesTree.class), 628 629 /** 630 * Used for instances of {@link RequiresTree} representing 631 * requires directives in a module declaration. 632 */ 633 REQUIRES(RequiresTree.class), 634 635 /** 636 * Used for instances of {@link UsesTree} representing 637 * uses directives in a module declaration. 638 */ 639 USES(UsesTree.class), 640 641 /** 642 * An implementation-reserved node. This is the not the node 643 * you are looking for. 644 */ 645 OTHER(null); 646 647 648 Kind(Class<? extends Tree> intf) { 649 associatedInterface = intf; 650 } 651 652 /** 653 * Returns the associated interface type that uses this kind. 654 * @return the associated interface 655 */ 656 public Class<? extends Tree> asInterface() { 657 return associatedInterface; 658 } 659 660 private final Class<? extends Tree> associatedInterface; 661 } 662 663 /** 664 * Returns the kind of this tree. 665 * 666 * @return the kind of this tree. 667 */ 668 Kind getKind(); 669 670 /** 671 * Accept method used to implement the visitor pattern. The 672 * visitor pattern is used to implement operations on trees. 673 * 674 * @param <R> result type of this operation. 675 * @param <D> type of additional data. 676 * @param visitor the visitor to be called 677 * @param data a value to be passed to the visitor 678 * @return the result returned from calling the visitor 679 */ 680 <R,D> R accept(TreeVisitor<R,D> visitor, D data); 681 }