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 "languageclientmanager.h"
|
||||||
#include "languageclienttr.h"
|
#include "languageclienttr.h"
|
||||||
|
|
||||||
#include <QToolButton>
|
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
|
#include <coreplugin/inavigationwidgetfactory.h>
|
||||||
|
|
||||||
#include <languageserverprotocol/callhierarchy.h>
|
#include <languageserverprotocol/callhierarchy.h>
|
||||||
|
|
||||||
#include <texteditor/texteditor.h>
|
#include <texteditor/texteditor.h>
|
||||||
|
|
||||||
#include <utils/delegates.h>
|
#include <utils/delegates.h>
|
||||||
#include <utils/navigationtreeview.h>
|
#include <utils/navigationtreeview.h>
|
||||||
#include <utils/treemodel.h>
|
#include <utils/treemodel.h>
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
|
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
|
#include <QToolButton>
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
using namespace TextEditor;
|
using namespace TextEditor;
|
||||||
@@ -219,7 +223,7 @@ void CallHierarchy::updateHierarchyAtCursorPosition()
|
|||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!CallHierarchyFactory::supportsCallHierarchy(client, document))
|
if (!supportsCallHierarchy(client, document))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TextDocumentPositionParams params;
|
TextDocumentPositionParams params;
|
||||||
@@ -258,14 +262,36 @@ void CallHierarchy::handlePrepareResponse(Client *client,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CallHierarchyFactory::CallHierarchyFactory()
|
class CallHierarchyFactory final : public Core::INavigationWidgetFactory
|
||||||
{
|
{
|
||||||
setDisplayName(Tr::tr("Call Hierarchy"));
|
public:
|
||||||
setPriority(650);
|
CallHierarchyFactory()
|
||||||
setId(Constants::CALL_HIERARCHY_FACTORY_ID);
|
{
|
||||||
|
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;
|
const QString methodName = PrepareCallHierarchyRequest::methodName;
|
||||||
std::optional<bool> registered = client->dynamicCapabilities().isRegistered(methodName);
|
std::optional<bool> registered = client->dynamicCapabilities().isRegistered(methodName);
|
||||||
@@ -283,17 +309,4 @@ bool CallHierarchyFactory::supportsCallHierarchy(Client *client, const Core::IDo
|
|||||||
return supported;
|
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
|
} // namespace LanguageClient
|
||||||
|
@@ -3,22 +3,13 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <coreplugin/inavigationwidgetfactory.h>
|
|
||||||
|
|
||||||
namespace Core { class IDocument; }
|
namespace Core { class IDocument; }
|
||||||
|
|
||||||
namespace LanguageClient {
|
namespace LanguageClient {
|
||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
|
|
||||||
class CallHierarchyFactory : public Core::INavigationWidgetFactory
|
void setupCallHierarchyFactory();
|
||||||
{
|
bool supportsCallHierarchy(Client *client, const Core::IDocument *document);
|
||||||
public:
|
|
||||||
CallHierarchyFactory();
|
|
||||||
|
|
||||||
static bool supportsCallHierarchy(Client *client, const Core::IDocument *document);
|
|
||||||
|
|
||||||
Core::NavigationView createWidget() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace LanguageClient
|
} // namespace LanguageClient
|
||||||
|
@@ -977,7 +977,7 @@ void Client::activateEditor(Core::IEditor *editor)
|
|||||||
optionalActions |= TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor;
|
optionalActions |= TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor;
|
||||||
if (symbolSupport().supportsFindLink(widget->textDocument(), LinkTarget::SymbolTypeDef))
|
if (symbolSupport().supportsFindLink(widget->textDocument(), LinkTarget::SymbolTypeDef))
|
||||||
optionalActions |= TextEditor::TextEditorActionHandler::FollowTypeUnderCursor;
|
optionalActions |= TextEditor::TextEditorActionHandler::FollowTypeUnderCursor;
|
||||||
if (CallHierarchyFactory::supportsCallHierarchy(this, textEditor->document()))
|
if (supportsCallHierarchy(this, textEditor->document()))
|
||||||
optionalActions |= TextEditor::TextEditorActionHandler::CallHierarchy;
|
optionalActions |= TextEditor::TextEditorActionHandler::CallHierarchy;
|
||||||
widget->setOptionalActions(optionalActions);
|
widget->setOptionalActions(optionalActions);
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "languageclientplugin.h"
|
#include "languageclientplugin.h"
|
||||||
|
|
||||||
#include "client.h"
|
#include "callhierarchy.h"
|
||||||
#include "languageclientmanager.h"
|
#include "languageclientmanager.h"
|
||||||
#include "languageclientsettings.h"
|
#include "languageclientsettings.h"
|
||||||
#include "languageclienttr.h"
|
#include "languageclienttr.h"
|
||||||
@@ -38,6 +38,7 @@ void LanguageClientPlugin::initialize()
|
|||||||
{
|
{
|
||||||
using namespace Core;
|
using namespace Core;
|
||||||
|
|
||||||
|
setupCallHierarchyFactory();
|
||||||
setupLanguageClientProjectPanel();
|
setupLanguageClientProjectPanel();
|
||||||
|
|
||||||
LanguageClientManager::init();
|
LanguageClientManager::init();
|
||||||
|
@@ -4,7 +4,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "languageclientoutline.h"
|
#include "languageclientoutline.h"
|
||||||
#include "callhierarchy.h"
|
|
||||||
|
|
||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
|
|
||||||
@@ -28,7 +27,6 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
LanguageClientOutlineWidgetFactory m_outlineFactory;
|
LanguageClientOutlineWidgetFactory m_outlineFactory;
|
||||||
CallHierarchyFactory m_callHierarchyFactory;
|
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
private slots:
|
private slots:
|
||||||
|
Reference in New Issue
Block a user