diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 361bf191929..a1dc290a02b 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -428,16 +428,18 @@ void ClangModelManagerSupport::updateLanguageClient( bool hasDocuments = false; const ClangdSettings settings(ClangdProjectSettings(project).settings()); for (TextEditor::TextDocument * const doc : allCppDocuments()) { - const Client * const currentClient = LanguageClientManager::clientForDocument(doc); + Client * const currentClient = LanguageClientManager::clientForDocument(doc); if (!settings.sizeIsOkay(doc->filePath())) continue; + const Project * const docProject = SessionManager::projectForFile(doc->filePath()); if (currentClient && currentClient->project() - && currentClient->project() != project) { + && currentClient->project() != project + && currentClient->project() == docProject) { continue; } - if (const Project * const docProject - = SessionManager::projectForFile(doc->filePath()); - !docProject || docProject == project) { + if (!docProject || docProject == project) { + if (currentClient) + currentClient->closeDocument(doc); LanguageClientManager::openDocumentWithClient(doc, client); hasDocuments = true; } @@ -543,15 +545,18 @@ void ClangModelManagerSupport::claimNonProjectSources(ClangdClient *client) if (!client) return; for (TextEditor::TextDocument * const doc : allCppDocuments()) { - if (Client * const currentClient = LanguageClientManager::clientForDocument(doc); - currentClient && currentClient->state() == Client::Initialized + Client * const currentClient = LanguageClientManager::clientForDocument(doc); + if (currentClient && currentClient->state() == Client::Initialized && (currentClient == client || currentClient->project())) { continue; } if (!ClangdSettings::instance().sizeIsOkay(doc->filePath())) continue; - if (!ProjectExplorer::SessionManager::projectForFile(doc->filePath())) + if (!ProjectExplorer::SessionManager::projectForFile(doc->filePath())) { + if (currentClient) + currentClient->closeDocument(doc); LanguageClientManager::openDocumentWithClient(doc, client); + } } }