aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cmakeprojectmanager/fileapidataextractor.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
index f800765ae9..cabac0b3b9 100644
--- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
+++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
@@ -653,9 +653,16 @@ std::unique_ptr<CMakeProjectNode> generateRootProjectNode(
void setupLocationInfoForTargets(CMakeProjectNode *rootNode, const QList<CMakeBuildTarget> &targets)
{
+ const QSet<QString> titles = Utils::transform<QSet>(targets, &CMakeBuildTarget::title);
+ QHash<QString, FolderNode *> buildKeyToNode;
+ rootNode->forEachGenericNode([&buildKeyToNode, &titles](Node *node) {
+ FolderNode *folderNode = node->asFolderNode();
+ const QString &buildKey = node->buildKey();
+ if (folderNode && titles.contains(buildKey))
+ buildKeyToNode.insert(buildKey, folderNode);
+ });
for (const CMakeBuildTarget &t : targets) {
- FolderNode *folderNode = static_cast<FolderNode *>(
- rootNode->findNode(Utils::equal(&Node::buildKey, t.title)));
+ FolderNode *folderNode = buildKeyToNode.value(t.title);
if (folderNode) {
QSet<std::pair<FilePath, int>> locations;
auto dedup = [&locations](const Backtrace &bt) {