package org.jacorb.idl;

/*
 *        JacORB - a free Java ORB
 *
 *   Copyright (C) 1997-2014 Gerald Brose / The JacORB Team.
 *
 *   This library is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Library General Public
 *   License as published by the Free Software Foundation; either
 *   version 2 of the License, or (at your option) any later version.
 *
 *   This library is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *   Library General Public License for more details.
 *
 *   You should have received a copy of the GNU Library General Public
 *   License along with this library; if not, write to the Free
 *   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */




/**
 * Generic API used by the IDL compiler to call backend code
 * generators. Extend this interface for your own code
 * generator backends. To plug into the compiler, use the
 * IDL compiler option "-backend classname"
 *
 * @author Gerald Brose, XTRADYNE Technologies.
 */

public interface IDLTreeVisitor
{
    /**
     * Visit an IDL specification. This method is the top-level entry point
     * called by the IDL compiler for a single compiler run.
     *
     * @param spec The spec node from the compiler's AST
     */

    void visitSpec( Spec spec );

    /**
     * Visit a module
     *
     * @param mod The module node from the compiler's AST
     */
    void visitModule( Module mod );


    void visitInterface( Interface intf  );

    void visitInterfaceBody( InterfaceBody body  );

    void visitDefinitions( Definitions defs  );

    void visitDefinition( Definition def  );

    void visitDeclaration( Declaration decl );

    void visitOpDecl( OpDecl decl );

    void visitMethod( Method m );

    void visitParamDecl( ParamDecl param );

    void visitStruct( StructType struct );

    void visitUnion( UnionType union );

    void visitEnum( EnumType enumType );


    void visitNative( NativeType _native );

    void visitTypeDef( TypeDef typedef );

    void visitAlias( AliasTypeSpec alias );

    void visitValue( Value value );

    void visitTypeDeclaration( TypeDeclaration typeDecl );

    void visitConstrTypeSpec( ConstrTypeSpec typeDecl );

    void visitSimpleTypeSpec( SimpleTypeSpec typeDecl );

    void visitVectorType( VectorType typeDecl );



}
