TreeVisitor.java revision 3294:9adfb22ff08f
143504Sjkh/* 23027Srgrimes * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. 326103Sjkh * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 46718Sphk * 526103Sjkh * This code is free software; you can redistribute it and/or modify it 640277Sjdp * under the terms of the GNU General Public License version 2 only, as 726103Sjkh * published by the Free Software Foundation. Oracle designates this 826103Sjkh * particular file as subject to the "Classpath" exception as provided 926103Sjkh * by Oracle in the LICENSE file that accompanied this code. 106718Sphk * 1126103Sjkh * This code is distributed in the hope that it will be useful, but WITHOUT 1219746Sandreas * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1319746Sandreas * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1426103Sjkh * version 2 for more details (a copy is included in the LICENSE file that 1526331Sjoerg * accompanied this code). 1626331Sjoerg * 1726331Sjoerg * You should have received a copy of the GNU General Public License version 1826331Sjoerg * 2 along with this work; if not, write to the Free Software Foundation, 1926331Sjoerg * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2037531Sdes * 2126331Sjoerg * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2229104Sjkh * or visit www.oracle.com if you need additional information or have any 2326331Sjoerg * questions. 2415786Sjkh */ 258034Sphk 2623257Sjoergpackage com.sun.source.tree; 278034Sphk 2835213Smsmith/** 2935213Smsmith * A visitor of trees, in the style of the visitor design pattern. 3035213Smsmith * Classes implementing this interface are used to operate 3135213Smsmith * on a tree when the kind of tree is unknown at compile time. 3235213Smsmith * When a visitor is passed to an tree's {@link Tree#accept 3335213Smsmith * accept} method, the <tt>visit<i>XYZ</i></tt> method most applicable 3435213Smsmith * to that tree is invoked. 3538281Sjkh * 3638795Sjkh * <p> Classes implementing this interface may or may not throw a 3738281Sjkh * {@code NullPointerException} if the additional parameter {@code p} 3832718Sjkh * is {@code null}; see documentation of the implementing class for 3932718Sjkh * details. 4042041Sjkh * 4139273Sjhay * <p> <b>WARNING:</b> It is possible that methods will be added to 4236687Sjkoshy * this interface to accommodate new, currently unknown, language 4336687Sjkoshy * structures added to future versions of the Java™ programming 4441919Sjkh * language. Therefore, visitor classes directly implementing this 4541919Sjkh * interface may be source incompatible with future versions of the 4641979Sjkh * platform. 4741979Sjkh * 4827626Sjkh * @param <R> the return type of this visitor's methods. Use {@link 4940839Sjkh * Void} for visitors that do not need to return results. 5040839Sjkh * @param <P> the type of the additional parameter to this visitor's 5140839Sjkh * methods. Use {@code Void} for visitors that do not need an 526718Sphk * additional parameter. 5326761Sjkh * 5426761Sjkh * @author Peter von der Ahé 5526788Sjkh * @author Jonathan Gibbons 5627170Sjkh * 5726788Sjkh * @since 1.6 5826761Sjkh */ 5926788Sjkhpublic interface TreeVisitor<R,P> { 6016156Sjkh /** 617107Sphk * Visits an AnnotatedTypeTree node. 6212661Speter * @param node the node being visited 6312661Speter * @param p a parameter value 6412661Speter * @return a result value 6512661Speter */ 6612661Speter R visitAnnotatedType(AnnotatedTypeTree node, P p); 6726103Sjkh 684324Sphk /** 697940Sphk * Visits an AnnotatedTree node. 707940Sphk * @param node the node being visited 717954Sphk * @param p a parameter value 7240022Sjkh * @return a result value 7340022Sjkh */ 7440022Sjkh R visitAnnotation(AnnotationTree node, P p); 7540022Sjkh 7643392Sjkh /** 7743464Sjkh * Visits a MethodInvocationTree node. 7840345Sjkh * @param node the node being visited 7937749Sjkh * @param p a parameter value 8024864Sjoerg * @return a result value 8140022Sjkh */ 8240022Sjkh R visitMethodInvocation(MethodInvocationTree node, P p); 8343464Sjkh 8443392Sjkh /** 8542502Sjkh * Visits an AssertTree node. 8642502Sjkh * @param node the node being visited 8742502Sjkh * @param p a parameter value 8843392Sjkh * @return a result value 8943392Sjkh */ 9040022Sjkh R visitAssert(AssertTree node, P p); 9140022Sjkh 9240022Sjkh /** 933884Sphk * Visits an AssignmentTree node. 9440022Sjkh * @param node the node being visited 9540022Sjkh * @param p a parameter value 9640022Sjkh * @return a result value 9734782Sjhay */ 9834782Sjhay R visitAssignment(AssignmentTree node, P p); 9926761Sjkh 1006718Sphk /** 10123257Sjoerg * Visits a CompoundAssignmentTree node. 10223257Sjoerg * @param node the node being visited 10323257Sjoerg * @param p a parameter value 10424842Sjoerg * @return a result value 10523750Sjkh */ 1063884Sphk R visitCompoundAssignment(CompoundAssignmentTree node, P p); 10732843Sjkh 10832843Sjkh /** 10932843Sjkh * Visits a BinaryTree node. 11024864Sjoerg * @param node the node being visited 11125415Sdanny * @param p a parameter value 11225415Sdanny * @return a result value 11324864Sjoerg */ 11424864Sjoerg R visitBinary(BinaryTree node, P p); 11524864Sjoerg 11624864Sjoerg /** 11724864Sjoerg * Visits a BlockTree node. 11824864Sjoerg * @param node the node being visited 11924864Sjoerg * @param p a parameter value 12024864Sjoerg * @return a result value 12124864Sjoerg */ 12224864Sjoerg R visitBlock(BlockTree node, P p); 12324864Sjoerg 12424864Sjoerg /** 12526761Sjkh * Visits a BreakTree node. 12626761Sjkh * @param node the node being visited 1278663Sphk * @param p a parameter value 1288663Sphk * @return a result value 12927348Sjkh */ 13026813Sjkh R visitBreak(BreakTree node, P p); 13126813Sjkh 13226813Sjkh /** 13326813Sjkh * Visits a CaseTree node. 13426813Sjkh * @param node the node being visited 13513352Sphk * @param p a parameter value 13627070Sjkh * @return a result value 13727070Sjkh */ 1386723Sphk R visitCase(CaseTree node, P p); 13913352Sphk 1408497Srgrimes /** 14136742Sjdp * Visits a CatchTree node. 14236742Sjdp * @param node the node being visited 14336742Sjdp * @param p a parameter value 14436777Sjdp * @return a result value 14513124Sjoerg */ 1468497Srgrimes R visitCatch(CatchTree node, P p); 14713124Sjoerg 14813352Sphk /** 14913352Sphk * Visits a ClassTree node. 15042355Sjkh * @param node the node being visited 15138929Sjkh * @param p a parameter value 15224864Sjoerg * @return a result value 15324864Sjoerg */ 15424864Sjoerg R visitClass(ClassTree node, P p); 15524864Sjoerg 1566718Sphk /** 15718091Spst * Visits a ConditionalExpressionTree node. 15839132Sphk * @param node the node being visited 1596718Sphk * @param p a parameter value 16018091Spst * @return a result value 16139132Sphk */ 1626718Sphk R visitConditionalExpression(ConditionalExpressionTree node, P p); 16318091Spst 16418091Spst /** 16517392Spst * Visits a ContinueTree node. 16638355Sjkh * @param node the node being visited 16738355Sjkh * @param p a parameter value 16838355Sjkh * @return a result value 16924842Sjoerg */ 17039132Sphk R visitContinue(ContinueTree node, P p); 17118091Spst 17226103Sjkh /** 17339132Sphk * Visits a DoWhileTree node. 17441979Sjkh * @param node the node being visited 17523633Sjkh * @param p a parameter value 17626103Sjkh * @return a result value 17713352Sphk */ 17813352Sphk R visitDoWhileLoop(DoWhileLoopTree node, P p); 17913352Sphk 18039132Sphk /** 18113352Sphk * Visits an ErroneousTree node. 18239132Sphk * @param node the node being visited 18313352Sphk * @param p a parameter value 18424842Sjoerg * @return a result value 18539132Sphk */ 18613352Sphk R visitErroneous(ErroneousTree node, P p); 18726103Sjkh 18839132Sphk /** 18913352Sphk * Visits an ExpressionStatementTree node. 19023633Sjkh * @param node the node being visited 19126103Sjkh * @param p a parameter value 19226761Sjkh * @return a result value 1938034Sphk */ 19413352Sphk R visitExpressionStatement(ExpressionStatementTree node, P p); 19541310Sjkh 19638844Sjkh /** 19718499Spst * Visits an EnhancedForLoopTree node. 1988367Sjkh * @param node the node being visited 1998367Sjkh * @param p a parameter value 20039956Sjkh * @return a result value 20139854Sjkh */ 20226761Sjkh R visitEnhancedForLoop(EnhancedForLoopTree node, P p); 20323912Sjoerg 20434782Sjhay /** 20538841Sjkh * Visits a ForLoopTree node. 20623912Sjoerg * @param node the node being visited 20723909Sjoerg * @param p a parameter value 20823912Sjoerg * @return a result value 20924842Sjoerg */ 21024842Sjoerg R visitForLoop(ForLoopTree node, P p); 21123909Sjoerg 21226813Sjkh /** 21326813Sjkh * Visits an IdentifierTree node. 21426813Sjkh * @param node the node being visited 21536687Sjkoshy * @param p a parameter value 21636687Sjkoshy * @return a result value 21736687Sjkoshy */ 21826909Sjkh R visitIdentifier(IdentifierTree node, P p); 21926909Sjkh 22026909Sjkh /** 22127030Spst * Visits an IfTree node. 22227030Spst * @param node the node being visited 22327030Spst * @param p a parameter value 22427030Spst * @return a result value 22527030Spst */ 22627030Spst R visitIf(IfTree node, P p); 22723434Sjoerg 22823434Sjoerg /** 22932843Sjkh * Visits an ImportTree node. 23042298Sjkh * @param node the node being visited 23142298Sjkh * @param p a parameter value 23213352Sphk * @return a result value 23342298Sjkh */ 23442298Sjkh R visitImport(ImportTree node, P p); 23513352Sphk 23613352Sphk /** 23742298Sjkh * Visits an ArrayAccessTree node. 23813352Sphk * @param node the node being visited 23942298Sjkh * @param p a parameter value 24042298Sjkh * @return a result value 24121008Sjkh */ 24221008Sjkh R visitArrayAccess(ArrayAccessTree node, P p); 2438371Sjkh 24421036Sjkh /** 24539956Sjkh * Visits a LabeledStatementTree node. 24613352Sphk * @param node the node being visited 2478367Sjkh * @param p a parameter value 2488367Sjkh * @return a result value 2498367Sjkh */ 2506718Sphk R visitLabeledStatement(LabeledStatementTree node, P p); 25123633Sjkh 2524734Sphk /** 25323257Sjoerg * Visits a LiteralTree node. 2546718Sphk * @param node the node being visited 25523257Sjoerg * @param p a parameter value 25642588Sjoerg * @return a result value 25723257Sjoerg */ 2586718Sphk R visitLiteral(LiteralTree node, P p); 2596718Sphk 2607063Sphk /** 2616718Sphk * Visits a MethodTree node. 26213370Sphk * @param node the node being visited 26326761Sjkh * @param p a parameter value 26413352Sphk * @return a result value 26513352Sphk */ 2666718Sphk R visitMethod(MethodTree node, P p); 26713352Sphk 2686718Sphk /** 26913352Sphk * Visits a ModifiersTree node. 2707252Sphk * @param node the node being visited 27113352Sphk * @param p a parameter value 2726718Sphk * @return a result value 2737063Sphk */ 2746718Sphk R visitModifiers(ModifiersTree node, P p); 2756718Sphk 2763027Srgrimes /** 2776718Sphk * Visits a NewArrayTree node. 2786718Sphk * @param node the node being visited 27926799Sjkh * @param p a parameter value 28024842Sjoerg * @return a result value 28130034Sjkh */ 28230034Sjkh R visitNewArray(NewArrayTree node, P p); 28324842Sjoerg 28424842Sjoerg /** 28524842Sjoerg * Visits a NewClassTree node. 28624842Sjoerg * @param node the node being visited 28724842Sjoerg * @param p a parameter value 28842588Sjoerg * @return a result value 28924842Sjoerg */ 29024842Sjoerg R visitNewClass(NewClassTree node, P p); 29124842Sjoerg 29224842Sjoerg /** 29316156Sjkh * Visits a LambdaExpressionTree node. 29416156Sjkh * @param node the node being visited 29516156Sjkh * @param p a parameter value 29616156Sjkh * @return a result value 29716156Sjkh */ 29816156Sjkh R visitLambdaExpression(LambdaExpressionTree node, P p); 29916156Sjkh 3006718Sphk /** 3016123Sache * Visits a PackageTree node. 3027732Sphk * @param node the node being visited 3036718Sphk * @param p a parameter value 30419506Sjoerg * @return a result value 30519506Sjoerg */ 30619506Sjoerg R visitPackage(PackageTree node, P p); 3076718Sphk 30829223Sjkh /** 30929223Sjkh * Visits a ParenthesizedTree node. 3107954Sphk * @param node the node being visited 3117954Sphk * @param p a parameter value 31219506Sjoerg * @return a result value 31326761Sjkh */ 3147954Sphk R visitParenthesized(ParenthesizedTree node, P p); 3157954Sphk 3167954Sphk /** 31737150Sbrian * Visits a ReturnTree node. 31837150Sbrian * @param node the node being visited 31932589Sbrian * @param p a parameter value 3207954Sphk * @return a result value 32119362Sjoerg */ 3226123Sache R visitReturn(ReturnTree node, P p); 3236718Sphk 3243884Sphk /** 32513391Sphk * Visits a MemberSelectTree node. 32613391Sphk * @param node the node being visited 32713391Sphk * @param p a parameter value 3286718Sphk * @return a result value 32918852Sjkh */ 33037175Sbrian R visitMemberSelect(MemberSelectTree node, P p); 33114085Sjoerg 33214085Sjoerg /** 33314085Sjoerg * Visits a MemberReferenceTree node. 33414085Sjoerg * @param node the node being visited 33526761Sjkh * @param p a parameter value 33626761Sjkh * @return a result value 33726761Sjkh */ 33826761Sjkh R visitMemberReference(MemberReferenceTree node, P p); 33938635Sjb 34026765Sjkh /** 34126761Sjkh * Visits an EmptyStatementTree node. 34226761Sjkh * @param node the node being visited 34326761Sjkh * @param p a parameter value 34413621Sjoerg * @return a result value 34513621Sjoerg */ 34613621Sjoerg R visitEmptyStatement(EmptyStatementTree node, P p); 34739175Sjkh 34813621Sjoerg /** 34913621Sjoerg * Visits a SwitchTree node. 35013621Sjoerg * @param node the node being visited 35113621Sjoerg * @param p a parameter value 35214079Sjoerg * @return a result value 35313391Sphk */ 3547664Sphk R visitSwitch(SwitchTree node, P p); 35526788Sjkh 3566718Sphk /** 3576718Sphk * Visits a SynchronizedTree node. 35813391Sphk * @param node the node being visited 35926761Sjkh * @param p a parameter value 36013391Sphk * @return a result value 3616718Sphk */ 3628714Sjkh R visitSynchronized(SynchronizedTree node, P p); 3638714Sjkh 3648714Sjkh /** 3658714Sjkh * Visits a ThrowTree node. 3668714Sjkh * @param node the node being visited 36713391Sphk * @param p a parameter value 36813391Sphk * @return a result value 36913391Sphk */ 3708714Sjkh R visitThrow(ThrowTree node, P p); 3718714Sjkh 3728881Srgrimes /** 37326761Sjkh * Visits a CompilationUnitTree node. 37413391Sphk * @param node the node being visited 37513391Sphk * @param p a parameter value 3768720Sjkh * @return a result value 3778714Sjkh */ 3788714Sjkh R visitCompilationUnit(CompilationUnitTree node, P p); 37913391Sphk 38013391Sphk /** 38113391Sphk * Visits a TryTree node. 3828714Sjkh * @param node the node being visited 38326909Sjkh * @param p a parameter value 38413352Sphk * @return a result value 3858714Sjkh */ 38630101Sjkh R visitTry(TryTree node, P p); 38713391Sphk 38813391Sphk /** 3898714Sjkh * Visits a ParameterizedTypeTree node. 39013391Sphk * @param node the node being visited 3918714Sjkh * @param p a parameter value 3928714Sjkh * @return a result value 39312661Speter */ 39413352Sphk R visitParameterizedType(ParameterizedTypeTree node, P p); 39512661Speter 39613391Sphk /** 39713391Sphk * Visits a UnionTypeTree node. 39813391Sphk * @param node the node being visited 39913391Sphk * @param p a parameter value 40012661Speter * @return a result value 40112661Speter */ 4028714Sjkh R visitUnionType(UnionTypeTree node, P p); 40313391Sphk 40430076Smarkm /** 40530109Sjkh * Visits an IntersectionTypeTree node. 4068714Sjkh * @param node the node being visited 40726909Sjkh * @param p a parameter value 4088720Sjkh * @return a result value 4098714Sjkh */ 4108881Srgrimes R visitIntersectionType(IntersectionTypeTree node, P p); 4118778Sjkh 4128778Sjkh /** 4138778Sjkh * Visits an ArrayTypeTree node. 4148778Sjkh * @param node the node being visited 4158778Sjkh * @param p a parameter value 4168778Sjkh * @return a result value 4178778Sjkh */ 4188778Sjkh R visitArrayType(ArrayTypeTree node, P p); 4198778Sjkh 4208778Sjkh /** 4218778Sjkh * Visits a TypeCastTree node. 4228778Sjkh * @param node the node being visited 4238778Sjkh * @param p a parameter value 4248778Sjkh * @return a result value 42518702Sjkh */ 4268778Sjkh R visitTypeCast(TypeCastTree node, P p); 4278778Sjkh 4288778Sjkh /** 42922268Sjkh * Visits a PrimitiveTypeTree node. 4308806Sphk * @param node the node being visited 43113418Sphk * @param p a parameter value 4328806Sphk * @return a result value 43334139Sjkh */ 4348778Sjkh R visitPrimitiveType(PrimitiveTypeTree node, P p); 43520485Sjkh 4368806Sphk /** 4379202Srgrimes * Visits a TypeParameterTree node. 4389202Srgrimes * @param node the node being visited 4399202Srgrimes * @param p a parameter value 4409202Srgrimes * @return a result value 44119333Sjkh */ 44243238Sjkh R visitTypeParameter(TypeParameterTree node, P p); 44340840Sjkh 44441020Sjkh /** 44540968Sjkh * Visits an InstanceOfTree node. 44642389Sjkh * @param node the node being visited 44742389Sjkh * @param p a parameter value 44816977Sjkh * @return a result value 44942300Sjkh */ 45042300Sjkh R visitInstanceOf(InstanceOfTree node, P p); 45116977Sjkh 45242299Sjkh /** 45343392Sjkh * Visits a UnaryTree node. 45443392Sjkh * @param node the node being visited 45543238Sjkh * @param p a parameter value 45642300Sjkh * @return a result value 45742300Sjkh */ 45842300Sjkh R visitUnary(UnaryTree node, P p); 45943464Sjkh 46042300Sjkh /** 46140047Sjkh * Visits a VariableTree node. 4628720Sjkh * @param node the node being visited 4633993Sphk * @param p a parameter value 46413391Sphk * @return a result value 46515972Sjkh */ 46613391Sphk R visitVariable(VariableTree node, P p); 4678714Sjkh 46842300Sjkh /** 46942300Sjkh * Visits a WhileLoopTree node. 47042300Sjkh * @param node the node being visited 47142300Sjkh * @param p a parameter value 47223257Sjoerg * @return a result value 47342261Sjkh */ 4748806Sphk R visitWhileLoop(WhileLoopTree node, P p); 47519571Sjoerg 47642300Sjkh /** 47719818Sjoerg * Visits a WildcardTypeTree node. 47819818Sjoerg * @param node the node being visited 47913391Sphk * @param p a parameter value 48042300Sjkh * @return a result value 48119571Sjoerg */ 48242300Sjkh R visitWildcard(WildcardTree node, P p); 48323257Sjoerg 48442300Sjkh /** 48542300Sjkh * Visits a ModuleTree node. 48642300Sjkh * @param node the node being visited 48742300Sjkh * @param p a parameter value 48842300Sjkh * @return a result value 48942300Sjkh */ 49023633Sjkh R visitModule(ModuleTree node, P p); 49142300Sjkh 49223633Sjkh /** 49315972Sjkh * Visits an ExportsTree node. 4947052Sphk * @param node the node being visited 49513391Sphk * @param p a parameter value 49613391Sphk * @return a result value 49713391Sphk */ 4987063Sphk R visitExports(ExportsTree node, P p); 49942300Sjkh 50042300Sjkh /** 50142300Sjkh * Visits a ProvidesTree node. 50242300Sjkh * @param node the node being visited 50342300Sjkh * @param p a parameter value 50442300Sjkh * @return a result value 50527291Sjkh */ 50642300Sjkh R visitProvides(ProvidesTree node, P p); 50727291Sjkh 5087052Sphk /** 50913391Sphk * Visits a RequiresTree node. 51013391Sphk * @param node the node being visited 51113391Sphk * @param p a parameter value 5127100Sphk * @return a result value 51342300Sjkh */ 51442300Sjkh R visitRequires(RequiresTree node, P p); 51542300Sjkh 51642300Sjkh /** 51742312Sjkh * Visits a UsesTree node. 51842300Sjkh * @param node the node being visited 5197100Sphk * @param p a parameter value 5207100Sphk * @return a result value 52121010Sjkh */ 5227732Sphk R visitUses(UsesTree node, P p); 52323750Sjkh 5247100Sphk /** 5257100Sphk * Visits an unknown type of Tree node. 52642300Sjkh * This can occur if the language evolves and new kinds 52742300Sjkh * of nodes are added to the {@code Tree} hierarchy. 52842300Sjkh * @param node the node being visited 52942300Sjkh * @param p a parameter value 53042300Sjkh * @return a result value 53124842Sjoerg */ 53242300Sjkh R visitOther(Tree node, P p); 53342300Sjkh} 53427348Sjkh