src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java

Print this page
rev 2819 : imported patch my-classpath-deps-00


   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.tools.javac.tree;
  27 



















































  28 import java.io.IOException;
  29 import java.io.StringWriter;
  30 import java.util.*;
  31 
  32 import javax.lang.model.element.Modifier;
  33 import javax.lang.model.type.TypeKind;
  34 import javax.tools.JavaFileObject;
  35 
  36 import com.sun.source.tree.*;
  37 import com.sun.source.tree.LambdaExpressionTree.BodyKind;
  38 import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
  39 import com.sun.tools.javac.code.*;
  40 import com.sun.tools.javac.code.Scope.*;
  41 import com.sun.tools.javac.code.Symbol.*;
  42 import com.sun.tools.javac.util.*;































































  43 import com.sun.tools.javac.util.DefinedBy.Api;
  44 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
  45 import com.sun.tools.javac.util.List;
  46 import static com.sun.tools.javac.tree.JCTree.Tag.*;


  47 
  48 /**
  49  * Root class for abstract syntax tree nodes. It provides definitions
  50  * for specific tree nodes as subclasses nested inside.
  51  *
  52  * <p>Each subclass is highly standardized.  It generally contains
  53  * only tree fields for the syntactic subcomponents of the node.  Some
  54  * classes that represent identifier uses or definitions also define a
  55  * Symbol field that denotes the represented identifier.  Classes for
  56  * non-local jumps also carry the jump target as a field.  The root
  57  * class Tree itself defines fields for the tree's type and position.
  58  * No other fields are kept in a tree node; instead parameters are
  59  * passed to methods accessing the node.
  60  *
  61  * <p>Except for the methods defined by com.sun.source, the only
  62  * method defined in subclasses is `visit' which applies a given
  63  * visitor to the tree. The actual tree processing is done by visitor
  64  * classes in other packages. The abstract class Visitor, as well as
  65  * an Factory interface for trees, are defined as inner classes in
  66  * Tree.




   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.tools.javac.tree;
  27 
  28 import static com.sun.tools.javac.tree.JCTree.Tag.ANNOTATED_TYPE;
  29 import static com.sun.tools.javac.tree.JCTree.Tag.APPLY;
  30 import static com.sun.tools.javac.tree.JCTree.Tag.ASSERT;
  31 import static com.sun.tools.javac.tree.JCTree.Tag.ASSIGN;
  32 import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK;
  33 import static com.sun.tools.javac.tree.JCTree.Tag.BREAK;
  34 import static com.sun.tools.javac.tree.JCTree.Tag.CASE;
  35 import static com.sun.tools.javac.tree.JCTree.Tag.CATCH;
  36 import static com.sun.tools.javac.tree.JCTree.Tag.CLASSDEF;
  37 import static com.sun.tools.javac.tree.JCTree.Tag.CONDEXPR;
  38 import static com.sun.tools.javac.tree.JCTree.Tag.CONTINUE;
  39 import static com.sun.tools.javac.tree.JCTree.Tag.DOLOOP;
  40 import static com.sun.tools.javac.tree.JCTree.Tag.ERRONEOUS;
  41 import static com.sun.tools.javac.tree.JCTree.Tag.EXEC;
  42 import static com.sun.tools.javac.tree.JCTree.Tag.FOREACHLOOP;
  43 import static com.sun.tools.javac.tree.JCTree.Tag.FORLOOP;
  44 import static com.sun.tools.javac.tree.JCTree.Tag.IDENT;
  45 import static com.sun.tools.javac.tree.JCTree.Tag.IF;
  46 import static com.sun.tools.javac.tree.JCTree.Tag.IMPORT;
  47 import static com.sun.tools.javac.tree.JCTree.Tag.INDEXED;
  48 import static com.sun.tools.javac.tree.JCTree.Tag.LABELLED;
  49 import static com.sun.tools.javac.tree.JCTree.Tag.LAMBDA;
  50 import static com.sun.tools.javac.tree.JCTree.Tag.LETEXPR;
  51 import static com.sun.tools.javac.tree.JCTree.Tag.LITERAL;
  52 import static com.sun.tools.javac.tree.JCTree.Tag.METHODDEF;
  53 import static com.sun.tools.javac.tree.JCTree.Tag.MODIFIERS;
  54 import static com.sun.tools.javac.tree.JCTree.Tag.NEWARRAY;
  55 import static com.sun.tools.javac.tree.JCTree.Tag.NEWCLASS;
  56 import static com.sun.tools.javac.tree.JCTree.Tag.PACKAGEDEF;
  57 import static com.sun.tools.javac.tree.JCTree.Tag.PARENS;
  58 import static com.sun.tools.javac.tree.JCTree.Tag.REFERENCE;
  59 import static com.sun.tools.javac.tree.JCTree.Tag.RETURN;
  60 import static com.sun.tools.javac.tree.JCTree.Tag.SELECT;
  61 import static com.sun.tools.javac.tree.JCTree.Tag.SKIP;
  62 import static com.sun.tools.javac.tree.JCTree.Tag.SWITCH;
  63 import static com.sun.tools.javac.tree.JCTree.Tag.SYNCHRONIZED;
  64 import static com.sun.tools.javac.tree.JCTree.Tag.THROW;
  65 import static com.sun.tools.javac.tree.JCTree.Tag.TOPLEVEL;
  66 import static com.sun.tools.javac.tree.JCTree.Tag.TRY;
  67 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEAPPLY;
  68 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEARRAY;
  69 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEBOUNDKIND;
  70 import static com.sun.tools.javac.tree.JCTree.Tag.TYPECAST;
  71 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEIDENT;
  72 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEINTERSECTION;
  73 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEPARAMETER;
  74 import static com.sun.tools.javac.tree.JCTree.Tag.TYPETEST;
  75 import static com.sun.tools.javac.tree.JCTree.Tag.TYPEUNION;
  76 import static com.sun.tools.javac.tree.JCTree.Tag.VARDEF;
  77 import static com.sun.tools.javac.tree.JCTree.Tag.WHILELOOP;
  78 
  79 import java.io.IOException;
  80 import java.io.StringWriter;
  81 import java.util.Set;
  82 
  83 import javax.lang.model.element.Modifier;
  84 import javax.lang.model.type.TypeKind;
  85 import javax.tools.JavaFileObject;
  86 
  87 import com.sun.source.tree.AnnotationTree;
  88 import com.sun.source.tree.ArrayAccessTree;
  89 import com.sun.source.tree.ArrayTypeTree;
  90 import com.sun.source.tree.AssertTree;
  91 import com.sun.source.tree.AssignmentTree;
  92 import com.sun.source.tree.BinaryTree;
  93 import com.sun.source.tree.BlockTree;
  94 import com.sun.source.tree.BreakTree;
  95 import com.sun.source.tree.CaseTree;
  96 import com.sun.source.tree.CatchTree;
  97 import com.sun.source.tree.ClassTree;
  98 import com.sun.source.tree.CompilationUnitTree;
  99 import com.sun.source.tree.CompoundAssignmentTree;
 100 import com.sun.source.tree.ConditionalExpressionTree;
 101 import com.sun.source.tree.ContinueTree;
 102 import com.sun.source.tree.DoWhileLoopTree;
 103 import com.sun.source.tree.EmptyStatementTree;
 104 import com.sun.source.tree.EnhancedForLoopTree;
 105 import com.sun.source.tree.ExpressionStatementTree;
 106 import com.sun.source.tree.ExpressionTree;
 107 import com.sun.source.tree.ForLoopTree;
 108 import com.sun.source.tree.IdentifierTree;
 109 import com.sun.source.tree.IfTree;
 110 import com.sun.source.tree.ImportTree;
 111 import com.sun.source.tree.InstanceOfTree;
 112 import com.sun.source.tree.IntersectionTypeTree;
 113 import com.sun.source.tree.LabeledStatementTree;
 114 import com.sun.source.tree.LambdaExpressionTree;
 115 import com.sun.source.tree.LiteralTree;
 116 import com.sun.source.tree.MemberReferenceTree;
 117 import com.sun.source.tree.MemberSelectTree;
 118 import com.sun.source.tree.MethodInvocationTree;
 119 import com.sun.source.tree.MethodTree;
 120 import com.sun.source.tree.NewArrayTree;
 121 import com.sun.source.tree.NewClassTree;
 122 import com.sun.source.tree.PackageTree;
 123 import com.sun.source.tree.ParameterizedTypeTree;
 124 import com.sun.source.tree.ParenthesizedTree;
 125 import com.sun.source.tree.PrimitiveTypeTree;
 126 import com.sun.source.tree.ReturnTree;
 127 import com.sun.source.tree.StatementTree;
 128 import com.sun.source.tree.SwitchTree;
 129 import com.sun.source.tree.SynchronizedTree;
 130 import com.sun.source.tree.ThrowTree;
 131 import com.sun.source.tree.Tree;
 132 import com.sun.source.tree.TreeVisitor;
 133 import com.sun.source.tree.TryTree;
 134 import com.sun.source.tree.TypeCastTree;
 135 import com.sun.source.tree.TypeParameterTree;
 136 import com.sun.source.tree.UnaryTree;
 137 import com.sun.source.tree.UnionTypeTree;
 138 import com.sun.source.tree.VariableTree;
 139 import com.sun.source.tree.WhileLoopTree;
 140 import com.sun.source.tree.WildcardTree;
 141 import com.sun.tools.javac.code.Attribute;
 142 import com.sun.tools.javac.code.BoundKind;
 143 import com.sun.tools.javac.code.Flags;
 144 import com.sun.tools.javac.code.Scope.NamedImportScope;
 145 import com.sun.tools.javac.code.Scope.StarImportScope;
 146 import com.sun.tools.javac.code.Scope.WriteableScope;
 147 import com.sun.tools.javac.code.Symbol;
 148 import com.sun.tools.javac.code.Symbol.ClassSymbol;
 149 import com.sun.tools.javac.code.Symbol.MethodSymbol;
 150 import com.sun.tools.javac.code.Symbol.PackageSymbol;
 151 import com.sun.tools.javac.code.Symbol.VarSymbol;
 152 import com.sun.tools.javac.code.Type;
 153 import com.sun.tools.javac.code.TypeTag;
 154 import com.sun.tools.javac.code.Types;
 155 import com.sun.tools.javac.util.Assert;
 156 import com.sun.tools.javac.util.DefinedBy;
 157 import com.sun.tools.javac.util.DefinedBy.Api;
 158 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
 159 import com.sun.tools.javac.util.List;
 160 import com.sun.tools.javac.util.ListBuffer;
 161 import com.sun.tools.javac.util.Name;
 162 import com.sun.tools.javac.util.Position;
 163 
 164 /**
 165  * Root class for abstract syntax tree nodes. It provides definitions
 166  * for specific tree nodes as subclasses nested inside.
 167  *
 168  * <p>Each subclass is highly standardized.  It generally contains
 169  * only tree fields for the syntactic subcomponents of the node.  Some
 170  * classes that represent identifier uses or definitions also define a
 171  * Symbol field that denotes the represented identifier.  Classes for
 172  * non-local jumps also carry the jump target as a field.  The root
 173  * class Tree itself defines fields for the tree's type and position.
 174  * No other fields are kept in a tree node; instead parameters are
 175  * passed to methods accessing the node.
 176  *
 177  * <p>Except for the methods defined by com.sun.source, the only
 178  * method defined in subclasses is `visit' which applies a given
 179  * visitor to the tree. The actual tree processing is done by visitor
 180  * classes in other packages. The abstract class Visitor, as well as
 181  * an Factory interface for trees, are defined as inner classes in
 182  * Tree.