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™ 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é
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 }