forked from qt-creator/qt-creator
ProjectExplorer: Slim down user side ProjectNode handling
Change-Id: If727ff6cd09cc127e031c49c47f61ffda631a80e Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "cmakeprojectconstants.h"
|
||||
#include "cmakebuildsettingswidget.h"
|
||||
#include "cmakeprojectmanager.h"
|
||||
#include "cmakeprojectnodes.h"
|
||||
|
||||
#include <coreplugin/documentmanager.h>
|
||||
#include <coreplugin/icore.h>
|
||||
@@ -216,6 +217,9 @@ void CMakeBuildConfiguration::generateProjectTree(CMakeListsNode *root,
|
||||
if (!m_buildDirManager || m_buildDirManager->isParsing())
|
||||
return;
|
||||
|
||||
root->removeProjectNodes();
|
||||
root->setFolderNodes({});
|
||||
root->setFileNodes({});
|
||||
m_buildDirManager->generateProjectTree(root, allFiles);
|
||||
}
|
||||
|
||||
|
||||
@@ -250,11 +250,11 @@ static ProjectNode *updateCMakeInputs(CMakeListsNode *root,
|
||||
if (!cmakeVFolder) {
|
||||
if (hasInputs) {
|
||||
cmakeVFolder = new CMakeInputsNode(root->filePath());
|
||||
root->addProjectNodes({ cmakeVFolder });
|
||||
root->addProjectNode(cmakeVFolder);
|
||||
}
|
||||
} else {
|
||||
if (!hasInputs)
|
||||
root->removeProjectNodes({ cmakeVFolder });
|
||||
root->removeProjectNode(cmakeVFolder);
|
||||
}
|
||||
if (!hasInputs)
|
||||
return nullptr;
|
||||
@@ -304,15 +304,11 @@ void ServerModeReader::generateProjectTree(CMakeListsNode *root,
|
||||
if (!m_projects.isEmpty())
|
||||
root->setDisplayName(m_projects.at(0)->name);
|
||||
|
||||
QSet<Node *> usedNodes;
|
||||
usedNodes.insert(updateCMakeInputs(root, m_parameters.sourceDirectory, m_parameters.buildDirectory,
|
||||
cmakeFilesSource, cmakeFilesBuild, cmakeFilesOther));
|
||||
updateCMakeInputs(root, m_parameters.sourceDirectory, m_parameters.buildDirectory,
|
||||
cmakeFilesSource, cmakeFilesBuild, cmakeFilesOther);
|
||||
|
||||
usedNodes.unite(updateCMakeLists(root, cmakeLists));
|
||||
usedNodes.unite(updateProjects(root, m_projects, allFiles));
|
||||
|
||||
// Trim out unused nodes:
|
||||
root->trim(usedNodes);
|
||||
updateCMakeLists(root, cmakeLists);
|
||||
updateProjects(root, m_projects, allFiles);
|
||||
}
|
||||
|
||||
QSet<Core::Id> ServerModeReader::updateCodeModel(CppTools::ProjectPartBuilder &ppBuilder)
|
||||
@@ -583,7 +579,7 @@ QSet<Node *> ServerModeReader::updateCMakeLists(CMakeListsNode *root,
|
||||
cmln = static_cast<CMakeListsNode *>(parentNode->projectNode(fn->filePath()));
|
||||
if (!cmln) {
|
||||
cmln = new CMakeListsNode(fn->filePath());
|
||||
parentNode->addProjectNodes({ cmln });
|
||||
parentNode->addProjectNode(cmln);
|
||||
}
|
||||
|
||||
// Find or create CMakeLists.txt filenode below CMakeListsNode:
|
||||
@@ -647,7 +643,7 @@ static CMakeProjectNode *findOrCreateProjectNode(CMakeListsNode *root, const Uti
|
||||
CMakeProjectNode *pn = static_cast<CMakeProjectNode *>(cmln->projectNode(projectName));
|
||||
if (!pn) {
|
||||
pn = new CMakeProjectNode(projectName);
|
||||
cmln->addProjectNodes({ pn });
|
||||
cmln->addProjectNode(pn);
|
||||
}
|
||||
pn->setDisplayName(displayName);
|
||||
return pn;
|
||||
@@ -688,7 +684,7 @@ static CMakeTargetNode *findOrCreateTargetNode(CMakeListsNode *root, const Utils
|
||||
CMakeTargetNode *tn = static_cast<CMakeTargetNode *>(cmln->projectNode(targetName));
|
||||
if (!tn) {
|
||||
tn = new CMakeTargetNode(targetName);
|
||||
cmln->addProjectNodes({ tn });
|
||||
cmln->addProjectNode(tn);
|
||||
}
|
||||
tn->setDisplayName(displayName);
|
||||
return tn;
|
||||
|
||||
@@ -243,20 +243,6 @@ CMakeConfig TeaLeafReader::takeParsedConfiguration()
|
||||
return result;
|
||||
}
|
||||
|
||||
static void sanitizeTree(CMakeListsNode *root)
|
||||
{
|
||||
QSet<FileName> uniqueFileNames;
|
||||
QSet<Node *> uniqueNodes;
|
||||
foreach (FileNode *fn, root->recursiveFileNodes()) {
|
||||
const int count = uniqueFileNames.count();
|
||||
uniqueFileNames.insert(fn->filePath());
|
||||
if (count != uniqueFileNames.count())
|
||||
uniqueNodes.insert(static_cast<Node *>(fn));
|
||||
}
|
||||
root->trim(uniqueNodes);
|
||||
root->removeProjectNodes(root->projectNodes()); // Remove all project nodes
|
||||
}
|
||||
|
||||
void TeaLeafReader::generateProjectTree(CMakeListsNode *root, const QList<const FileNode *> &allFiles)
|
||||
{
|
||||
root->setDisplayName(m_projectName);
|
||||
@@ -308,7 +294,6 @@ void TeaLeafReader::generateProjectTree(CMakeListsNode *root, const QList<const
|
||||
|
||||
QList<FileNode *> fileNodes = m_files + Utils::transform(missingHeaders, [](const FileNode *fn) { return new FileNode(*fn); });
|
||||
|
||||
sanitizeTree(root); // Filter out duplicate nodes that e.g. the servermode reader introduces:
|
||||
root->buildTree(fileNodes, m_parameters.sourceDirectory);
|
||||
m_files.clear(); // Some of the FileNodes in files() were deleted!
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user