1 // Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
9 //
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
12 //
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 // THE SOFTWARE.
20 
21 #pragma once
22 
23 #include "Symbol.h"
24 
25 
26 namespace CPlusPlus {
27 
28 class CPLUSPLUS_EXPORT SymbolVisitor
29 {
30     SymbolVisitor(const SymbolVisitor &other);
31     void operator =(const SymbolVisitor &other);
32 
33 public:
SymbolVisitor()34     SymbolVisitor() { }
~SymbolVisitor()35     virtual ~SymbolVisitor() { }
36 
accept(Symbol * symbol)37     void accept(Symbol *symbol) { Symbol::visitSymbol(symbol, this); }
38 
preVisit(Symbol *)39     virtual bool preVisit(Symbol *) { return true; }
postVisit(Symbol *)40     virtual void postVisit(Symbol *) {}
41 
visit(UsingNamespaceDirective *)42     virtual bool visit(UsingNamespaceDirective *) { return true; }
visit(UsingDeclaration *)43     virtual bool visit(UsingDeclaration *) { return true; }
visit(NamespaceAlias *)44     virtual bool visit(NamespaceAlias *) { return true; }
visit(Declaration *)45     virtual bool visit(Declaration *) { return true; }
visit(Argument *)46     virtual bool visit(Argument *) { return true; }
visit(TypenameArgument *)47     virtual bool visit(TypenameArgument *) { return true; }
visit(BaseClass *)48     virtual bool visit(BaseClass *) { return true; }
visit(Enum *)49     virtual bool visit(Enum *) { return true; }
visit(Function *)50     virtual bool visit(Function *) { return true; }
visit(Namespace *)51     virtual bool visit(Namespace *) { return true; }
visit(Template *)52     virtual bool visit(Template *) { return true; }
visit(Class *)53     virtual bool visit(Class *) { return true; }
visit(Block *)54     virtual bool visit(Block *) { return true; }
visit(ForwardClassDeclaration *)55     virtual bool visit(ForwardClassDeclaration *) { return true; }
56 
57     // Qt
visit(QtPropertyDeclaration *)58     virtual bool visit(QtPropertyDeclaration *) { return true; }
visit(QtEnum *)59     virtual bool visit(QtEnum *) { return true; }
60 
61     // Objective-C
visit(ObjCBaseClass *)62     virtual bool visit(ObjCBaseClass *) { return true; }
visit(ObjCBaseProtocol *)63     virtual bool visit(ObjCBaseProtocol *) { return true; }
visit(ObjCClass *)64     virtual bool visit(ObjCClass *) { return true; }
visit(ObjCForwardClassDeclaration *)65     virtual bool visit(ObjCForwardClassDeclaration *) { return true; }
visit(ObjCProtocol *)66     virtual bool visit(ObjCProtocol *) { return true; }
visit(ObjCForwardProtocolDeclaration *)67     virtual bool visit(ObjCForwardProtocolDeclaration *) { return true; }
visit(ObjCMethod *)68     virtual bool visit(ObjCMethod *) { return true; }
visit(ObjCPropertyDeclaration *)69     virtual bool visit(ObjCPropertyDeclaration *) { return true; }
70 };
71 
72 } // namespace CPlusPlus
73