Tree.java revision 3792:d516975e8110
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
26package 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 */
42public 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}
682