diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-06-14 15:11:57 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-06-14 14:01:31 +0000 |
commit | e3690ad7ac6d749c8a489676163864f5abbf99d7 (patch) | |
tree | 41ac36934e99b690920a69147fba970e4d782f36 | |
parent | b9924e2b4b3544ea494925576a421cd9a5fce94f (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.cpp | 12 |
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; }); } |