forked from qt-creator/qt-creator
LanguageClient: Add action to restart client to editor toolbar
Change-Id: Ib2fb0f6d9a5b3baeac937f298670887fa704ddce Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -106,6 +106,13 @@ void LanguageClient::LanguageClientManager::addClient(Client *client)
|
|||||||
emit managerInstance->clientAdded(client);
|
emit managerInstance->clientAdded(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LanguageClientManager::restartClient(Client *client)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(managerInstance, return);
|
||||||
|
managerInstance->m_restartingClients.insert(client);
|
||||||
|
shutdownClient(client);
|
||||||
|
}
|
||||||
|
|
||||||
void LanguageClientManager::clientStarted(Client *client)
|
void LanguageClientManager::clientStarted(Client *client)
|
||||||
{
|
{
|
||||||
qCDebug(Log) << "client started: " << client->name() << client;
|
qCDebug(Log) << "client started: " << client->name() << client;
|
||||||
@@ -127,6 +134,13 @@ void LanguageClientManager::clientStarted(Client *client)
|
|||||||
void LanguageClientManager::clientFinished(Client *client)
|
void LanguageClientManager::clientFinished(Client *client)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(managerInstance, return);
|
QTC_ASSERT(managerInstance, return);
|
||||||
|
|
||||||
|
if (managerInstance->m_restartingClients.remove(client)) {
|
||||||
|
client->reset();
|
||||||
|
client->start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
constexpr int restartTimeoutS = 5;
|
constexpr int restartTimeoutS = 5;
|
||||||
const bool unexpectedFinish = client->state() != Client::Shutdown
|
const bool unexpectedFinish = client->state() != Client::Shutdown
|
||||||
&& client->state() != Client::ShutdownRequested;
|
&& client->state() != Client::ShutdownRequested;
|
||||||
|
@@ -42,6 +42,7 @@ public:
|
|||||||
static Client *startClient(const BaseSettings *setting, ProjectExplorer::Project *project = nullptr);
|
static Client *startClient(const BaseSettings *setting, ProjectExplorer::Project *project = nullptr);
|
||||||
static const QList<Client *> clients();
|
static const QList<Client *> clients();
|
||||||
static void addClient(Client *client);
|
static void addClient(Client *client);
|
||||||
|
static void restartClient(Client *client);
|
||||||
|
|
||||||
static void addExclusiveRequest(const LanguageServerProtocol::MessageId &id, Client *client);
|
static void addExclusiveRequest(const LanguageServerProtocol::MessageId &id, Client *client);
|
||||||
static void reportFinished(const LanguageServerProtocol::MessageId &id, Client *byClient);
|
static void reportFinished(const LanguageServerProtocol::MessageId &id, Client *byClient);
|
||||||
@@ -100,6 +101,7 @@ private:
|
|||||||
QList<Client *> reachableClients();
|
QList<Client *> reachableClients();
|
||||||
|
|
||||||
QList<Client *> m_clients;
|
QList<Client *> m_clients;
|
||||||
|
QSet<Client *> m_restartingClients;
|
||||||
QList<BaseSettings *> m_currentSettings; // owned
|
QList<BaseSettings *> m_currentSettings; // owned
|
||||||
QMap<QString, QList<Client *>> m_clientsForSetting;
|
QMap<QString, QList<Client *>> m_clientsForSetting;
|
||||||
QHash<TextEditor::TextDocument *, QPointer<Client>> m_clientForDocument;
|
QHash<TextEditor::TextDocument *, QPointer<Client>> m_clientForDocument;
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#include "languageclient_global.h"
|
#include "languageclient_global.h"
|
||||||
#include "languageclientmanager.h"
|
#include "languageclientmanager.h"
|
||||||
#include "languageclientoutline.h"
|
#include "languageclientoutline.h"
|
||||||
|
#include "languageclienttr.h"
|
||||||
#include "snippet.h"
|
#include "snippet.h"
|
||||||
|
|
||||||
#include <coreplugin/editormanager/documentmodel.h>
|
#include <coreplugin/editormanager/documentmodel.h>
|
||||||
@@ -246,7 +247,7 @@ void updateEditorToolBar(Core::IEditor *editor)
|
|||||||
const QIcon icon = Utils::Icon({{":/languageclient/images/languageclient.png",
|
const QIcon icon = Utils::Icon({{":/languageclient/images/languageclient.png",
|
||||||
Utils::Theme::IconsBaseColor}}).icon();
|
Utils::Theme::IconsBaseColor}}).icon();
|
||||||
extras->m_popupAction = widget->toolBar()->addAction(
|
extras->m_popupAction = widget->toolBar()->addAction(
|
||||||
icon, client->name(), [document = QPointer(document)] {
|
icon, client->name(), [document = QPointer(document), client = QPointer<Client>(client)] {
|
||||||
auto menu = new QMenu;
|
auto menu = new QMenu;
|
||||||
auto clientsGroup = new QActionGroup(menu);
|
auto clientsGroup = new QActionGroup(menu);
|
||||||
clientsGroup->setExclusive(true);
|
clientsGroup->setExclusive(true);
|
||||||
@@ -265,10 +266,16 @@ void updateEditorToolBar(Core::IEditor *editor)
|
|||||||
menu->addActions(clientsGroup->actions());
|
menu->addActions(clientsGroup->actions());
|
||||||
if (!clientsGroup->actions().isEmpty())
|
if (!clientsGroup->actions().isEmpty())
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction("Inspect Language Clients", [] {
|
if (client && client->reachable()) {
|
||||||
|
menu->addAction(Tr::tr("Restart %1").arg(client->name()), [client] {
|
||||||
|
if (client && client->reachable())
|
||||||
|
LanguageClientManager::restartClient(client);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
menu->addAction(Tr::tr("Inspect Language Clients"), [] {
|
||||||
LanguageClientManager::showInspector();
|
LanguageClientManager::showInspector();
|
||||||
});
|
});
|
||||||
menu->addAction("Manage...", [] {
|
menu->addAction(Tr::tr("Manage..."), [] {
|
||||||
Core::ICore::showOptionsDialog(Constants::LANGUAGECLIENT_SETTINGS_PAGE);
|
Core::ICore::showOptionsDialog(Constants::LANGUAGECLIENT_SETTINGS_PAGE);
|
||||||
});
|
});
|
||||||
menu->popup(QCursor::pos());
|
menu->popup(QCursor::pos());
|
||||||
|
Reference in New Issue
Block a user