summaryrefslogtreecommitdiff
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-03-27 14:05:30 +0100
committerDavid Schulz <david.schulz@qt.io>2019-04-04 08:18:41 +0000
commit37d0525953593ba99f518819fa4be420a845c690 (patch)
tree0835b4de6a3f58a81092d560e51d0b33b800fbbd /src/plugins/languageclient
parent0161729c23fd86175a9f3c30c2d75d05f9081740 (diff)
downloadqt-creator-37d0525953593ba99f518819fa4be420a845c690.tar.gz
LanguageClient: remove friend relationship between manager and plugin
Change-Id: I594d62615f365db34174c4bd1e6c8a9f6aeb545a Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r--src/plugins/languageclient/languageclientmanager.cpp50
-rw-r--r--src/plugins/languageclient/languageclientmanager.h4
-rw-r--r--src/plugins/languageclient/languageclientplugin.cpp23
-rw-r--r--src/plugins/languageclient/languageclientplugin.h6
4 files changed, 58 insertions, 25 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp
index 1af88ea8c7..7da32eda19 100644
--- a/src/plugins/languageclient/languageclientmanager.cpp
+++ b/src/plugins/languageclient/languageclientmanager.cpp
@@ -26,6 +26,7 @@
#include "languageclientmanager.h"
#include "languageclientutils.h"
+#include "languageclientplugin.h"
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
@@ -49,45 +50,50 @@ namespace LanguageClient {
static LanguageClientManager *managerInstance = nullptr;
-LanguageClientManager::LanguageClientManager()
+LanguageClientManager::LanguageClientManager(QObject *parent)
+ : QObject (parent)
{
+ using namespace Core;
+ using namespace ProjectExplorer;
JsonRpcMessageHandler::registerMessageProvider<PublishDiagnosticsNotification>();
JsonRpcMessageHandler::registerMessageProvider<ApplyWorkspaceEditRequest>();
JsonRpcMessageHandler::registerMessageProvider<LogMessageNotification>();
JsonRpcMessageHandler::registerMessageProvider<ShowMessageRequest>();
JsonRpcMessageHandler::registerMessageProvider<ShowMessageNotification>();
JsonRpcMessageHandler::registerMessageProvider<WorkSpaceFolderRequest>();
- managerInstance = this;
+ connect(EditorManager::instance(), &EditorManager::editorOpened,
+ this, &LanguageClientManager::editorOpened);
+ connect(EditorManager::instance(), &EditorManager::documentOpened,
+ this, &LanguageClientManager::documentOpened);
+ connect(EditorManager::instance(), &EditorManager::documentClosed,
+ this, &LanguageClientManager::documentClosed);
+ connect(EditorManager::instance(), &EditorManager::saved,
+ this, &LanguageClientManager::documentContentsSaved);
+ connect(EditorManager::instance(), &EditorManager::aboutToSave,
+ this, &LanguageClientManager::documentWillSave);
+ connect(SessionManager::instance(), &SessionManager::projectAdded,
+ this, &LanguageClientManager::projectAdded);
+ connect(SessionManager::instance(), &SessionManager::projectRemoved,
+ this, &LanguageClientManager::projectRemoved);
}
LanguageClientManager::~LanguageClientManager()
{
QTC_ASSERT(m_clients.isEmpty(), qDeleteAll(m_clients));
+ managerInstance = nullptr;
}
void LanguageClientManager::init()
{
- using namespace Core;
- using namespace ProjectExplorer;
- QTC_ASSERT(managerInstance, return);
- connect(EditorManager::instance(), &EditorManager::editorOpened,
- managerInstance, &LanguageClientManager::editorOpened);
- connect(EditorManager::instance(), &EditorManager::documentOpened,
- managerInstance, &LanguageClientManager::documentOpened);
- connect(EditorManager::instance(), &EditorManager::documentClosed,
- managerInstance, &LanguageClientManager::documentClosed);
- connect(EditorManager::instance(), &EditorManager::saved,
- managerInstance, &LanguageClientManager::documentContentsSaved);
- connect(EditorManager::instance(), &EditorManager::aboutToSave,
- managerInstance, &LanguageClientManager::documentWillSave);
- connect(SessionManager::instance(), &SessionManager::projectAdded,
- managerInstance, &LanguageClientManager::projectAdded);
- connect(SessionManager::instance(), &SessionManager::projectRemoved,
- managerInstance, &LanguageClientManager::projectRemoved);
+ if (managerInstance)
+ return;
+ QTC_ASSERT(LanguageClientPlugin::instance(), return);
+ managerInstance = new LanguageClientManager(LanguageClientPlugin::instance());
}
void LanguageClientManager::startClient(Client *client)
{
+ QTC_ASSERT(managerInstance, return);
QTC_ASSERT(client, return);
if (managerInstance->m_shuttingDown) {
managerInstance->clientFinished(client);
@@ -106,16 +112,19 @@ void LanguageClientManager::startClient(Client *client)
QVector<Client *> LanguageClientManager::clients()
{
+ QTC_ASSERT(managerInstance, return {});
return managerInstance->m_clients;
}
void LanguageClientManager::addExclusiveRequest(const MessageId &id, Client *client)
{
+ QTC_ASSERT(managerInstance, return);
managerInstance->m_exclusiveRequests[id] << client;
}
void LanguageClientManager::reportFinished(const MessageId &id, Client *byClient)
{
+ QTC_ASSERT(managerInstance, return);
for (Client *client : managerInstance->m_exclusiveRequests[id]) {
if (client != byClient)
client->cancelRequest(id);
@@ -125,6 +134,7 @@ void LanguageClientManager::reportFinished(const MessageId &id, Client *byClient
void LanguageClientManager::deleteClient(Client *client)
{
+ QTC_ASSERT(managerInstance, return);
QTC_ASSERT(client, return);
client->disconnect();
managerInstance->m_clients.removeAll(client);
@@ -136,6 +146,7 @@ void LanguageClientManager::deleteClient(Client *client)
void LanguageClientManager::shutdown()
{
+ QTC_ASSERT(managerInstance, return);
if (managerInstance->m_shuttingDown)
return;
managerInstance->m_shuttingDown = true;
@@ -160,6 +171,7 @@ LanguageClientManager *LanguageClientManager::instance()
QList<Client *> LanguageClientManager::clientsSupportingDocument(
const TextEditor::TextDocument *doc)
{
+ QTC_ASSERT(managerInstance, return {});
QTC_ASSERT(doc, return {};);
return Utils::filtered(managerInstance->reachableClients(), [doc](Client *client) {
return client->isSupportedDocument(doc);
diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h
index 9f075a94b3..7a8e83caa2 100644
--- a/src/plugins/languageclient/languageclientmanager.h
+++ b/src/plugins/languageclient/languageclientmanager.h
@@ -73,7 +73,7 @@ signals:
void shutdownFinished();
private:
- LanguageClientManager();
+ LanguageClientManager(QObject *parent);
void editorOpened(Core::IEditor *editor);
void documentOpened(Core::IDocument *document);
@@ -95,7 +95,5 @@ private:
bool m_shuttingDown = false;
QVector<Client *> m_clients;
QHash<LanguageServerProtocol::MessageId, QList<Client *>> m_exclusiveRequests;
-
- friend class LanguageClientPlugin;
};
} // namespace LanguageClient
diff --git a/src/plugins/languageclient/languageclientplugin.cpp b/src/plugins/languageclient/languageclientplugin.cpp
index 1d64097e62..31643474f6 100644
--- a/src/plugins/languageclient/languageclientplugin.cpp
+++ b/src/plugins/languageclient/languageclientplugin.cpp
@@ -25,18 +25,37 @@
#include "languageclientplugin.h"
+#include "languageclientmanager.h"
+
#include "client.h"
namespace LanguageClient {
+static LanguageClientPlugin *m_instance = nullptr;
+
+LanguageClientPlugin::LanguageClientPlugin()
+{
+ m_instance = this;
+}
+
+LanguageClientPlugin::~LanguageClientPlugin()
+{
+ m_instance = nullptr;
+}
+
+LanguageClientPlugin *LanguageClientPlugin::instance()
+{
+ return m_instance;
+}
+
bool LanguageClientPlugin::initialize(const QStringList & /*arguments*/, QString * /*errorString*/)
{
+ LanguageClientManager::init();
return true;
}
void LanguageClientPlugin::extensionsInitialized()
{
- LanguageClientManager::init();
LanguageClientSettings::init();
}
@@ -45,6 +64,8 @@ ExtensionSystem::IPlugin::ShutdownFlag LanguageClientPlugin::aboutToShutdown()
LanguageClientManager::shutdown();
if (LanguageClientManager::clients().isEmpty())
return ExtensionSystem::IPlugin::SynchronousShutdown;
+ QTC_ASSERT(LanguageClientManager::instance(),
+ return ExtensionSystem::IPlugin::SynchronousShutdown);
connect(LanguageClientManager::instance(), &LanguageClientManager::shutdownFinished,
this, &ExtensionSystem::IPlugin::asynchronousShutdownFinished);
return ExtensionSystem::IPlugin::AsynchronousShutdown;
diff --git a/src/plugins/languageclient/languageclientplugin.h b/src/plugins/languageclient/languageclientplugin.h
index 2cff52cd7b..8fbf66de03 100644
--- a/src/plugins/languageclient/languageclientplugin.h
+++ b/src/plugins/languageclient/languageclientplugin.h
@@ -38,7 +38,10 @@ class LanguageClientPlugin : public ExtensionSystem::IPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "LanguageClient.json")
public:
- LanguageClientPlugin() = default;
+ LanguageClientPlugin();
+ ~LanguageClientPlugin() override;
+
+ static LanguageClientPlugin *instance();
// IPlugin interface
private:
@@ -47,7 +50,6 @@ private:
ShutdownFlag aboutToShutdown() override;
private:
- LanguageClientManager m_clientManager;
LanguageClientOutlineWidgetFactory m_outlineFactory;
};