ProjectExplorer: Introduce a FolderNode::findProjectNode()

And use it.

Change-Id: Iaf13c4661e397bdb4d756c352683b696e337c8af
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2018-12-18 14:01:36 +01:00
parent 74723498cc
commit f2bade30cf
3 changed files with 23 additions and 8 deletions

View File

@@ -885,14 +885,12 @@ bool Project::hasParsingData() const
const ProjectNode *Project::findNodeForBuildKey(const QString &buildKey) const const ProjectNode *Project::findNodeForBuildKey(const QString &buildKey) const
{ {
const ProjectNode *result = nullptr; if (!d->m_rootProjectNode)
if (d->m_rootProjectNode) { return nullptr;
d->m_rootProjectNode->forEachProjectNode([&result, buildKey](const ProjectNode *node) {
if (node->buildKey() == buildKey) return d->m_rootProjectNode->findProjectNode([buildKey](const ProjectNode *node) {
result = node; return node->buildKey() == buildKey;
}); });
}
return result;
} }
ProjectImporter *Project::projectImporter() const ProjectImporter *Project::projectImporter() const

View File

@@ -525,6 +525,22 @@ void FolderNode::forEachProjectNode(const std::function<void(const ProjectNode *
} }
} }
const ProjectNode *FolderNode::findProjectNode(const std::function<bool(const ProjectNode *)> &predicate) const
{
if (const ProjectNode *projectNode = asProjectNode()) {
if (predicate(projectNode))
return projectNode;
}
for (const std::unique_ptr<Node> &n : m_nodes) {
if (FolderNode *fn = n->asFolderNode()) {
if (const ProjectNode *pn = fn->findProjectNode(predicate))
return pn;
}
}
return nullptr;
}
const QList<Node *> FolderNode::nodes() const const QList<Node *> FolderNode::nodes() const
{ {
return Utils::toRawPointer<QList>(m_nodes); return Utils::toRawPointer<QList>(m_nodes);

View File

@@ -219,6 +219,7 @@ public:
const std::function<bool(const FolderNode *)> &folderFilterTask = {}) const; const std::function<bool(const FolderNode *)> &folderFilterTask = {}) const;
void forEachGenericNode(const std::function<void(Node *)> &genericTask) const; void forEachGenericNode(const std::function<void(Node *)> &genericTask) const;
void forEachProjectNode(const std::function<void(const ProjectNode *)> &genericTask) const; void forEachProjectNode(const std::function<void(const ProjectNode *)> &genericTask) const;
const ProjectNode *findProjectNode(const std::function<bool(const ProjectNode *)> &predicate) const;
const QList<Node *> nodes() const; const QList<Node *> nodes() const;
QList<FileNode *> fileNodes() const; QList<FileNode *> fileNodes() const;
FileNode *fileNode(const Utils::FileName &file) const; FileNode *fileNode(const Utils::FileName &file) const;