diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 325c5f1efbc..a2657a02b00 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -447,52 +447,16 @@ FolderNode *FolderNode::recursiveFindOrCreateFolderNode(const QString &directory void FolderNode::buildTree(QList &files, const Utils::FileName &overrideBaseDir) { - // Gather old list - QList oldFiles = recursiveFileNodes(); - Utils::sort(oldFiles, Node::sortByPath); - Utils::sort(files, Node::sortByPath); + qDeleteAll(m_fileNodes); + m_fileNodes.clear(); + qDeleteAll(m_folderNodes); + m_folderNodes.clear(); - QList added; - QList deleted; - - ProjectExplorer::compareSortedLists(oldFiles, files, deleted, added, Node::sortByPath); - - qDeleteAll(ProjectExplorer::subtractSortedList(files, added, Node::sortByPath)); - - QHash> addedFolderMapping; - QHash> deletedFolderMapping; - - // add added nodes - foreach (ProjectExplorer::FileNode *fn, added) { + foreach (ProjectExplorer::FileNode *fn, files) { // Get relative path to rootNode QString parentDir = fn->filePath().toFileInfo().absolutePath(); - ProjectExplorer::FolderNode *folder - = recursiveFindOrCreateFolderNode(parentDir, overrideBaseDir); - addedFolderMapping[folder] << fn; - } - - for (auto i = addedFolderMapping.constBegin(); i != addedFolderMapping.constEnd(); ++i) - i.key()->addFileNodes(i.value()); - - // remove old file nodes and check whether folder nodes can be removed - foreach (ProjectExplorer::FileNode *fn, deleted) - deletedFolderMapping[fn->parentFolderNode()] << fn; - - for (auto i = deletedFolderMapping.constBegin(); i != deletedFolderMapping.constEnd(); ++i) { - ProjectExplorer::FolderNode *parent = i.key(); - parent->removeFileNodes(i.value()); - - if (parent == this) // Never delete this node! - continue; - - // Check for empty parent - while (parent->folderNodes().isEmpty() && parent->fileNodes().isEmpty()) { - ProjectExplorer::FolderNode *grandparent = parent->parentFolderNode(); - grandparent->removeFolderNodes(QList() << parent); - parent = grandparent; - if (parent == this) - break; - } + ProjectExplorer::FolderNode *folder = recursiveFindOrCreateFolderNode(parentDir, overrideBaseDir); + folder->addFileNodes({ fn }); } }