LanguageClient: Add LanguageClientManager::clientAdded() signal

For consumption by interested parties.

Change-Id: I0cbecb4ce99cdd208fc3ff019d4f0ea672dcf752
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2022-08-02 16:08:14 +02:00
parent e8b25f1e75
commit 5fcb459d6b
5 changed files with 17 additions and 27 deletions

View File

@@ -192,7 +192,7 @@ ClangModelManagerSupport::ClangModelManagerSupport()
connect(modelManager, &CppModelManager::fallbackProjectPartUpdated, this, [this] {
if (ClangdClient * const fallbackClient = clientForProject(nullptr)) {
LanguageClientManager::shutdownClient(fallbackClient);
claimNonProjectSources(createClient(nullptr, {}));
claimNonProjectSources(new ClangdClient(nullptr, {}));
}
});
@@ -205,7 +205,7 @@ ClangModelManagerSupport::ClangModelManagerSupport()
this, &ClangModelManagerSupport::onClangdSettingsChanged);
if (CppEditor::ClangdSettings::instance().useClangd())
createClient(nullptr, {});
new ClangdClient(nullptr, {});
m_generatorSynchronizer.setCancelOnWait(true);
new ClangdQuickFixFactory(); // memory managed by CppEditor::g_cppQuickFixFactories
@@ -388,7 +388,7 @@ void ClangModelManagerSupport::updateLanguageClient(
}
if (Client * const oldClient = clientForProject(project))
LanguageClientManager::shutdownClient(oldClient);
ClangdClient * const client = createClient(project, jsonDbDir);
ClangdClient * const client = new ClangdClient(project, jsonDbDir);
connect(client, &Client::initialized, this, [this, client, project, projectInfo, jsonDbDir] {
using namespace ProjectExplorer;
if (!SessionManager::hasProject(project))
@@ -521,14 +521,6 @@ ClangdClient *ClangModelManagerSupport::clientForFile(const Utils::FilePath &fil
return qobject_cast<ClangdClient *>(LanguageClientManager::clientForFilePath(file));
}
ClangdClient *ClangModelManagerSupport::createClient(ProjectExplorer::Project *project,
const Utils::FilePath &jsonDbDir)
{
const auto client = new ClangdClient(project, jsonDbDir);
emit createdClient(client);
return client;
}
void ClangModelManagerSupport::claimNonProjectSources(ClangdClient *client)
{
if (!client)
@@ -780,7 +772,7 @@ void ClangModelManagerSupport::onClangdSettingsChanged()
ClangdClient * const fallbackClient = clientForProject(nullptr);
const ClangdSettings &settings = ClangdSettings::instance();
const auto startNewFallbackClient = [this] {
claimNonProjectSources(createClient(nullptr, {}));
claimNonProjectSources(new ClangdClient(nullptr, {}));
};
if (!fallbackClient) {
if (settings.useClangd())

View File

@@ -71,9 +71,6 @@ public:
static ClangModelManagerSupport *instance();
signals:
void createdClient(ClangdClient *client);
private:
void followSymbol(const CppEditor::CursorInEditor &data,
const Utils::LinkHandler &processLinkCallback, bool resolveTarget,
@@ -110,7 +107,6 @@ private:
void updateLanguageClient(ProjectExplorer::Project *project,
const CppEditor::ProjectInfo::ConstPtr &projectInfo);
ClangdClient *createClient(ProjectExplorer::Project *project, const Utils::FilePath &jsonDbDir);
void claimNonProjectSources(ClangdClient *client);
void watchForExternalChanges();
void watchForInternalChanges();

View File

@@ -61,6 +61,7 @@
using namespace CPlusPlus;
using namespace Core;
using namespace CppEditor::Tests;
using namespace LanguageClient;
using namespace ProjectExplorer;
using namespace TextEditor;
@@ -104,12 +105,11 @@ void ClangdTest::waitForNewClient(bool withIndex)
// Setting up the project should result in a clangd client being created.
// Wait until that has happened.
m_client = nullptr;
const auto modelManagerSupport = ClangModelManagerSupport::instance();
m_client = modelManagerSupport->clientForProject(project());
m_client = ClangModelManagerSupport::clientForProject(project());
if (!m_client) {
QVERIFY(waitForSignalOrTimeout(modelManagerSupport,
&ClangModelManagerSupport::createdClient, timeOutInMs()));
m_client = modelManagerSupport->clientForProject(m_project);
QVERIFY(waitForSignalOrTimeout(LanguageClientManager::instance(),
&LanguageClientManager::clientAdded, timeOutInMs()));
m_client = ClangModelManagerSupport::clientForProject(project());
}
QVERIFY(m_client);
m_client->enableTesting();
@@ -1878,8 +1878,8 @@ void ClangdTestCompletion::testCompleteAfterProjectChange()
QString saveError;
QVERIFY2(proFileEditor->document()->save(&saveError), qPrintable(saveError));
QVERIFY(waitForSignalOrTimeout(project(), &Project::anyParsingFinished, timeOutInMs()));
QVERIFY(waitForSignalOrTimeout(LanguageClient::LanguageClientManager::instance(),
&LanguageClient::LanguageClientManager::clientRemoved,
QVERIFY(waitForSignalOrTimeout(LanguageClientManager::instance(),
&LanguageClientManager::clientRemoved,
timeOutInMs()));
// Waiting for the index will cause highlighting info collection to start too late,
@@ -2026,8 +2026,8 @@ void ClangdTestExternalChanges::test()
header.close();
ClangdClient * const oldClient = client();
QVERIFY(oldClient);
waitForSignalOrTimeout(ClangModelManagerSupport::instance(),
&ClangModelManagerSupport::createdClient, timeOutInMs());
waitForSignalOrTimeout(LanguageClientManager::instance(),
&LanguageClientManager::clientAdded, timeOutInMs());
QCOMPARE(client(), oldClient);
QCOMPARE(client(), ClangModelManagerSupport::clientForProject(project()));
const TextDocument * const curDoc = document("main.cpp");
@@ -2042,8 +2042,8 @@ void ClangdTestExternalChanges::test()
QVERIFY(otherSource.open(QIODevice::WriteOnly));
otherSource.write("blubb");
otherSource.close();
QVERIFY(waitForSignalOrTimeout(ClangModelManagerSupport::instance(),
&ClangModelManagerSupport::createdClient, timeOutInMs()));
QVERIFY(waitForSignalOrTimeout(LanguageClientManager::instance(),
&LanguageClientManager::clientAdded, timeOutInMs()));
ClangdClient * const newClient = ClangModelManagerSupport::clientForProject(project());
QVERIFY(newClient);
QVERIFY(newClient != oldClient);

View File

@@ -118,6 +118,7 @@ void LanguageClient::LanguageClientManager::addClient(Client *client)
[client](const DynamicCapabilities &capabilities) {
managerInstance->m_inspector.updateCapabilities(client->name(), capabilities);
});
emit managerInstance->clientAdded(client);
}
void LanguageClientManager::clientStarted(Client *client)

View File

@@ -103,6 +103,7 @@ public:
static void showInspector();
signals:
void clientAdded(Client *client);
void clientRemoved(Client *client);
void shutdownFinished();