ProjectExplorer: Make FolderNode::replaceSubtree take a unique_ptr

Change-Id: I8e853c00ec24838bdca342e3f1a1b1213f32ef93
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Tobias Hunger
2018-04-26 15:12:44 +02:00
parent d332954567
commit 8bbe795c39
4 changed files with 10 additions and 11 deletions

View File

@@ -604,20 +604,19 @@ bool FolderNode::isAncesterOf(Node *n)
return p == this; return p == this;
} }
bool FolderNode::replaceSubtree(Node *oldNode, Node *newNode) bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
{ {
std::unique_ptr<Node> nn(newNode);
if (!oldNode) { if (!oldNode) {
addNode(nn.release()); // Happens e.g. when a project is registered addNode(std::move(newNode)); // Happens e.g. when a project is registered
} else { } else {
auto it = std::find_if(m_nodes.begin(), m_nodes.end(), auto it = std::find_if(m_nodes.begin(), m_nodes.end(),
[oldNode](const std::unique_ptr<Node> &n) { [oldNode](const std::unique_ptr<Node> &n) {
return oldNode == n.get(); return oldNode == n.get();
}); });
QTC_ASSERT(it != m_nodes.end(), return false); QTC_ASSERT(it != m_nodes.end(), return false);
if (nn) { if (newNode) {
nn->setParentFolderNode(this); newNode->setParentFolderNode(this);
*it = std::move(nn); *it = std::move(newNode);
} else { } else {
takeNode(oldNode); // Happens e.g. when project is shutting down takeNode(oldNode); // Happens e.g. when project is shutting down
} }

View File

@@ -237,7 +237,7 @@ public:
// takes ownership of newNode. // takes ownership of newNode.
// Will delete newNode if oldNode is not a child of this node. // Will delete newNode if oldNode is not a child of this node.
bool replaceSubtree(Node *oldNode, Node *newNode); bool replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode);
void setDisplayName(const QString &name); void setDisplayName(const QString &name);
void setIcon(const QIcon &icon); void setIcon(const QIcon &icon);

View File

@@ -221,8 +221,8 @@ void ResourceEditorPlugin::extensionsInitialized()
FolderNode *const pn = file->parentFolderNode(); FolderNode *const pn = file->parentFolderNode();
QTC_ASSERT(pn, continue); QTC_ASSERT(pn, continue);
const Utils::FileName path = file->filePath(); const Utils::FileName path = file->filePath();
pn->replaceSubtree(file, new ResourceTopLevelNode(path, file->isGenerated(), pn->replaceSubtree(file, std::make_unique<ResourceTopLevelNode>(path, file->isGenerated(),
QString(), pn)); QString(), pn));
} }
}); });
} }

View File

@@ -72,8 +72,8 @@ public:
return true; return true;
FolderNode *parent = m_node->parentFolderNode(); FolderNode *parent = m_node->parentFolderNode();
QTC_ASSERT(parent, return false); QTC_ASSERT(parent, return false);
auto newNode = new ResourceTopLevelNode(m_node->filePath(), false, m_node->contents(), parent); parent->replaceSubtree(m_node, std::make_unique<ResourceTopLevelNode>(
m_node->parentFolderNode()->replaceSubtree(m_node, newNode); m_node->filePath(), false, m_node->contents(), parent));
return true; return true;
} }