diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 3413f250380..91a850f1b18 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -9,7 +9,6 @@ #include "clangdcompletion.h" #include "clangdfindreferences.h" #include "clangdfollowsymbol.h" -#include "clangdlocatorfilters.h" #include "clangdmemoryusagewidget.h" #include "clangdquickfixes.h" #include "clangdsemantichighlighting.h" @@ -471,12 +470,7 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir, c } }); - connect(this, &Client::initialized, this, [this] { - auto currentDocumentFilter = static_cast( - CppEditor::CppModelManager::instance()->currentDocumentFilter()); - currentDocumentFilter->updateCurrentClient(); - d->openedExtraFiles.clear(); - }); + connect(this, &Client::initialized, this, [this] { d->openedExtraFiles.clear(); }); start(); } diff --git a/src/plugins/clangcodemodel/clangdlocatorfilters.cpp b/src/plugins/clangcodemodel/clangdlocatorfilters.cpp index 76efcec54c5..76a19f684f2 100644 --- a/src/plugins/clangcodemodel/clangdlocatorfilters.cpp +++ b/src/plugins/clangcodemodel/clangdlocatorfilters.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -194,6 +195,7 @@ class LspCurrentDocumentFilter : public DocumentLocatorFilter { public: LspCurrentDocumentFilter() + : DocumentLocatorFilter(LanguageClientManager::instance()) { setId({}); setDisplayName({}); @@ -313,11 +315,6 @@ ClangdCurrentDocumentFilter::ClangdCurrentDocumentFilter() : d(new Private) ClangdCurrentDocumentFilter::~ClangdCurrentDocumentFilter() { delete d; } -void ClangdCurrentDocumentFilter::updateCurrentClient() -{ - d->lspFilter.updateCurrentClient(); -} - void ClangdCurrentDocumentFilter::prepareSearch(const QString &entry) { const auto doc = TextEditor::TextDocument::currentTextDocument(); diff --git a/src/plugins/clangcodemodel/clangdlocatorfilters.h b/src/plugins/clangcodemodel/clangdlocatorfilters.h index 3a6011b8eea..70afd4cce2e 100644 --- a/src/plugins/clangcodemodel/clangdlocatorfilters.h +++ b/src/plugins/clangcodemodel/clangdlocatorfilters.h @@ -44,8 +44,6 @@ public: ClangdCurrentDocumentFilter(); ~ClangdCurrentDocumentFilter() override; - void updateCurrentClient(); - private: void prepareSearch(const QString &entry) override; QList matchesFor(QFutureInterface &future, diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 2b1255f25ca..56ef4a1c3a6 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -41,7 +41,7 @@ static LanguageClientManager *managerInstance = nullptr; static bool g_shuttingDown = false; LanguageClientManager::LanguageClientManager(QObject *parent) - : QObject (parent) + : QObject(parent) { using namespace Core; using namespace ProjectExplorer; @@ -91,7 +91,7 @@ void LanguageClient::LanguageClientManager::addClient(Client *client) &Client::initialized, managerInstance, [client](const LanguageServerProtocol::ServerCapabilities &capabilities) { - managerInstance->m_currentDocumentLocatorFilter.updateCurrentClient(); + emit managerInstance->clientInitialized(client); managerInstance->m_inspector.clientInitialized(client->name(), capabilities); }); connect(client, diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index 6ceca307a61..db6357ee9e1 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -80,6 +80,7 @@ public: signals: void clientAdded(Client *client); + void clientInitialized(Client *client); void clientRemoved(Client *client); void shutdownFinished(); @@ -102,7 +103,7 @@ private: QList m_currentSettings; // owned QMap> m_clientsForSetting; QHash> m_clientForDocument; - DocumentLocatorFilter m_currentDocumentLocatorFilter; + DocumentLocatorFilter m_currentDocumentLocatorFilter{this}; WorkspaceLocatorFilter m_workspaceLocatorFilter; WorkspaceClassLocatorFilter m_workspaceClassLocatorFilter; WorkspaceMethodLocatorFilter m_workspaceMethodLocatorFilter; diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp index 29619496c50..f8b14f04bf6 100644 --- a/src/plugins/languageclient/locatorfilter.cpp +++ b/src/plugins/languageclient/locatorfilter.cpp @@ -24,7 +24,7 @@ using namespace LanguageServerProtocol; namespace LanguageClient { -DocumentLocatorFilter::DocumentLocatorFilter() +DocumentLocatorFilter::DocumentLocatorFilter(LanguageClientManager *languageManager) { setId(Constants::LANGUAGECLIENT_DOCUMENT_FILTER_ID); setDisplayName(Tr::tr(Constants::LANGUAGECLIENT_DOCUMENT_FILTER_DISPLAY_NAME)); @@ -35,6 +35,8 @@ DocumentLocatorFilter::DocumentLocatorFilter() setPriority(ILocatorFilter::Low); connect(EditorManager::instance(), &EditorManager::currentEditorChanged, this, &DocumentLocatorFilter::updateCurrentClient); + connect(languageManager, &LanguageClientManager::clientInitialized, + this, &DocumentLocatorFilter::updateCurrentClient); } void DocumentLocatorFilter::updateCurrentClient() diff --git a/src/plugins/languageclient/locatorfilter.h b/src/plugins/languageclient/locatorfilter.h index 58d8560c8e7..e37b013ef71 100644 --- a/src/plugins/languageclient/locatorfilter.h +++ b/src/plugins/languageclient/locatorfilter.h @@ -19,13 +19,14 @@ namespace Core { class IEditor; } namespace LanguageClient { +class LanguageClientManager; + class LANGUAGECLIENT_EXPORT DocumentLocatorFilter : public Core::ILocatorFilter { Q_OBJECT public: - DocumentLocatorFilter(); + DocumentLocatorFilter(LanguageClientManager *languageManager); - void updateCurrentClient(); void prepareSearch(const QString &entry) override; QList matchesFor(QFutureInterface &future, const QString &entry) override; @@ -40,6 +41,7 @@ protected: Utils::FilePath m_currentFilePath; private: + void updateCurrentClient(); void updateSymbols(const LanguageServerProtocol::DocumentUri &uri, const LanguageServerProtocol::DocumentSymbolsResult &symbols); void resetSymbols();