bcv-vf/src/org/codehaus/janino/Visitor.java

275 lines
17 KiB
Java

/*
* Janino - An embedded Java[TM] compiler
*
* Copyright (c) 2001-2010, Arno Unkrig
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
* following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.codehaus.janino;
/** Basis for the "visitor" pattern as described in "Gamma, Helm, Johnson, Vlissides: Design Patterns". */
public
class Visitor {
/**
* The union of {@link ImportVisitor}, {@link TypeDeclarationVisitor}, {@link TypeBodyDeclarationVisitor} and
* {@link AtomVisitor}.
*/
public
interface ComprehensiveVisitor
extends ImportVisitor, TypeDeclarationVisitor, TypeBodyDeclarationVisitor, BlockStatementVisitor, AtomVisitor,
ElementValueVisitor { // SUPPRESS CHECKSTYLE WrapAndIndent
}
/** The visitor for all kinds of {@link Java.CompilationUnit.ImportDeclaration}s. */
public
interface ImportVisitor {
/** Invoked by {@link Java.CompilationUnit.SingleTypeImportDeclaration#accept(Visitor.ImportVisitor)} */
void visitSingleTypeImportDeclaration(Java.CompilationUnit.SingleTypeImportDeclaration stid);
/** Invoked by {@link Java.CompilationUnit.TypeImportOnDemandDeclaration#accept(Visitor.ImportVisitor)} */
void visitTypeImportOnDemandDeclaration(Java.CompilationUnit.TypeImportOnDemandDeclaration tiodd);
/** Invoked by {@link Java.CompilationUnit.SingleStaticImportDeclaration#accept(Visitor.ImportVisitor)} */
void visitSingleStaticImportDeclaration(Java.CompilationUnit.SingleStaticImportDeclaration ssid);
/** Invoked by {@link Java.CompilationUnit.StaticImportOnDemandDeclaration#accept(Visitor.ImportVisitor)} */
void visitStaticImportOnDemandDeclaration(Java.CompilationUnit.StaticImportOnDemandDeclaration siodd);
}
/** The visitor for all kinds of {@link Java.TypeDeclaration}s. */
public
interface TypeDeclarationVisitor {
/** Invoked by {@link Java.AnonymousClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitAnonymousClassDeclaration(Java.AnonymousClassDeclaration acd);
/** Invoked by {@link Java.LocalClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitLocalClassDeclaration(Java.LocalClassDeclaration lcd);
/** Invoked by {@link Java.PackageMemberClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitPackageMemberClassDeclaration(Java.PackageMemberClassDeclaration pmcd);
/** Invoked by {@link Java.MemberInterfaceDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitMemberInterfaceDeclaration(Java.MemberInterfaceDeclaration mid);
/** Invoked by {@link Java.PackageMemberInterfaceDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitPackageMemberInterfaceDeclaration(Java.PackageMemberInterfaceDeclaration pmid);
/** Invoked by {@link Java.MemberClassDeclaration#accept(Visitor.TypeDeclarationVisitor)} */
void visitMemberClassDeclaration(Java.MemberClassDeclaration mcd);
}
/** The visitor for all kinds of {@link Java.FunctionDeclarator}s. */
public
interface FunctionDeclaratorVisitor {
/** Invoked by {@link Java.ConstructorDeclarator#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitConstructorDeclarator(Java.ConstructorDeclarator cd);
/** Invoked by {@link Java.MethodDeclarator#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitMethodDeclarator(Java.MethodDeclarator md);
}
/**
* The visitor for all kinds of {@link Java.TypeBodyDeclaration}s (declarations that may appear in the body of a
* type declaration).
*/
public
interface TypeBodyDeclarationVisitor extends FunctionDeclaratorVisitor {
/** Invoked by {@link Java.MemberInterfaceDeclaration#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitMemberInterfaceDeclaration(Java.MemberInterfaceDeclaration mid);
/** Invoked by {@link Java.MemberClassDeclaration#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitMemberClassDeclaration(Java.MemberClassDeclaration mcd);
/** Invoked by {@link Java.Initializer#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitInitializer(Java.Initializer i);
/** Invoked by {@link Java.FieldDeclaration#accept(Visitor.TypeBodyDeclarationVisitor)} */
void visitFieldDeclaration(Java.FieldDeclaration fd);
}
/** The visitor for all kinds of {@link Java.BlockStatement}s (statements that may appear with a block). */
public
interface BlockStatementVisitor {
/** Invoked by {@link Java.Initializer#accept(Visitor.BlockStatementVisitor)} */
void visitInitializer(Java.Initializer i);
/** Invoked by {@link Java.FieldDeclaration#accept(Visitor.BlockStatementVisitor)} */
void visitFieldDeclaration(Java.FieldDeclaration fd);
/** Invoked by {@link Java.LabeledStatement#accept(Visitor.BlockStatementVisitor)} */
void visitLabeledStatement(Java.LabeledStatement ls);
/** Invoked by {@link Java.Block#accept(Visitor.BlockStatementVisitor)} */
void visitBlock(Java.Block b);
/** Invoked by {@link Java.ExpressionStatement#accept(Visitor.BlockStatementVisitor)} */
void visitExpressionStatement(Java.ExpressionStatement es);
/** Invoked by {@link Java.IfStatement#accept(Visitor.BlockStatementVisitor)} */
void visitIfStatement(Java.IfStatement is);
/** Invoked by {@link Java.ForStatement#accept(Visitor.BlockStatementVisitor)} */
void visitForStatement(Java.ForStatement fs);
/** Invoked by {@link Java.ForEachStatement#accept(Visitor.BlockStatementVisitor)} */
void visitForEachStatement(Java.ForEachStatement forEachStatement);
/** Invoked by {@link Java.WhileStatement#accept(Visitor.BlockStatementVisitor)} */
void visitWhileStatement(Java.WhileStatement ws);
/** Invoked by {@link Java.TryStatement#accept(Visitor.BlockStatementVisitor)} */
void visitTryStatement(Java.TryStatement ts);
/** Invoked by {@link Java.SwitchStatement#accept(Visitor.BlockStatementVisitor)} */
void visitSwitchStatement(Java.SwitchStatement ss);
/** Invoked by {@link Java.SynchronizedStatement#accept(Visitor.BlockStatementVisitor)} */
void visitSynchronizedStatement(Java.SynchronizedStatement ss);
/** Invoked by {@link Java.DoStatement#accept(Visitor.BlockStatementVisitor)} */
void visitDoStatement(Java.DoStatement ds);
/** Invoked by {@link Java.LocalVariableDeclarationStatement#accept(Visitor.BlockStatementVisitor)} */
void visitLocalVariableDeclarationStatement(Java.LocalVariableDeclarationStatement lvds);
/** Invoked by {@link Java.ReturnStatement#accept(Visitor.BlockStatementVisitor)} */
void visitReturnStatement(Java.ReturnStatement rs);
/** Invoked by {@link Java.ThrowStatement#accept(Visitor.BlockStatementVisitor)} */
void visitThrowStatement(Java.ThrowStatement ts);
/** Invoked by {@link Java.BreakStatement#accept(Visitor.BlockStatementVisitor)} */
void visitBreakStatement(Java.BreakStatement bs);
/** Invoked by {@link Java.ContinueStatement#accept(Visitor.BlockStatementVisitor)} */
void visitContinueStatement(Java.ContinueStatement cs);
/** Invoked by {@link Java.AssertStatement#accept(Visitor.BlockStatementVisitor)} */
void visitAssertStatement(Java.AssertStatement as);
/** Invoked by {@link Java.EmptyStatement#accept(Visitor.BlockStatementVisitor)} */
void visitEmptyStatement(Java.EmptyStatement es);
/** Invoked by {@link Java.LocalClassDeclarationStatement#accept(Visitor.BlockStatementVisitor)} */
void visitLocalClassDeclarationStatement(Java.LocalClassDeclarationStatement lcds);
/** Invoked by {@link Java.AlternateConstructorInvocation#accept(Visitor.BlockStatementVisitor)} */
void visitAlternateConstructorInvocation(Java.AlternateConstructorInvocation aci);
/** Invoked by {@link Java.SuperConstructorInvocation#accept(Visitor.BlockStatementVisitor)} */
void visitSuperConstructorInvocation(Java.SuperConstructorInvocation sci);
}
/** The visitor for all kinds of {@link Java.Atom}s. */
public
interface AtomVisitor extends RvalueVisitor, TypeVisitor {
/** Invoked by {@link Java.Package#accept(Visitor.AtomVisitor)}. */
void visitPackage(Java.Package p);
}
/** The visitor for all kinds of {@link Java.Type}s. */
public
interface TypeVisitor {
/** Invoked by {@link Java.ArrayType#accept(Visitor.TypeVisitor)} */
void visitArrayType(Java.ArrayType at);
/** Invoked by {@link Java.BasicType#accept(Visitor.TypeVisitor)} */
void visitBasicType(Java.BasicType bt);
/** Invoked by {@link Java.ReferenceType#accept(Visitor.TypeVisitor)} */
void visitReferenceType(Java.ReferenceType rt);
/** Invoked by {@link Java.RvalueMemberType#accept(Visitor.TypeVisitor)} */
void visitRvalueMemberType(Java.RvalueMemberType rmt);
/** Invoked by {@link Java.SimpleType#accept(Visitor.TypeVisitor)} */
void visitSimpleType(Java.SimpleType st);
}
/** The visitor for all kinds of {@link Java.Rvalue}s. */
public
interface RvalueVisitor extends LvalueVisitor {
/** Invoked by {@link Java.ArrayLength#accept(Visitor.RvalueVisitor)} */
void visitArrayLength(Java.ArrayLength al);
/** Invoked by {@link Java.Assignment#accept(Visitor.RvalueVisitor)} */
void visitAssignment(Java.Assignment a);
/** Invoked by {@link Java.UnaryOperation#accept(Visitor.RvalueVisitor)} */
void visitUnaryOperation(Java.UnaryOperation uo);
/** Invoked by {@link Java.BinaryOperation#accept(Visitor.RvalueVisitor)} */
void visitBinaryOperation(Java.BinaryOperation bo);
/** Invoked by {@link Java.Cast#accept(Visitor.RvalueVisitor)} */
void visitCast(Java.Cast c);
/** Invoked by {@link Java.ClassLiteral#accept(Visitor.RvalueVisitor)} */
void visitClassLiteral(Java.ClassLiteral cl);
/** Invoked by {@link Java.ConditionalExpression#accept(Visitor.RvalueVisitor)} */
void visitConditionalExpression(Java.ConditionalExpression ce);
/** Invoked by {@link Java.Crement#accept(Visitor.RvalueVisitor)} */
void visitCrement(Java.Crement c);
/** Invoked by {@link Java.Instanceof#accept(Visitor.RvalueVisitor)} */
void visitInstanceof(Java.Instanceof io);
/** Invoked by {@link Java.MethodInvocation#accept(Visitor.RvalueVisitor)} */
void visitMethodInvocation(Java.MethodInvocation mi);
/** Invoked by {@link Java.SuperclassMethodInvocation#accept(Visitor.RvalueVisitor)} */
void visitSuperclassMethodInvocation(Java.SuperclassMethodInvocation smi);
/** Invoked by {@link Java.IntegerLiteral#accept(Visitor.RvalueVisitor)} */
void visitIntegerLiteral(Java.IntegerLiteral il);
/** Invoked by {@link Java.FloatingPointLiteral#accept(Visitor.RvalueVisitor)} */
void visitFloatingPointLiteral(Java.FloatingPointLiteral fpl);
/** Invoked by {@link Java.BooleanLiteral#accept(Visitor.RvalueVisitor)} */
void visitBooleanLiteral(Java.BooleanLiteral bl);
/** Invoked by {@link Java.CharacterLiteral#accept(Visitor.RvalueVisitor)} */
void visitCharacterLiteral(Java.CharacterLiteral cl);
/** Invoked by {@link Java.StringLiteral#accept(Visitor.RvalueVisitor)} */
void visitStringLiteral(Java.StringLiteral sl);
/** Invoked by {@link Java.NullLiteral#accept(Visitor.RvalueVisitor)} */
void visitNullLiteral(Java.NullLiteral nl);
/** Invoked by {@link Java.SimpleConstant#accept(Visitor.RvalueVisitor)} */
void visitSimpleConstant(Java.SimpleConstant sl);
/** Invoked by {@link Java.NewAnonymousClassInstance#accept(Visitor.RvalueVisitor)} */
void visitNewAnonymousClassInstance(Java.NewAnonymousClassInstance naci);
/** Invoked by {@link Java.NewArray#accept(Visitor.RvalueVisitor)} */
void visitNewArray(Java.NewArray na);
/** Invoked by {@link Java.NewInitializedArray#accept(Visitor.RvalueVisitor)} */
void visitNewInitializedArray(Java.NewInitializedArray nia);
/** Invoked by {@link Java.NewClassInstance#accept(Visitor.RvalueVisitor)} */
void visitNewClassInstance(Java.NewClassInstance nci);
/** Invoked by {@link Java.ParameterAccess#accept(Visitor.RvalueVisitor)} */
void visitParameterAccess(Java.ParameterAccess pa);
/** Invoked by {@link Java.QualifiedThisReference#accept(Visitor.RvalueVisitor)} */
void visitQualifiedThisReference(Java.QualifiedThisReference qtr);
/** Invoked by {@link Java.ArrayLength#accept(Visitor.RvalueVisitor)} */
void visitThisReference(Java.ThisReference tr);
}
/** The visitor for all kinds of {@link Java.Lvalue}s. */
public
interface LvalueVisitor {
/** Invoked by {@link Java.AmbiguousName#accept(Visitor.LvalueVisitor)} */
void visitAmbiguousName(Java.AmbiguousName an);
/** Invoked by {@link Java.ArrayAccessExpression#accept(Visitor.LvalueVisitor)} */
void visitArrayAccessExpression(Java.ArrayAccessExpression aae);
/** Invoked by {@link Java.FieldAccess#accept(Visitor.LvalueVisitor)} */
void visitFieldAccess(Java.FieldAccess fa);
/** Invoked by {@link Java.FieldAccessExpression#accept(Visitor.LvalueVisitor)} */
void visitFieldAccessExpression(Java.FieldAccessExpression fae);
/** Invoked by {@link Java.SuperclassFieldAccessExpression#accept(Visitor.LvalueVisitor)} */
void visitSuperclassFieldAccessExpression(Java.SuperclassFieldAccessExpression scfae);
/** Invoked by {@link Java.LocalVariableAccess#accept(Visitor.LvalueVisitor)} */
void visitLocalVariableAccess(Java.LocalVariableAccess lva);
/** Invoked by {@link Java.ParenthesizedExpression#accept(Visitor.LvalueVisitor)} */
void visitParenthesizedExpression(Java.ParenthesizedExpression pe);
}
/** The visitor for all kinds of {@link Java.Annotation}s. */
public
interface AnnotationVisitor {
/** Invoked by {@link Java.MarkerAnnotation#accept(Visitor.AnnotationVisitor)} */
void visitMarkerAnnotation(Java.MarkerAnnotation ma);
/** Invoked by {@link Java.NormalAnnotation#accept(Visitor.AnnotationVisitor)} */
void visitNormalAnnotation(Java.NormalAnnotation na);
/** Invoked by {@link Java.SingleElementAnnotation#accept(Visitor.AnnotationVisitor)} */
void visitSingleElementAnnotation(Java.SingleElementAnnotation sea);
}
/** The visitor for all kinds of {@link Java.ElementValue}s. */
public
interface ElementValueVisitor extends RvalueVisitor, AnnotationVisitor {
/** Invoked by {@link Java.ElementValueArrayInitializer#accept(Visitor.ElementValueVisitor)} */
void visitElementValueArrayInitializer(Java.ElementValueArrayInitializer evai);
}
/** The visitor for all kinds of {@link Java.TypeArgument}s. */
public
interface TypeArgumentVisitor {
/** Invoked by {@link Java.Wildcard#accept(Visitor.TypeArgumentVisitor)} */
void visitWildcard(Java.Wildcard w);
/** Invoked by {@link Java.ReferenceType#accept(Visitor.TypeArgumentVisitor)} */
void visitReferenceType(Java.ReferenceType rt);
/** Invoked by {@link Java.ArrayType#accept(Visitor.TypeArgumentVisitor)} */
void visitArrayType(Java.ArrayType arrayType);
}
}