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 
26 package com.sun.source.util;
27 
28 import com.sun.source.tree.*;
29 
30 /**
31  * A simple visitor for tree nodes.
32  *
33  * @param <R> the return type of this visitor's methods.  Use {@link
34  *            Void} for visitors that do not need to return results.
35  * @param <P> the type of the additional parameter to this visitor's
36  *            methods.  Use {@code Void} for visitors that do not need an
37  *            additional parameter.
38  *
39  * @author Peter von der Ah&eacute;
40  * @since 1.6
41  */
42 public class SimpleTreeVisitor <R,P> implements TreeVisitor<R,P> {
43     /**
44      * The default value, returned by the {@link #defaultAction default action}.
45      */
46     protected final R DEFAULT_VALUE;
47 
48     /**
49      * Creates a visitor, with a DEFAULT_VALUE of {@code null}.
50      */
SimpleTreeVisitor()51     protected SimpleTreeVisitor() {
52         DEFAULT_VALUE = null;
53     }
54 
55     /**
56      * Creates a visitor, with a specified DEFAULT_VALUE.
57      * @param defaultValue the default value to be returned by the default action.
58      */
SimpleTreeVisitor(R defaultValue)59     protected SimpleTreeVisitor(R defaultValue) {
60         DEFAULT_VALUE = defaultValue;
61     }
62 
63     /**
64      * The default action, used by all visit methods that are not overridden.
65      * @param node the node being visited
66      * @param p the parameter value passed to the visit method
67      * @return the result value to be returned from the visit method
68      */
defaultAction(Tree node, P p)69     protected R defaultAction(Tree node, P p) {
70         return DEFAULT_VALUE;
71     }
72 
73     /**
74      * Invokes the appropriate visit method specific to the type of the node.
75      * @param node the node on which to dispatch
76      * @param p a parameter to be passed to the appropriate visit method
77      * @return the value returns from the appropriate visit method
78      */
visit(Tree node, P p)79     public final R visit(Tree node, P p) {
80         return (node == null) ? null : node.accept(this, p);
81     }
82 
83     /**
84      * Invokes the appropriate visit method on each of a sequence of nodes.
85      * @param nodes the nodes on which to dispatch
86      * @param p a parameter value to be passed to each appropriate visit method
87      * @return the value return from the last of the visit methods, or null
88      *      if none were called.
89      */
visit(Iterable<? extends Tree> nodes, P p)90     public final R visit(Iterable<? extends Tree> nodes, P p) {
91         R r = null;
92         if (nodes != null)
93             for (Tree node : nodes)
94                 r = visit(node, p);
95         return r;
96     }
97 
98     /**
99      * {@inheritDoc} This implementation calls {@code defaultAction}.
100      *
101      * @param node {@inheritDoc}
102      * @param p {@inheritDoc}
103      * @return  the result of {@code defaultAction}
104      */
105     @Override
visitCompilationUnit(CompilationUnitTree node, P p)106     public R visitCompilationUnit(CompilationUnitTree node, P p) {
107         return defaultAction(node, p);
108     }
109 
110     /**
111      * {@inheritDoc} This implementation calls {@code defaultAction}.
112      *
113      * @param node {@inheritDoc}
114      * @param p {@inheritDoc}
115      * @return  the result of {@code defaultAction}
116      */
117     @Override
visitPackage(PackageTree node, P p)118     public R visitPackage(PackageTree node, P p) {
119         return defaultAction(node, p);
120     }
121 
122     /**
123      * {@inheritDoc} This implementation calls {@code defaultAction}.
124      *
125      * @param node {@inheritDoc}
126      * @param p {@inheritDoc}
127      * @return  the result of {@code defaultAction}
128      */
129     @Override
visitImport(ImportTree node, P p)130     public R visitImport(ImportTree node, P p) {
131         return defaultAction(node, p);
132     }
133 
134     /**
135      * {@inheritDoc} This implementation calls {@code defaultAction}.
136      *
137      * @param node {@inheritDoc}
138      * @param p {@inheritDoc}
139      * @return  the result of {@code defaultAction}
140      */
141     @Override
visitClass(ClassTree node, P p)142     public R visitClass(ClassTree node, P p) {
143         return defaultAction(node, p);
144     }
145 
146     /**
147      * {@inheritDoc} This implementation calls {@code defaultAction}.
148      *
149      * @param node {@inheritDoc}
150      * @param p {@inheritDoc}
151      * @return  the result of {@code defaultAction}
152      */
153     @Override
visitMethod(MethodTree node, P p)154     public R visitMethod(MethodTree node, P p) {
155         return defaultAction(node, p);
156     }
157 
158     /**
159      * {@inheritDoc} This implementation calls {@code defaultAction}.
160      *
161      * @param node {@inheritDoc}
162      * @param p {@inheritDoc}
163      * @return  the result of {@code defaultAction}
164      */
165     @Override
visitVariable(VariableTree node, P p)166     public R visitVariable(VariableTree node, P p) {
167         return defaultAction(node, p);
168     }
169 
170     /**
171      * {@inheritDoc} This implementation calls {@code defaultAction}.
172      *
173      * @param node {@inheritDoc}
174      * @param p {@inheritDoc}
175      * @return  the result of {@code defaultAction}
176      */
177     @Override
visitEmptyStatement(EmptyStatementTree node, P p)178     public R visitEmptyStatement(EmptyStatementTree node, P p) {
179         return defaultAction(node, p);
180     }
181 
182     /**
183      * {@inheritDoc} This implementation calls {@code defaultAction}.
184      *
185      * @param node {@inheritDoc}
186      * @param p {@inheritDoc}
187      * @return  the result of {@code defaultAction}
188      */
189     @Override
visitBlock(BlockTree node, P p)190     public R visitBlock(BlockTree node, P p) {
191         return defaultAction(node, p);
192     }
193 
194     /**
195      * {@inheritDoc} This implementation calls {@code defaultAction}.
196      *
197      * @param node {@inheritDoc}
198      * @param p {@inheritDoc}
199      * @return  the result of {@code defaultAction}
200      */
201     @Override
visitDoWhileLoop(DoWhileLoopTree node, P p)202     public R visitDoWhileLoop(DoWhileLoopTree node, P p) {
203         return defaultAction(node, p);
204     }
205 
206     /**
207      * {@inheritDoc} This implementation calls {@code defaultAction}.
208      *
209      * @param node {@inheritDoc}
210      * @param p {@inheritDoc}
211      * @return  the result of {@code defaultAction}
212      */
213     @Override
visitWhileLoop(WhileLoopTree node, P p)214     public R visitWhileLoop(WhileLoopTree node, P p) {
215         return defaultAction(node, p);
216     }
217 
218     /**
219      * {@inheritDoc} This implementation calls {@code defaultAction}.
220      *
221      * @param node {@inheritDoc}
222      * @param p {@inheritDoc}
223      * @return  the result of {@code defaultAction}
224      */
225     @Override
visitForLoop(ForLoopTree node, P p)226     public R visitForLoop(ForLoopTree node, P p) {
227         return defaultAction(node, p);
228     }
229 
230     /**
231      * {@inheritDoc} This implementation calls {@code defaultAction}.
232      *
233      * @param node {@inheritDoc}
234      * @param p {@inheritDoc}
235      * @return  the result of {@code defaultAction}
236      */
237     @Override
visitEnhancedForLoop(EnhancedForLoopTree node, P p)238     public R visitEnhancedForLoop(EnhancedForLoopTree node, P p) {
239         return defaultAction(node, p);
240     }
241 
242     /**
243      * {@inheritDoc} This implementation calls {@code defaultAction}.
244      *
245      * @param node {@inheritDoc}
246      * @param p {@inheritDoc}
247      * @return  the result of {@code defaultAction}
248      */
249     @Override
visitLabeledStatement(LabeledStatementTree node, P p)250     public R visitLabeledStatement(LabeledStatementTree node, P p) {
251         return defaultAction(node, p);
252     }
253 
254     /**
255      * {@inheritDoc} This implementation calls {@code defaultAction}.
256      *
257      * @param node {@inheritDoc}
258      * @param p {@inheritDoc}
259      * @return  the result of {@code defaultAction}
260      */
261     @Override
visitSwitch(SwitchTree node, P p)262     public R visitSwitch(SwitchTree node, P p) {
263         return defaultAction(node, p);
264     }
265 
266     /**
267      * {@inheritDoc} This implementation calls {@code defaultAction}.
268      *
269      * @param node {@inheritDoc}
270      * @param p {@inheritDoc}
271      * @return  the result of {@code defaultAction}
272      */
273     @Override
visitCase(CaseTree node, P p)274     public R visitCase(CaseTree node, P p) {
275         return defaultAction(node, p);
276     }
277 
278     /**
279      * {@inheritDoc} This implementation calls {@code defaultAction}.
280      *
281      * @param node {@inheritDoc}
282      * @param p {@inheritDoc}
283      * @return  the result of {@code defaultAction}
284      */
285     @Override
visitSynchronized(SynchronizedTree node, P p)286     public R visitSynchronized(SynchronizedTree node, P p) {
287         return defaultAction(node, p);
288     }
289 
290     /**
291      * {@inheritDoc} This implementation calls {@code defaultAction}.
292      *
293      * @param node {@inheritDoc}
294      * @param p {@inheritDoc}
295      * @return  the result of {@code defaultAction}
296      */
297     @Override
visitTry(TryTree node, P p)298     public R visitTry(TryTree node, P p) {
299         return defaultAction(node, p);
300     }
301 
302     /**
303      * {@inheritDoc} This implementation calls {@code defaultAction}.
304      *
305      * @param node {@inheritDoc}
306      * @param p {@inheritDoc}
307      * @return  the result of {@code defaultAction}
308      */
309     @Override
visitCatch(CatchTree node, P p)310     public R visitCatch(CatchTree node, P p) {
311         return defaultAction(node, p);
312     }
313 
314     /**
315      * {@inheritDoc} This implementation calls {@code defaultAction}.
316      *
317      * @param node {@inheritDoc}
318      * @param p {@inheritDoc}
319      * @return  the result of {@code defaultAction}
320      */
321     @Override
visitConditionalExpression(ConditionalExpressionTree node, P p)322     public R visitConditionalExpression(ConditionalExpressionTree node, P p) {
323         return defaultAction(node, p);
324     }
325 
326     /**
327      * {@inheritDoc} This implementation calls {@code defaultAction}.
328      *
329      * @param node {@inheritDoc}
330      * @param p {@inheritDoc}
331      * @return  the result of {@code defaultAction}
332      */
333     @Override
visitIf(IfTree node, P p)334     public R visitIf(IfTree node, P p) {
335         return defaultAction(node, p);
336     }
337 
338     /**
339      * {@inheritDoc} This implementation calls {@code defaultAction}.
340      *
341      * @param node {@inheritDoc}
342      * @param p {@inheritDoc}
343      * @return  the result of {@code defaultAction}
344      */
345     @Override
visitExpressionStatement(ExpressionStatementTree node, P p)346     public R visitExpressionStatement(ExpressionStatementTree node, P p) {
347         return defaultAction(node, p);
348     }
349 
350     /**
351      * {@inheritDoc} This implementation calls {@code defaultAction}.
352      *
353      * @param node {@inheritDoc}
354      * @param p {@inheritDoc}
355      * @return  the result of {@code defaultAction}
356      */
357     @Override
visitBreak(BreakTree node, P p)358     public R visitBreak(BreakTree node, P p) {
359         return defaultAction(node, p);
360     }
361 
362     /**
363      * {@inheritDoc} This implementation calls {@code defaultAction}.
364      *
365      * @param node {@inheritDoc}
366      * @param p {@inheritDoc}
367      * @return  the result of {@code defaultAction}
368      */
369     @Override
visitContinue(ContinueTree node, P p)370     public R visitContinue(ContinueTree node, P p) {
371         return defaultAction(node, p);
372     }
373 
374     /**
375      * {@inheritDoc} This implementation calls {@code defaultAction}.
376      *
377      * @param node {@inheritDoc}
378      * @param p {@inheritDoc}
379      * @return  the result of {@code defaultAction}
380      */
381     @Override
visitReturn(ReturnTree node, P p)382     public R visitReturn(ReturnTree node, P p) {
383         return defaultAction(node, p);
384     }
385 
386     /**
387      * {@inheritDoc} This implementation calls {@code defaultAction}.
388      *
389      * @param node {@inheritDoc}
390      * @param p {@inheritDoc}
391      * @return  the result of {@code defaultAction}
392      */
393     @Override
visitThrow(ThrowTree node, P p)394     public R visitThrow(ThrowTree node, P p) {
395         return defaultAction(node, p);
396     }
397 
398     /**
399      * {@inheritDoc} This implementation calls {@code defaultAction}.
400      *
401      * @param node {@inheritDoc}
402      * @param p {@inheritDoc}
403      * @return  the result of {@code defaultAction}
404      */
405     @Override
visitAssert(AssertTree node, P p)406     public R visitAssert(AssertTree node, P p) {
407         return defaultAction(node, p);
408     }
409 
410     /**
411      * {@inheritDoc} This implementation calls {@code defaultAction}.
412      *
413      * @param node {@inheritDoc}
414      * @param p {@inheritDoc}
415      * @return  the result of {@code defaultAction}
416      */
417     @Override
visitMethodInvocation(MethodInvocationTree node, P p)418     public R visitMethodInvocation(MethodInvocationTree node, P p) {
419         return defaultAction(node, p);
420     }
421 
422     /**
423      * {@inheritDoc} This implementation calls {@code defaultAction}.
424      *
425      * @param node {@inheritDoc}
426      * @param p {@inheritDoc}
427      * @return  the result of {@code defaultAction}
428      */
429     @Override
visitNewClass(NewClassTree node, P p)430     public R visitNewClass(NewClassTree node, P p) {
431         return defaultAction(node, p);
432     }
433 
434     /**
435      * {@inheritDoc} This implementation calls {@code defaultAction}.
436      *
437      * @param node {@inheritDoc}
438      * @param p {@inheritDoc}
439      * @return  the result of {@code defaultAction}
440      */
441     @Override
visitNewArray(NewArrayTree node, P p)442     public R visitNewArray(NewArrayTree node, P p) {
443         return defaultAction(node, p);
444     }
445 
446     /**
447      * {@inheritDoc} This implementation calls {@code defaultAction}.
448      *
449      * @param node {@inheritDoc}
450      * @param p {@inheritDoc}
451      * @return  the result of {@code defaultAction}
452      */
453     @Override
visitLambdaExpression(LambdaExpressionTree node, P p)454     public R visitLambdaExpression(LambdaExpressionTree node, P p) {
455         return defaultAction(node, p);
456     }
457 
458     /**
459      * {@inheritDoc} This implementation calls {@code defaultAction}.
460      *
461      * @param node {@inheritDoc}
462      * @param p {@inheritDoc}
463      * @return  the result of {@code defaultAction}
464      */
465     @Override
visitParenthesized(ParenthesizedTree node, P p)466     public R visitParenthesized(ParenthesizedTree node, P p) {
467         return defaultAction(node, p);
468     }
469 
470     /**
471      * {@inheritDoc} This implementation calls {@code defaultAction}.
472      *
473      * @param node {@inheritDoc}
474      * @param p {@inheritDoc}
475      * @return  the result of {@code defaultAction}
476      */
477     @Override
visitAssignment(AssignmentTree node, P p)478     public R visitAssignment(AssignmentTree node, P p) {
479         return defaultAction(node, p);
480     }
481 
482     /**
483      * {@inheritDoc} This implementation calls {@code defaultAction}.
484      *
485      * @param node {@inheritDoc}
486      * @param p {@inheritDoc}
487      * @return  the result of {@code defaultAction}
488      */
489     @Override
visitCompoundAssignment(CompoundAssignmentTree node, P p)490     public R visitCompoundAssignment(CompoundAssignmentTree node, P p) {
491         return defaultAction(node, p);
492     }
493 
494     /**
495      * {@inheritDoc} This implementation calls {@code defaultAction}.
496      *
497      * @param node {@inheritDoc}
498      * @param p {@inheritDoc}
499      * @return  the result of {@code defaultAction}
500      */
501     @Override
visitUnary(UnaryTree node, P p)502     public R visitUnary(UnaryTree node, P p) {
503         return defaultAction(node, p);
504     }
505 
506     /**
507      * {@inheritDoc} This implementation calls {@code defaultAction}.
508      *
509      * @param node {@inheritDoc}
510      * @param p {@inheritDoc}
511      * @return  the result of {@code defaultAction}
512      */
513     @Override
visitBinary(BinaryTree node, P p)514     public R visitBinary(BinaryTree node, P p) {
515         return defaultAction(node, p);
516     }
517 
518     /**
519      * {@inheritDoc} This implementation calls {@code defaultAction}.
520      *
521      * @param node {@inheritDoc}
522      * @param p {@inheritDoc}
523      * @return  the result of {@code defaultAction}
524      */
525     @Override
visitTypeCast(TypeCastTree node, P p)526     public R visitTypeCast(TypeCastTree node, P p) {
527         return defaultAction(node, p);
528     }
529 
530     /**
531      * {@inheritDoc} This implementation calls {@code defaultAction}.
532      *
533      * @param node {@inheritDoc}
534      * @param p {@inheritDoc}
535      * @return  the result of {@code defaultAction}
536      */
537     @Override
visitInstanceOf(InstanceOfTree node, P p)538     public R visitInstanceOf(InstanceOfTree node, P p) {
539         return defaultAction(node, p);
540     }
541 
542     /**
543      * {@inheritDoc} This implementation calls {@code defaultAction}.
544      *
545      * @param node {@inheritDoc}
546      * @param p {@inheritDoc}
547      * @return  the result of {@code defaultAction}
548      */
549     @Override
visitArrayAccess(ArrayAccessTree node, P p)550     public R visitArrayAccess(ArrayAccessTree node, P p) {
551         return defaultAction(node, p);
552     }
553 
554     /**
555      * {@inheritDoc} This implementation calls {@code defaultAction}.
556      *
557      * @param node {@inheritDoc}
558      * @param p {@inheritDoc}
559      * @return  the result of {@code defaultAction}
560      */
561     @Override
visitMemberSelect(MemberSelectTree node, P p)562     public R visitMemberSelect(MemberSelectTree node, P p) {
563         return defaultAction(node, p);
564     }
565 
566     /**
567      * {@inheritDoc} This implementation calls {@code defaultAction}.
568      *
569      * @param node {@inheritDoc}
570      * @param p {@inheritDoc}
571      * @return  the result of {@code defaultAction}
572      */
573     @Override
visitMemberReference(MemberReferenceTree node, P p)574     public R visitMemberReference(MemberReferenceTree node, P p) {
575         return defaultAction(node, p);
576     }
577 
578     /**
579      * {@inheritDoc} This implementation calls {@code defaultAction}.
580      *
581      * @param node {@inheritDoc}
582      * @param p {@inheritDoc}
583      * @return  the result of {@code defaultAction}
584      */
585     @Override
visitIdentifier(IdentifierTree node, P p)586     public R visitIdentifier(IdentifierTree node, P p) {
587         return defaultAction(node, p);
588     }
589 
590     /**
591      * {@inheritDoc} This implementation calls {@code defaultAction}.
592      *
593      * @param node {@inheritDoc}
594      * @param p {@inheritDoc}
595      * @return  the result of {@code defaultAction}
596      */
597     @Override
visitLiteral(LiteralTree node, P p)598     public R visitLiteral(LiteralTree node, P p) {
599         return defaultAction(node, p);
600     }
601 
602     /**
603      * {@inheritDoc} This implementation calls {@code defaultAction}.
604      *
605      * @param node {@inheritDoc}
606      * @param p {@inheritDoc}
607      * @return  the result of {@code defaultAction}
608      */
609     @Override
visitPrimitiveType(PrimitiveTypeTree node, P p)610     public R visitPrimitiveType(PrimitiveTypeTree node, P p) {
611         return defaultAction(node, p);
612     }
613 
614     /**
615      * {@inheritDoc} This implementation calls {@code defaultAction}.
616      *
617      * @param node {@inheritDoc}
618      * @param p {@inheritDoc}
619      * @return  the result of {@code defaultAction}
620      */
621     @Override
visitArrayType(ArrayTypeTree node, P p)622     public R visitArrayType(ArrayTypeTree node, P p) {
623         return defaultAction(node, p);
624     }
625 
626     /**
627      * {@inheritDoc} This implementation calls {@code defaultAction}.
628      *
629      * @param node {@inheritDoc}
630      * @param p {@inheritDoc}
631      * @return  the result of {@code defaultAction}
632      */
633     @Override
visitParameterizedType(ParameterizedTypeTree node, P p)634     public R visitParameterizedType(ParameterizedTypeTree node, P p) {
635         return defaultAction(node, p);
636     }
637 
638     /**
639      * {@inheritDoc} This implementation calls {@code defaultAction}.
640      *
641      * @param node {@inheritDoc}
642      * @param p {@inheritDoc}
643      * @return  the result of {@code defaultAction}
644      */
645     @Override
visitUnionType(UnionTypeTree node, P p)646     public R visitUnionType(UnionTypeTree node, P p) {
647         return defaultAction(node, p);
648     }
649 
650     /**
651      * {@inheritDoc} This implementation calls {@code defaultAction}.
652      *
653      * @param node {@inheritDoc}
654      * @param p {@inheritDoc}
655      * @return  the result of {@code defaultAction}
656      */
657     @Override
visitIntersectionType(IntersectionTypeTree node, P p)658     public R visitIntersectionType(IntersectionTypeTree node, P p) {
659         return defaultAction(node, p);
660     }
661 
662     /**
663      * {@inheritDoc} This implementation calls {@code defaultAction}.
664      *
665      * @param node {@inheritDoc}
666      * @param p {@inheritDoc}
667      * @return  the result of {@code defaultAction}
668      */
669     @Override
visitTypeParameter(TypeParameterTree node, P p)670     public R visitTypeParameter(TypeParameterTree node, P p) {
671         return defaultAction(node, p);
672     }
673 
674     /**
675      * {@inheritDoc} This implementation calls {@code defaultAction}.
676      *
677      * @param node {@inheritDoc}
678      * @param p {@inheritDoc}
679      * @return  the result of {@code defaultAction}
680      */
681     @Override
visitWildcard(WildcardTree node, P p)682     public R visitWildcard(WildcardTree node, P p) {
683         return defaultAction(node, p);
684     }
685 
686     /**
687      * {@inheritDoc} This implementation calls {@code defaultAction}.
688      *
689      * @param node {@inheritDoc}
690      * @param p {@inheritDoc}
691      * @return  the result of {@code defaultAction}
692      */
693     @Override
visitModifiers(ModifiersTree node, P p)694     public R visitModifiers(ModifiersTree node, P p) {
695         return defaultAction(node, p);
696     }
697 
698     /**
699      * {@inheritDoc} This implementation calls {@code defaultAction}.
700      *
701      * @param node {@inheritDoc}
702      * @param p {@inheritDoc}
703      * @return  the result of {@code defaultAction}
704      */
705     @Override
visitAnnotation(AnnotationTree node, P p)706     public R visitAnnotation(AnnotationTree node, P p) {
707         return defaultAction(node, p);
708     }
709 
710     /**
711      * {@inheritDoc} This implementation calls {@code defaultAction}.
712      *
713      * @param node {@inheritDoc}
714      * @param p {@inheritDoc}
715      * @return  the result of {@code defaultAction}
716      */
717     @Override
visitAnnotatedType(AnnotatedTypeTree node, P p)718     public R visitAnnotatedType(AnnotatedTypeTree node, P p) {
719         return defaultAction(node, p);
720     }
721 
visitModule(ModuleTree node, P p)722     public R visitModule(ModuleTree node, P p) {
723         return defaultAction(node, p);
724     }
725 
726     @Override
visitExports(ExportsTree node, P p)727     public R visitExports(ExportsTree node, P p) {
728         return defaultAction(node, p);
729     }
730 
731     @Override
visitOpens(OpensTree node, P p)732     public R visitOpens(OpensTree node, P p) {
733         return defaultAction(node, p);
734     }
735 
736     @Override
visitProvides(ProvidesTree node, P p)737     public R visitProvides(ProvidesTree node, P p) {
738         return defaultAction(node, p);
739     }
740 
741     @Override
visitRequires(RequiresTree node, P p)742     public R visitRequires(RequiresTree node, P p) {
743         return defaultAction(node, p);
744     }
745 
746     @Override
visitUses(UsesTree node, P p)747     public R visitUses(UsesTree node, P p) {
748         return defaultAction(node, p);
749     }
750 
visitErroneous(ErroneousTree node, P p)751     public R visitErroneous(ErroneousTree node, P p) {
752         return defaultAction(node, p);
753     }
754 
755     /**
756      * {@inheritDoc} This implementation calls {@code defaultAction}.
757      *
758      * @param node {@inheritDoc}
759      * @param p {@inheritDoc}
760      * @return  the result of {@code defaultAction}
761      */
762     @Override
visitOther(Tree node, P p)763     public R visitOther(Tree node, P p) {
764         return defaultAction(node, p);
765     }
766 }
767