LanguageClient: avoid sending message to server shutting down

Send the workspace change method before the server gets shut down.
Prevents an assert in Client::sendContent.

Change-Id: Iaedc9829379d987aa6f91a87e26d35b64a9f0f55
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-02-04 11:31:26 +01:00
parent 870e495479
commit 3f773cb1e5

View File

@@ -790,6 +790,15 @@ void Client::projectOpened(ProjectExplorer::Project *project)
void Client::projectClosed(ProjectExplorer::Project *project) void Client::projectClosed(ProjectExplorer::Project *project)
{ {
if (sendWorkspceFolderChanges()) {
WorkspaceFoldersChangeEvent event;
event.setRemoved({WorkSpaceFolder(DocumentUri::fromFilePath(project->projectDirectory()),
project->displayName())});
DidChangeWorkspaceFoldersParams params;
params.setEvent(event);
DidChangeWorkspaceFoldersNotification change(params);
sendContent(change);
}
if (project == m_project) { if (project == m_project) {
if (m_state == Initialized) { if (m_state == Initialized) {
shutdown(); shutdown();
@@ -798,15 +807,6 @@ void Client::projectClosed(ProjectExplorer::Project *project)
emit finished(); emit finished();
} }
} }
if (!sendWorkspceFolderChanges())
return;
WorkspaceFoldersChangeEvent event;
event.setRemoved({WorkSpaceFolder(DocumentUri::fromFilePath(project->projectDirectory()),
project->displayName())});
DidChangeWorkspaceFoldersParams params;
params.setEvent(event);
DidChangeWorkspaceFoldersNotification change(params);
sendContent(change);
} }
void Client::setSupportedLanguage(const LanguageFilter &filter) void Client::setSupportedLanguage(const LanguageFilter &filter)
@@ -1260,6 +1260,8 @@ void Client::shutDownCallback(const ShutdownRequest::Response &shutdownResponse)
bool Client::sendWorkspceFolderChanges() const bool Client::sendWorkspceFolderChanges() const
{ {
if (!reachable())
return false;
if (m_dynamicCapabilities.isRegistered( if (m_dynamicCapabilities.isRegistered(
DidChangeWorkspaceFoldersNotification::methodName).value_or(false)) { DidChangeWorkspaceFoldersNotification::methodName).value_or(false)) {
return true; return true;