diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index f800765ae9e..cabac0b3b98 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -653,9 +653,16 @@ std::unique_ptr generateRootProjectNode( void setupLocationInfoForTargets(CMakeProjectNode *rootNode, const QList &targets) { + const QSet titles = Utils::transform(targets, &CMakeBuildTarget::title); + QHash 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( - rootNode->findNode(Utils::equal(&Node::buildKey, t.title))); + FolderNode *folderNode = buildKeyToNode.value(t.title); if (folderNode) { QSet> locations; auto dedup = [&locations](const Backtrace &bt) {