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