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