001    /*
002     * Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
003     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004     *
005     * This code is free software; you can redistribute it and/or modify it
006     * under the terms of the GNU General Public License version 2 only, as
007     * published by the Free Software Foundation.  Sun designates this
008     * particular file as subject to the "Classpath" exception as provided
009     * by Sun in the LICENSE file that accompanied this code.
010     *
011     * This code is distributed in the hope that it will be useful, but WITHOUT
012     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
014     * version 2 for more details (a copy is included in the LICENSE file that
015     * accompanied this code).
016     *
017     * You should have received a copy of the GNU General Public License version
018     * 2 along with this work; if not, write to the Free Software Foundation,
019     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020     *
021     * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022     * CA 95054 USA or visit www.sun.com if you need additional information or
023     * have any questions.
024     */
025    
026    package com.sun.source.tree;
027    
028    /**
029     * A visitor of trees, in the style of the visitor design pattern.
030     * Classes implementing this interface are used to operate
031     * on a tree when the kind of tree is unknown at compile time.
032     * When a visitor is passed to an tree's {@link Tree#accept
033     * accept} method, the <tt>visit<i>XYZ</i></tt> method most applicable
034     * to that tree is invoked.
035     *
036     * <p> Classes implementing this interface may or may not throw a
037     * {@code NullPointerException} if the additional parameter {@code p}
038     * is {@code null}; see documentation of the implementing class for
039     * details.
040     *
041     * <p> <b>WARNING:</b> It is possible that methods will be added to
042     * this interface to accommodate new, currently unknown, language
043     * structures added to future versions of the Java&trade; programming
044     * language.  Therefore, visitor classes directly implementing this
045     * interface may be source incompatible with future versions of the
046     * platform.
047     *
048     * @param <R> the return type of this visitor's methods.  Use {@link
049     *            Void} for visitors that do not need to return results.
050     * @param <P> the type of the additional parameter to this visitor's
051     *            methods.  Use {@code Void} for visitors that do not need an
052     *            additional parameter.
053     *
054     * @author Peter von der Ah&eacute;
055     * @author Jonathan Gibbons
056     *
057     * @since 1.6
058     */
059    public interface TreeVisitor<R,P> {
060        R visitAnnotation(AnnotationTree node, P p);
061        R visitMethodInvocation(MethodInvocationTree node, P p);
062        R visitAssert(AssertTree node, P p);
063        R visitAssignment(AssignmentTree node, P p);
064        R visitCompoundAssignment(CompoundAssignmentTree node, P p);
065        R visitBinary(BinaryTree node, P p);
066        R visitBlock(BlockTree node, P p);
067        /* emw4: staging stuff */
068        R visitBracketExpr(BracketExprTree node, P p);
069        R visitBracketStat(BracketStatTree node, P p);
070        R visitEscapeExpr(EscapeExprTree node, P p);
071        R visitEscapeStat(EscapeStatTree node, P p);
072        R visitBreak(BreakTree node, P p);
073        R visitCase(CaseTree node, P p);
074        R visitCatch(CatchTree node, P p);
075        R visitClass(ClassTree node, P p);
076        R visitConditionalExpression(ConditionalExpressionTree node, P p);
077        R visitContinue(ContinueTree node, P p);
078        R visitDoWhileLoop(DoWhileLoopTree node, P p);
079        R visitErroneous(ErroneousTree node, P p);
080        R visitExpressionStatement(ExpressionStatementTree node, P p);
081        R visitEnhancedForLoop(EnhancedForLoopTree node, P p);
082        R visitForLoop(ForLoopTree node, P p);
083        R visitIdentifier(IdentifierTree node, P p);
084        R visitIf(IfTree node, P p);
085        R visitImport(ImportTree node, P p);
086        R visitArrayAccess(ArrayAccessTree node, P p);
087        R visitLabeledStatement(LabeledStatementTree node, P p);
088        R visitLiteral(LiteralTree node, P p);
089        R visitMethod(MethodTree node, P p);
090        R visitModifiers(ModifiersTree node, P p);
091        R visitNewArray(NewArrayTree node, P p);
092        R visitNewClass(NewClassTree node, P p);
093        R visitParenthesized(ParenthesizedTree node, P p);
094        R visitReturn(ReturnTree node, P p);
095        R visitMemberSelect(MemberSelectTree node, P p);
096        R visitEmptyStatement(EmptyStatementTree node, P p);
097        R visitSwitch(SwitchTree node, P p);
098        R visitSynchronized(SynchronizedTree node, P p);
099        R visitThrow(ThrowTree node, P p);
100        R visitCompilationUnit(CompilationUnitTree node, P p);
101        R visitTry(TryTree node, P p);
102        R visitParameterizedType(ParameterizedTypeTree node, P p);
103        R visitArrayType(ArrayTypeTree node, P p);
104        R visitTypeCast(TypeCastTree node, P p);
105        R visitPrimitiveType(PrimitiveTypeTree node, P p);
106        R visitTypeParameter(TypeParameterTree node, P p);
107        R visitInstanceOf(InstanceOfTree node, P p);
108        R visitUnary(UnaryTree node, P p);
109        R visitVariable(VariableTree node, P p);
110        R visitWhileLoop(WhileLoopTree node, P p);
111        R visitWildcard(WildcardTree node, P p);
112        R visitOther(Tree node, P p);
113    }