forked from qt-creator/qt-creator
CMake: Fix some more SOFT-ASSERTS in CMake server-mode
Fix two more SOFT-ASSERTs in CMake server-mode that could be triggered by complex projects. Move and simplify search functionality into FolderNode and use that instead of hand-crafting a custom tree search in CMake. Change-Id: If4bde5c4a7ff84c7d5dba4f595e99b39f54ac8aa Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -401,6 +401,37 @@ QIcon FolderNode::icon() const
|
||||
return m_icon;
|
||||
}
|
||||
|
||||
Node *FolderNode::findNode(const std::function<bool(Node *)> &filter)
|
||||
{
|
||||
if (filter(this))
|
||||
return this;
|
||||
|
||||
for (Node *n : m_nodes) {
|
||||
if (n->asFileNode() && filter(n)) {
|
||||
return n;
|
||||
} else if (FolderNode *folder = n->asFolderNode()) {
|
||||
Node *result = folder->findNode(filter);
|
||||
if (result)
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QList<Node *> FolderNode::findNodes(const std::function<bool(Node *)> &filter)
|
||||
{
|
||||
QList<Node *> result;
|
||||
if (filter(this))
|
||||
result.append(this);
|
||||
for (Node *n : m_nodes) {
|
||||
if (n->asFileNode() && filter(n))
|
||||
result.append(n);
|
||||
else if (FolderNode *folder = n->asFolderNode())
|
||||
result.append(folder->findNode(filter));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void FolderNode::forEachNode(const std::function<void(FileNode *)> &fileTask,
|
||||
const std::function<void(FolderNode *)> &folderTask,
|
||||
const std::function<bool(const FolderNode *)> &folderFilterTask) const
|
||||
|
||||
Reference in New Issue
Block a user