1 /* 2 This file is part of KDevelop 3 SPDX-FileCopyrightText: 2008 Milian Wolff <mail@milianw.de> 4 5 SPDX-License-Identifier: LGPL-2.0-or-later 6 */ 7 8 #ifndef PREDECLARATIONBUILDER_H 9 #define PREDECLARATIONBUILDER_H 10 11 #include "contextbuilder.h" 12 #include "helper.h" 13 #include <language/duchain/builders/abstractdeclarationbuilder.h> 14 15 namespace KDvelop 16 { 17 class Declaration; 18 } 19 namespace Php 20 { 21 class ParseSession; 22 class EditorIntegrator; 23 class FunctionDeclaration; 24 class ClassDeclaration; 25 class NamespaceDeclaration; 26 27 typedef KDevelop::AbstractDeclarationBuilder<AstNode, IdentifierAst, ContextBuilder> PreDeclarationBuilderBase; 28 29 /** 30 * The PreDeclarationBuilder builds usable declarations for classes, interfaces and functions. 31 * 32 * \todo constants should probably be handled here as well 33 */ 34 class KDEVPHPDUCHAIN_EXPORT PreDeclarationBuilder : public PreDeclarationBuilderBase 35 { 36 public: PreDeclarationBuilder(QHash<qint64,ClassDeclaration * > * types,QHash<qint64,FunctionDeclaration * > * functions,QHash<qint64,NamespaceDeclaration * > * namespaces,QList<KDevelop::QualifiedIdentifier> * upcomingClassVariables,EditorIntegrator * editor)37 PreDeclarationBuilder(QHash<qint64, ClassDeclaration*>* types, 38 QHash<qint64, FunctionDeclaration*>* functions, 39 QHash<qint64, NamespaceDeclaration*>* namespaces, 40 QList<KDevelop::QualifiedIdentifier>* upcomingClassVariables, 41 EditorIntegrator* editor ) 42 : m_types(types), m_functions(functions), m_namespaces(namespaces), 43 m_upcomingClassVariables(upcomingClassVariables) 44 { 45 m_editor = editor; 46 } 47 48 virtual ~PreDeclarationBuilder(); 49 50 /// make it accessible to the declaration builder didRecompile()51 bool didRecompile() { return recompiling(); } 52 53 protected: 54 // virtual void visitNode(AstNode* node); 55 virtual void visitClassDeclarationStatement(ClassDeclarationStatementAst *node); 56 virtual void visitInterfaceDeclarationStatement(InterfaceDeclarationStatementAst *node); 57 virtual void visitTraitDeclarationStatement(TraitDeclarationStatementAst *node); 58 virtual void visitFunctionDeclarationStatement(FunctionDeclarationStatementAst *node); 59 virtual void visitClassVariable(ClassVariableAst* node); 60 virtual void openNamespace(NamespaceDeclarationStatementAst* parent, IdentifierAst* node, const IdentifierPair& identifier, const KDevelop::RangeInRevision& range); 61 virtual void closeNamespace(NamespaceDeclarationStatementAst* parent, IdentifierAst* node, const IdentifierPair& identifier); 62 63 virtual void closeDeclaration(); 64 virtual void closeContext(); 65 private: 66 QHash<qint64, ClassDeclaration*>* m_types; 67 QHash<qint64, FunctionDeclaration*>* m_functions; 68 QHash<qint64, NamespaceDeclaration*>* m_namespaces; 69 QList<KDevelop::QualifiedIdentifier>* m_upcomingClassVariables; 70 }; 71 72 } 73 74 #endif // PREDECLARATIONBUILDER_H 75 76