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