ProjectExplorer: Fix replaceSubtree for project nodes

Ensure to keep node alive as long as needed.

Task-number: QTCREATORBUG-20616
Change-Id: I57a720d3e31e14bcb8388de5fef68f70db370c90
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Christian Stenger
2018-06-27 14:57:14 +02:00
parent 32614e9983
commit ce12c239ff

View File

@@ -604,6 +604,7 @@ bool FolderNode::isAncesterOf(Node *n)
bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
{
std::unique_ptr<Node> keepAlive;
if (!oldNode) {
addNode(std::move(newNode)); // Happens e.g. when a project is registered
} else {
@@ -614,9 +615,10 @@ bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
QTC_ASSERT(it != m_nodes.end(), return false);
if (newNode) {
newNode->setParentFolderNode(this);
keepAlive = std::move(*it);
*it = std::move(newNode);
} else {
takeNode(oldNode); // Happens e.g. when project is shutting down
keepAlive = takeNode(oldNode); // Happens e.g. when project is shutting down
}
}
handleSubTreeChanged(this);