diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 4c0c5ecba7db72708dcc21927272ea6b90dd0aff..4dcbb2b6eaf6e04aa3d400e658670607207ccd70 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -681,6 +681,19 @@ private: const QSet m_newSourceFiles; }; +/// Make sure that m_projectMutex is locked when calling this. +void CppModelManager::recalculateFileToProjectParts() +{ + m_fileToProjectParts.clear(); + foreach (const ProjectInfo &projectInfo, m_projectToProjectsInfo) { + foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts()) { + foreach (const ProjectFile &cxxFile, projectPart->files) { + m_fileToProjectParts[cxxFile.path].append(projectPart); + } + } + } +} + QFuture CppModelManager::updateProjectInfo(const ProjectInfo &newProjectInfo) { if (!newProjectInfo.isValid()) @@ -738,14 +751,7 @@ QFuture CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn // Update Project/ProjectInfo and File/ProjectPart table m_dirty = true; m_projectToProjectsInfo.insert(project, newProjectInfo); - m_fileToProjectParts.clear(); - foreach (const ProjectInfo &projectInfo, m_projectToProjectsInfo) { - foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts()) { - foreach (const ProjectFile &cxxFile, projectPart->files) { - m_fileToProjectParts[cxxFile.path].append(projectPart); - } - } - } + recalculateFileToProjectParts(); } // Mutex scope @@ -823,6 +829,7 @@ void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project) QMutexLocker locker(&m_projectMutex); m_dirty = true; m_projectToProjectsInfo.remove(project); + recalculateFileToProjectParts(); } while (0); delayedGC(); @@ -841,6 +848,7 @@ void CppModelManager::onAboutToUnloadSession() do { QMutexLocker locker(&m_projectMutex); m_projectToProjectsInfo.clear(); + recalculateFileToProjectParts(); m_dirty = true; } while (0); } diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index e86875a63fb98bec3db44e088cad3db50cd01cdb..0bc4ee750d47d52dfc60da7ccdc90ee1230e3e7b 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -170,6 +170,8 @@ private slots: private: void delayedGC(); + void recalculateFileToProjectParts(); + void replaceSnapshot(const CPlusPlus::Snapshot &newSnapshot); void removeFilesFromSnapshot(const QSet &removedFiles); void removeProjectInfoFilesAndIncludesFromSnapshot(const ProjectInfo &projectInfo);