File indexing completed on 2024-05-19 04:42:01

0001 /*
0002     SPDX-FileCopyrightText: 2013 Andrea Scarpino <scarpino@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef USEBUILDER_H
0008 #define USEBUILDER_H
0009 
0010 #include <language/duchain/builders/abstractusebuilder.h>
0011 #include <util/stack.h>
0012 
0013 #include "contextbuilder.h"
0014 
0015 using UseBuilderBase = KDevelop::AbstractUseBuilder<QmlJS::AST::Node, QmlJS::AST::IdentifierPropertyName, ContextBuilder>;
0016 
0017 class KDEVQMLJSDUCHAIN_EXPORT UseBuilder : public UseBuilderBase
0018 {
0019 public:
0020     explicit UseBuilder(ParseSession* session);
0021 
0022 protected:
0023     using Visitor::visit;
0024     using Visitor::preVisit;
0025     using Visitor::postVisit;
0026 
0027     bool preVisit(QmlJS::AST::Node* node) override;
0028     void postVisit(QmlJS::AST::Node* node) override;
0029 
0030     bool visit(QmlJS::AST::FieldMemberExpression* node) override;
0031     bool visit(QmlJS::AST::IdentifierExpression* node) override;
0032     bool visit(QmlJS::AST::UiQualifiedId* node) override;
0033     bool visit(QmlJS::AST::UiImport* node) override;
0034     bool visit(QmlJS::AST::UiPublicMember* node) override;
0035     bool visit(QmlJS::AST::UiScriptBinding* node) override;
0036 
0037 private:
0038     void useForExpression(QmlJS::AST::Node* node, const KDevelop::RangeInRevision &range = KDevelop::RangeInRevision::invalid());
0039 
0040 private:
0041     KDevelop::Stack<QmlJS::AST::Node*> m_nodesThatOpenedContexts;
0042 };
0043 
0044 #endif // USEBUILDER_H