/*******************************************************************************
 * Copyright (c) 2000, 2021 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.corext.dom;

import org.eclipse.jdt.core.dom.*;

/**
 * <p>
 * This class provides a convenient behaviour-only extension mechanism for the ASTNode hierarchy. If
 * you feel like you would like to add a method to the ASTNode hierarchy (or a subtree of the
 * hierarchy), and you want to have different implementations of it at different points in the
 * hierarchy, simply create a HierarchicalASTVisitor representing the new method and all its
 * implementations, locating each implementation within the right visit(XX) method. If you wanted to
 * add a method implementation to abstract class Foo, an ASTNode descendant, put your implementation
 * in visit(Foo). This class will provide appropriate dispatch, just as if the method
 * implementations had been added to the ASTNode hierarchy.
 * </p>
 *
 * <p>
 * <b>Details:<b>
 * </p>
 *
 * <p>
 * This class has a visit(XX node) method for every class (concrete or abstract) XX in the ASTNode
 * hierarchy. In this class' default implementations of these methods, the method corresponding to a
 * given ASTNode descendant class will call (and return the return value of) the visit(YY) method
 * for it's superclass YY, with the exception of the visit(ASTNode) method which simply returns
 * true, since ASTNode doesn't have a superclass that is within the ASTNode hierarchy.
 * </p>
 *
 * <p>
 * Because of this organization, when visit(XX) methods are overridden in a subclass, and the
 * visitor is applied to a node, only the most specialized overridden method implementation for the
 * node's type will be called, unless this most specialized method calls other visit methods (this
 * is discouraged) or, (preferably) calls super.visit(XX node), (the reference type of the parameter
 * must be XX) which will invoke this class' implementation of the method, which will, in turn,
 * invoke the visit(YY) method corresponding to the superclass, YY.
 * </p>
 *
 * <p>
 * Thus, the dispatching behaviour achieved when HierarchicalASTVisitors' visit(XX) methods,
 * corresponding to a particular concrete or abstract ASTNode descendant class, are overridden is
 * exactly analogous to the dispatching behaviour obtained when method implementations are added to
 * the same ASTNode descendant classes.
 * </p>
 *
 */
// @see JDTUIHelperClasses
/*
 * IMPORTANT NOTE:
 *
 * The structure and behaviour of this class is
 * verified reflectively by
 * org.eclipse.jdt.ui.tests.core.HierarchicalASTVisitorTest
 *
 */
public abstract class HierarchicalASTVisitor extends ASTVisitor {
//TODO: check callers for handling of comments

//---- Begin ASTNode Hierarchy -------------------------------------

	/**
	 * Visits the given AST node.
	 * <p>
	 * The default implementation does nothing and return true. Subclasses may reimplement.
	 * </p>
	 *
	 * @param node the node to visit
	 * @return <code>true</code> if the children of this node should be visited, and
	 *         <code>false</code> if the children of this node should be skipped
	 */
	public boolean visit(ASTNode node) {
		return true;
	}

	/**
	 * End of visit the given AST node.
	 * <p>
	 * The default implementation does nothing. Subclasses may reimplement.
	 * </p>
	 *
	 * @param node the node to visit
	 */
	public void endVisit(ASTNode node) {
		// do nothing
	}

	@Override
	public boolean visit(AnonymousClassDeclaration node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(AnonymousClassDeclaration node) {
		endVisit((ASTNode)node);
	}

//---- Begin BodyDeclaration Hierarchy ---------------------------
	public boolean visit(BodyDeclaration node) {
		return visit((ASTNode)node);
	}

	public void endVisit(BodyDeclaration node) {
		endVisit((ASTNode)node);
	}

	//---- Begin AbstractTypeDeclaration Hierarchy ---------------------------
	public boolean visit(AbstractTypeDeclaration node) {
		return visit((BodyDeclaration)node);
	}

	public void endVisit(AbstractTypeDeclaration node) {
		endVisit((BodyDeclaration)node);
	}

	@Override
	public boolean visit(AnnotationTypeDeclaration node) {
		return visit((AbstractTypeDeclaration)node);
	}

	@Override
	public void endVisit(AnnotationTypeDeclaration node) {
		endVisit((AbstractTypeDeclaration)node);
	}

	@Override
	public boolean visit(EnumDeclaration node) {
		return visit((AbstractTypeDeclaration)node);
	}

	@Override
	public void endVisit(EnumDeclaration node) {
		endVisit((AbstractTypeDeclaration)node);
	}

	@Override
	public boolean visit(TypeDeclaration node) {
		return visit((AbstractTypeDeclaration)node);
	}

	@Override
	public void endVisit(TypeDeclaration node) {
		endVisit((AbstractTypeDeclaration)node);
	}

	//---- End AbstractTypeDeclaration Hierarchy ---------------------------

	@Override
	public boolean visit(AnnotationTypeMemberDeclaration node) {
		return visit((BodyDeclaration)node);
	}

	@Override
	public void endVisit(AnnotationTypeMemberDeclaration node) {
		endVisit((BodyDeclaration)node);
	}

	@Override
	public boolean visit(EnumConstantDeclaration node) {
		return visit((BodyDeclaration)node);
	}

	@Override
	public void endVisit(EnumConstantDeclaration node) {
		endVisit((BodyDeclaration)node);
	}

	@Override
	public boolean visit(FieldDeclaration node) {
		return visit((BodyDeclaration)node);
	}

	@Override
	public void endVisit(FieldDeclaration node) {
		endVisit((BodyDeclaration)node);
	}

	@Override
	public boolean visit(Initializer node) {
		return visit((BodyDeclaration)node);
	}

	@Override
	public void endVisit(Initializer node) {
		endVisit((BodyDeclaration)node);
	}

	@Override
	public boolean visit(MethodDeclaration node) {
		return visit((BodyDeclaration)node);
	}

	@Override
	public void endVisit(MethodDeclaration node) {
		endVisit((BodyDeclaration)node);
	}

//---- End BodyDeclaration Hierarchy -----------------------------

	@Override
	public boolean visit(CatchClause node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(CatchClause node) {
		endVisit((ASTNode)node);
	}

//---- Begin Comment Hierarchy ----------------------------------
	public boolean visit(Comment node) {
		return visit((ASTNode)node);
	}

	public void endVisit(Comment node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(BlockComment node) {
		return visit((Comment)node);
	}

	@Override
	public void endVisit(BlockComment node) {
		endVisit((Comment)node);
	}

	@Override
	public boolean visit(Javadoc node) {
		return visit((Comment)node);
	}

	@Override
	public void endVisit(Javadoc node) {
		endVisit((Comment)node);
	}

	@Override
	public boolean visit(LineComment node) {
		return visit((Comment)node);
	}

	@Override
	public void endVisit(LineComment node) {
		endVisit((Comment)node);
	}

//---- End Comment Hierarchy -----------------------------

	@Override
	public boolean visit(CompilationUnit node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(CompilationUnit node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(Dimension node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(Dimension node) {
		endVisit((ASTNode)node);
	}

//---- Begin Expression Hierarchy ----------------------------------
	public boolean visit(Expression node) {
		return visit((ASTNode)node);
	}

	public void endVisit(Expression node) {
		endVisit((ASTNode)node);
	}

	//---- Begin Annotation Hierarchy ----------------------------------
	public boolean visit(Annotation node) {
		return visit((Expression)node);
	}

	public void endVisit(Annotation node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(MarkerAnnotation node) {
		return visit((Annotation)node);
	}

	@Override
	public void endVisit(MarkerAnnotation node) {
		endVisit((Annotation)node);
	}

	@Override
	public boolean visit(NormalAnnotation node) {
		return visit((Annotation)node);
	}

	@Override
	public void endVisit(NormalAnnotation node) {
		endVisit((Annotation)node);
	}

	@Override
	public boolean visit(SingleMemberAnnotation node) {
		return visit((Annotation)node);
	}

	@Override
	public void endVisit(SingleMemberAnnotation node) {
		endVisit((Annotation)node);
	}

	//---- End Annotation Hierarchy -----------------------------

	@Override
	public boolean visit(ArrayAccess node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ArrayAccess node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(ArrayCreation node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ArrayCreation node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(ArrayInitializer node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ArrayInitializer node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(Assignment node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(Assignment node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(BooleanLiteral node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(BooleanLiteral node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(CaseDefaultExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(CaseDefaultExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(CastExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(CastExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(CharacterLiteral node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(CharacterLiteral node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(ClassInstanceCreation node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ClassInstanceCreation node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(ConditionalExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ConditionalExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(FieldAccess node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(FieldAccess node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(InfixExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(InfixExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(InstanceofExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(InstanceofExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(PatternInstanceofExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(PatternInstanceofExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(LambdaExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(LambdaExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(MethodInvocation node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(MethodInvocation node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(SwitchExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(SwitchExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(YieldStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(YieldStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(RecordDeclaration node) {
		return visit((AbstractTypeDeclaration) node);
	}

	@Override
	public void endVisit(RecordDeclaration node) {
		endVisit((AbstractTypeDeclaration) node);
	}

	//---- Begin MethodReference Hierarchy ----------------------------------
	public boolean visit(MethodReference node) {
		return visit((Expression)node);
	}

	public void endVisit(MethodReference node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(CreationReference node) {
		return visit((MethodReference)node);
	}

	@Override
	public void endVisit(CreationReference node) {
		endVisit((MethodReference)node);
	}

	@Override
	public boolean visit(ExpressionMethodReference node) {
		return visit((MethodReference)node);
	}

	@Override
	public void endVisit(ExpressionMethodReference node) {
		endVisit((MethodReference)node);
	}

	@Override
	public boolean visit(SuperMethodReference node) {
		return visit((MethodReference)node);
	}

	@Override
	public void endVisit(SuperMethodReference node) {
		endVisit((MethodReference)node);
	}

	@Override
	public boolean visit(TypeMethodReference node) {
		return visit((MethodReference)node);
	}

	@Override
	public void endVisit(TypeMethodReference node) {
		endVisit((MethodReference)node);
	}

	//---- End MethodReference Hierarchy ------------------------------------

	//---- Begin Name Hierarchy ----------------------------------
	public boolean visit(Name node) {
		return visit((Expression)node);
	}

	public void endVisit(Name node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(QualifiedName node) {
		return visit((Name)node);
	}

	@Override
	public void endVisit(QualifiedName node) {
		endVisit((Name)node);
	}

	@Override
	public boolean visit(ModuleQualifiedName node) {
		return visit((Name)node);
	}

	@Override
	public void endVisit(ModuleQualifiedName node) {
		endVisit((Name)node);
	}

	@Override
	public boolean visit(SimpleName node) {
		return visit((Name)node);
	}

	@Override
	public void endVisit(SimpleName node) {
		endVisit((Name)node);
	}

	//---- End Name Hierarchy ------------------------------------

	@Override
	public boolean visit(GuardedPattern node) {
		return visit((Pattern)node);
	}

	@Override
	public void endVisit(GuardedPattern node) {
		endVisit((Pattern)node);
	}

	@Override
	public boolean visit(NullLiteral node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(NullLiteral node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(NullPattern node) {
		return visit((Pattern)node);
	}

	@Override
	public void endVisit(NullPattern node) {
		endVisit((Pattern)node);
	}

	@Override
	public boolean visit(NumberLiteral node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(NumberLiteral node) {
		endVisit((Expression)node);
	}

	public boolean visit(Pattern node) {
		return visit((Expression)node);
	}

	public void endVisit(Pattern node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(ParenthesizedExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ParenthesizedExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(PostfixExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(PostfixExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(PrefixExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(PrefixExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(StringLiteral node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(StringLiteral node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(SuperFieldAccess node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(SuperFieldAccess node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(SuperMethodInvocation node) {
		return visit((Expression)node);
	}

	@Override
	public boolean visit(TextBlock node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(SuperMethodInvocation node) {
		endVisit((Expression)node);
	}

	@Override
	public void endVisit(TextBlock node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(ThisExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(ThisExpression node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(TypeLiteral node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(TypeLiteral node) {
		endVisit((Expression)node);
	}

	@Override
	public boolean visit(TypePattern node) {
		return visit((Pattern)node);
	}

	@Override
	public void endVisit(TypePattern node) {
		endVisit((Pattern)node);
	}

	@Override
	public boolean visit(VariableDeclarationExpression node) {
		return visit((Expression)node);
	}

	@Override
	public void endVisit(VariableDeclarationExpression node) {
		endVisit((Expression)node);
	}

	//---- End Expression Hierarchy ----------------------------------

	@Override
	public boolean visit(ImportDeclaration node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(ImportDeclaration node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(MemberRef node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(MemberRef node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(MemberValuePair node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(MemberValuePair node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(MethodRef node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(MethodRef node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(MethodRefParameter node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(MethodRefParameter node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(Modifier node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(Modifier node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(ModuleDeclaration node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(ModuleDeclaration node) {
		endVisit((ASTNode)node);
	}

	//---- Begin ModuleDirective Hierarchy ----------------------------------

	public boolean visit(ModuleDirective node) {
		return visit((ASTNode)node);
	}

	public void endVisit(ModuleDirective node) {
		endVisit((ASTNode)node);
	}

	//---- Begin ModulePackageAccess Hierarchy ----------------------------------

	public boolean visit(ModulePackageAccess node) {
		return visit((ModuleDirective)node);
	}

	public void endVisit(ModulePackageAccess node) {
		endVisit((ModuleDirective)node);
	}

	@Override
	public boolean visit(ExportsDirective node) {
		return visit((ModulePackageAccess)node);
	}

	@Override
	public void endVisit(ExportsDirective node) {
		endVisit((ModulePackageAccess)node);
	}

	@Override
	public boolean visit(OpensDirective node) {
		return visit((ModulePackageAccess)node);
	}

	@Override
	public void endVisit(OpensDirective node) {
		endVisit((ModulePackageAccess)node);
	}

	//---- End ModulePackageAccess Hierarchy ------------------------------------

	@Override
	public boolean visit(ProvidesDirective node) {
		return visit((ModuleDirective)node);
	}

	@Override
	public void endVisit(ProvidesDirective node) {
		endVisit((ModuleDirective)node);
	}

	@Override
	public boolean visit(RequiresDirective node) {
		return visit((ModuleDirective)node);
	}

	@Override
	public void endVisit(RequiresDirective node) {
		endVisit((ModuleDirective)node);
	}

	@Override
	public boolean visit(UsesDirective node) {
		return visit((ModuleDirective)node);
	}

	@Override
	public void endVisit(UsesDirective node) {
		endVisit((ModuleDirective)node);
	}

	//---- End ModuleDirective Hierarchy ------------------------------------

	@Override
	public boolean visit(ModuleModifier node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(ModuleModifier node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(PackageDeclaration node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(PackageDeclaration node) {
		endVisit((ASTNode)node);
	}

//---- Begin Statement Hierarchy ---------------------------------
	public boolean visit(Statement node) {
		return visit((ASTNode)node);
	}

	public void endVisit(Statement node) {
		endVisit((ASTNode)node);
	}


	@Override
	public boolean visit(AssertStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(AssertStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(Block node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(Block node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(BreakStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(BreakStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(ConstructorInvocation node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(ConstructorInvocation node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(ContinueStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(ContinueStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(DoStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(DoStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(EmptyStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(EmptyStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(EnhancedForStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(EnhancedForStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(ExpressionStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(ExpressionStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(ForStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(ForStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(IfStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(IfStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(LabeledStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(LabeledStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(ReturnStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(ReturnStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(SuperConstructorInvocation node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(SuperConstructorInvocation node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(SwitchCase node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(SwitchCase node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(SwitchStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(SwitchStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(SynchronizedStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(SynchronizedStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(ThrowStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(ThrowStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(TryStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(TryStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(TypeDeclarationStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(TypeDeclarationStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(VariableDeclarationStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(VariableDeclarationStatement node) {
		endVisit((Statement)node);
	}

	@Override
	public boolean visit(WhileStatement node) {
		return visit((Statement)node);
	}

	@Override
	public void endVisit(WhileStatement node) {
		endVisit((Statement)node);
	}

//---- End Statement Hierarchy ----------------------------------

	@Override
	public boolean visit(TagElement node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(TagElement node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(TextElement node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(TextElement node) {
		endVisit((ASTNode)node);
	}


//---- Begin Type Hierarchy --------------------------------------
	public boolean visit(Type node) {
		return visit((ASTNode)node);
	}

	public void endVisit(Type node) {
		endVisit((ASTNode)node);
	}

//---- Begin Annotatable Type Hierarchy --------------------------------------
	public boolean visit(AnnotatableType node) {
		return visit((Type)node);
	}

	public void endVisit(AnnotatableType node) {
		endVisit((Type)node);
	}

	@Override
	public boolean visit(NameQualifiedType node) {
		return visit((AnnotatableType)node);
	}

	@Override
	public void endVisit(NameQualifiedType node) {
		endVisit((AnnotatableType)node);
	}

	@Override
	public boolean visit(PrimitiveType node) {
		return visit((AnnotatableType)node);
	}

	@Override
	public void endVisit(PrimitiveType node) {
		endVisit((AnnotatableType)node);
	}

	@Override
	public boolean visit(QualifiedType node) {
		return visit((AnnotatableType)node);
	}

	@Override
	public void endVisit(QualifiedType node) {
		endVisit((AnnotatableType)node);
	}

	@Override
	public boolean visit(SimpleType node) {
		return visit((AnnotatableType)node);
	}

	@Override
	public void endVisit(SimpleType node) {
		endVisit((AnnotatableType)node);
	}

	@Override
	public boolean visit(WildcardType node) {
		return visit((AnnotatableType)node);
	}

	@Override
	public void endVisit(WildcardType node) {
		endVisit((AnnotatableType)node);
	}
//---- End Annotatable Type Hierarchy --------------------------------------

	@Override
	public boolean visit(ArrayType node) {
		return visit((Type)node);
	}

	@Override
	public void endVisit(ArrayType node) {
		endVisit((Type)node);
	}

	@Override
	public boolean visit(IntersectionType node) {
		return visit((Type)node);
	}

	@Override
	public void endVisit(IntersectionType node) {
		endVisit((Type)node);
	}

	@Override
	public boolean visit(ParameterizedType node) {
		return visit((Type)node);
	}

	@Override
	public void endVisit(ParameterizedType node) {
		endVisit((Type)node);
	}

	@Override
	public boolean visit(UnionType node) {
		return visit((Type)node);
	}

	@Override
	public void endVisit(UnionType node) {
		endVisit((Type)node);
	}

//---- End Type Hierarchy ----------------------------------------

	@Override
	public boolean visit(TypeParameter node) {
		return visit((ASTNode)node);
	}

	@Override
	public void endVisit(TypeParameter node) {
		endVisit((ASTNode)node);
	}


//---- Begin VariableDeclaration Hierarchy ---------------------------
	public boolean visit(VariableDeclaration node) {
		return visit((ASTNode)node);
	}

	public void endVisit(VariableDeclaration node) {
		endVisit((ASTNode)node);
	}

	@Override
	public boolean visit(SingleVariableDeclaration node) {
		return visit((VariableDeclaration)node);
	}

	@Override
	public void endVisit(SingleVariableDeclaration node) {
		endVisit((VariableDeclaration)node);
	}

	@Override
	public boolean visit(VariableDeclarationFragment node) {
		return visit((VariableDeclaration)node);
	}

	@Override
	public void endVisit(VariableDeclarationFragment node) {
		endVisit((VariableDeclaration)node);
	}

//---- End VariableDeclaration Hierarchy -----------------------------
//---- End ASTNode Hierarchy -----------------------------------------
}
