forked from qt-creator/qt-creator
LanguageClient: Use new setup pattern for CallHierarchyFactory
Change-Id: I1671498eb87f76a367cb52aa3dfd62c0b5ab7597 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user