From 56ec7f8e692ff552e890c0c61efec88067ea79b8 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 9 Jan 2024 15:24:04 +0100 Subject: [PATCH] LanguageClient: Use new setup pattern for CallHierarchyFactory Change-Id: I1671498eb87f76a367cb52aa3dfd62c0b5ab7597 Reviewed-by: David Schulz --- src/plugins/languageclient/callhierarchy.cpp | 53 ++++++++++++------- src/plugins/languageclient/callhierarchy.h | 13 +---- src/plugins/languageclient/client.cpp | 2 +- .../languageclient/languageclientplugin.cpp | 3 +- .../languageclient/languageclientplugin.h | 2 - 5 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/plugins/languageclient/callhierarchy.cpp b/src/plugins/languageclient/callhierarchy.cpp index 029ca64d939..a310fde2a4e 100644 --- a/src/plugins/languageclient/callhierarchy.cpp +++ b/src/plugins/languageclient/callhierarchy.cpp @@ -6,16 +6,20 @@ #include "languageclientmanager.h" #include "languageclienttr.h" -#include #include +#include + #include + #include + #include #include #include #include #include +#include using namespace Utils; using namespace TextEditor; @@ -219,7 +223,7 @@ void CallHierarchy::updateHierarchyAtCursorPosition() if (!client) return; - if (!CallHierarchyFactory::supportsCallHierarchy(client, document)) + if (!supportsCallHierarchy(client, document)) return; TextDocumentPositionParams params; @@ -258,14 +262,36 @@ void CallHierarchy::handlePrepareResponse(Client *client, } } -CallHierarchyFactory::CallHierarchyFactory() +class CallHierarchyFactory final : public Core::INavigationWidgetFactory { - setDisplayName(Tr::tr("Call Hierarchy")); - setPriority(650); - setId(Constants::CALL_HIERARCHY_FACTORY_ID); +public: + CallHierarchyFactory() + { + setDisplayName(Tr::tr("Call Hierarchy")); + setPriority(650); + setId(Constants::CALL_HIERARCHY_FACTORY_ID); + } + + Core::NavigationView createWidget() final + { + auto h = new CallHierarchy; + h->updateHierarchyAtCursorPosition(); + + Icons::RELOAD_TOOLBAR.icon(); + auto button = new QToolButton; + button->setIcon(Icons::RELOAD_TOOLBAR.icon()); + button->setToolTip(Tr::tr("Reloads the call hierarchy for the symbol under cursor position.")); + connect(button, &QToolButton::clicked, this, [h] { h->updateHierarchyAtCursorPosition(); }); + return {h, {button}}; + } +}; + +void setupCallHierarchyFactory() +{ + static CallHierarchyFactory theCallHierarchyFactory; } -bool CallHierarchyFactory::supportsCallHierarchy(Client *client, const Core::IDocument *document) +bool supportsCallHierarchy(Client *client, const Core::IDocument *document) { const QString methodName = PrepareCallHierarchyRequest::methodName; std::optional registered = client->dynamicCapabilities().isRegistered(methodName); @@ -283,17 +309,4 @@ bool CallHierarchyFactory::supportsCallHierarchy(Client *client, const Core::IDo return supported; } -Core::NavigationView CallHierarchyFactory::createWidget() -{ - auto h = new CallHierarchy; - h->updateHierarchyAtCursorPosition(); - - Icons::RELOAD_TOOLBAR.icon(); - auto button = new QToolButton; - button->setIcon(Icons::RELOAD_TOOLBAR.icon()); - button->setToolTip(Tr::tr("Reloads the call hierarchy for the symbol under cursor position.")); - connect(button, &QToolButton::clicked, this, [h] { h->updateHierarchyAtCursorPosition(); }); - return {h, {button}}; -} - } // namespace LanguageClient diff --git a/src/plugins/languageclient/callhierarchy.h b/src/plugins/languageclient/callhierarchy.h index 79c92fd3600..860919b2b97 100644 --- a/src/plugins/languageclient/callhierarchy.h +++ b/src/plugins/languageclient/callhierarchy.h @@ -3,22 +3,13 @@ #pragma once -#include - namespace Core { class IDocument; } namespace LanguageClient { class Client; -class CallHierarchyFactory : public Core::INavigationWidgetFactory -{ -public: - CallHierarchyFactory(); - - static bool supportsCallHierarchy(Client *client, const Core::IDocument *document); - - Core::NavigationView createWidget() override; -}; +void setupCallHierarchyFactory(); +bool supportsCallHierarchy(Client *client, const Core::IDocument *document); } // namespace LanguageClient diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index d046f187ff2..41efcb5672c 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -977,7 +977,7 @@ void Client::activateEditor(Core::IEditor *editor) optionalActions |= TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor; if (symbolSupport().supportsFindLink(widget->textDocument(), LinkTarget::SymbolTypeDef)) optionalActions |= TextEditor::TextEditorActionHandler::FollowTypeUnderCursor; - if (CallHierarchyFactory::supportsCallHierarchy(this, textEditor->document())) + if (supportsCallHierarchy(this, textEditor->document())) optionalActions |= TextEditor::TextEditorActionHandler::CallHierarchy; widget->setOptionalActions(optionalActions); } diff --git a/src/plugins/languageclient/languageclientplugin.cpp b/src/plugins/languageclient/languageclientplugin.cpp index a3b580b5238..6eb4cbb1e1b 100644 --- a/src/plugins/languageclient/languageclientplugin.cpp +++ b/src/plugins/languageclient/languageclientplugin.cpp @@ -3,7 +3,7 @@ #include "languageclientplugin.h" -#include "client.h" +#include "callhierarchy.h" #include "languageclientmanager.h" #include "languageclientsettings.h" #include "languageclienttr.h" @@ -38,6 +38,7 @@ void LanguageClientPlugin::initialize() { using namespace Core; + setupCallHierarchyFactory(); setupLanguageClientProjectPanel(); LanguageClientManager::init(); diff --git a/src/plugins/languageclient/languageclientplugin.h b/src/plugins/languageclient/languageclientplugin.h index b8eb3ac00a2..fb1f8383b7d 100644 --- a/src/plugins/languageclient/languageclientplugin.h +++ b/src/plugins/languageclient/languageclientplugin.h @@ -4,7 +4,6 @@ #pragma once #include "languageclientoutline.h" -#include "callhierarchy.h" #include @@ -28,7 +27,6 @@ private: private: LanguageClientOutlineWidgetFactory m_outlineFactory; - CallHierarchyFactory m_callHierarchyFactory; #ifdef WITH_TESTS private slots: