LanguageClient: clear running progress when resetting client

Otherwise we will have dangling progress bars after a crashed server was
restarted.

Change-Id: I889d201d7cf196623978638db67397203a8f4564
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-06-03 09:10:10 +02:00
parent d632b3eb4f
commit dc0b2c8b47
3 changed files with 10 additions and 3 deletions

View File

@@ -1019,6 +1019,7 @@ bool Client::reset()
m_runningAssistProcessors.clear(); m_runningAssistProcessors.clear();
qDeleteAll(m_documentHighlightsTimer); qDeleteAll(m_documentHighlightsTimer);
m_documentHighlightsTimer.clear(); m_documentHighlightsTimer.clear();
m_progressManager.reset();
return true; return true;
} }

View File

@@ -38,9 +38,7 @@ ProgressManager::ProgressManager()
ProgressManager::~ProgressManager() ProgressManager::~ProgressManager()
{ {
const QList<ProgressToken> &tokens = m_progress.keys(); reset();
for (const ProgressToken &token : tokens)
endProgress(token);
} }
void ProgressManager::handleProgress(const LanguageServerProtocol::ProgressParams &params) void ProgressManager::handleProgress(const LanguageServerProtocol::ProgressParams &params)
@@ -61,6 +59,13 @@ void ProgressManager::setTitleForToken(const LanguageServerProtocol::ProgressTok
m_titles.insert(token, message); m_titles.insert(token, message);
} }
void ProgressManager::reset()
{
const QList<ProgressToken> &tokens = m_progress.keys();
for (const ProgressToken &token : tokens)
endProgress(token);
}
bool ProgressManager::isProgressEndMessage(const LanguageServerProtocol::ProgressParams &params) bool ProgressManager::isProgressEndMessage(const LanguageServerProtocol::ProgressParams &params)
{ {
return Utils::holds_alternative<WorkDoneProgressEnd>(params.value()); return Utils::holds_alternative<WorkDoneProgressEnd>(params.value());

View File

@@ -48,6 +48,7 @@ public:
void handleProgress(const LanguageServerProtocol::ProgressParams &params); void handleProgress(const LanguageServerProtocol::ProgressParams &params);
void setTitleForToken(const LanguageServerProtocol::ProgressToken &token, void setTitleForToken(const LanguageServerProtocol::ProgressToken &token,
const QString &message); const QString &message);
void reset();
static bool isProgressEndMessage(const LanguageServerProtocol::ProgressParams &params); static bool isProgressEndMessage(const LanguageServerProtocol::ProgressParams &params);