LanguageClient: Use new setup pattern for CallHierarchyFactory

Change-Id: I1671498eb87f76a367cb52aa3dfd62c0b5ab7597
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2024-01-09 15:24:04 +01:00
parent 317ca88e09
commit 56ec7f8e69
5 changed files with 38 additions and 35 deletions

View File

@@ -6,16 +6,20 @@
#include "languageclientmanager.h"
#include "languageclienttr.h"
#include <QToolButton>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/inavigationwidgetfactory.h>
#include <languageserverprotocol/callhierarchy.h>
#include <texteditor/texteditor.h>
#include <utils/delegates.h>
#include <utils/navigationtreeview.h>
#include <utils/treemodel.h>
#include <utils/utilsicons.h>
#include <QLayout>
#include <QToolButton>
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<bool> 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

View File

@@ -3,22 +3,13 @@
#pragma once
#include <coreplugin/inavigationwidgetfactory.h>
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

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -4,7 +4,6 @@
#pragma once
#include "languageclientoutline.h"
#include "callhierarchy.h"
#include <extensionsystem/iplugin.h>
@@ -28,7 +27,6 @@ private:
private:
LanguageClientOutlineWidgetFactory m_outlineFactory;
CallHierarchyFactory m_callHierarchyFactory;
#ifdef WITH_TESTS
private slots: