Home » openjdk-7 » com.sun.source » tree » [javadoc | source]

    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   }

Home » openjdk-7 » com.sun.source » tree » [javadoc | source]