aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2019-06-14 15:11:57 +0200
committerhjk <hjk@qt.io>2019-06-14 14:01:31 +0000
commite3690ad7ac6d749c8a489676163864f5abbf99d7 (patch)
tree41ac36934e99b690920a69147fba970e4d782f36
parentb9924e2b4b3544ea494925576a421cd9a5fce94f (diff)
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 <hjk@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rw-r--r--src/plugins/projectexplorer/projecttree.cpp12
1 files 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;
});
}