From e3690ad7ac6d749c8a489676163864f5abbf99d7 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 14 Jun 2019 15:11:57 +0200 Subject: ProjectTree: Fix crash when project has no rootProjectNode Fix a crash that is triggered by a project returning to a state where it has no rootProjectNode. This can happen when parsing fails and Creator should fall back to displaying the project name and its main project file as it does before any parsing had been done. Unfortunately the hasNode function returned false in this case, so the project model was never updated and the removed project nodes stuck around, triggering a crash. Change-Id: I7616e576773dc52fb6fdff39b9f0a7c7729eac71 Reviewed-by: hjk Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/projecttree.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp index 27344989c2..5e853e6a78 100644 --- a/src/plugins/projectexplorer/projecttree.cpp +++ b/src/plugins/projectexplorer/projecttree.cpp @@ -393,9 +393,15 @@ void ProjectTree::applyTreeManager(FolderNode *folder) bool ProjectTree::hasNode(const Node *node) { return Utils::contains(SessionManager::projects(), [node](const Project *p) { - return p && p->rootProjectNode() && ( - p->containerNode() == node - || p->rootProjectNode()->findNode([node](const Node *n) { return n == node; })); + if (!p) + return false; + if (p->containerNode() == node) + return true; + // When parsing fails we have a living container node but no rootProjectNode. + ProjectNode *pn = p->rootProjectNode(); + if (!pn) + return false; + return pn->findNode([node](const Node *n) { return n == node; }) != nullptr; }); } -- cgit v1.2.3