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.
|