From 6fbf0255eb8ee674b3211a352735df0b71468ccb Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 26 Apr 2018 15:35:33 +0200 Subject: [PATCH] ProjectExplorer: Remove FolderNode::addNode taking a raw pointer Change-Id: I53b765d2c3e71889386c76425662bfcc47bdf582 Reviewed-by: Ulf Hermann --- .../cmakeprojectmanager/servermodereader.cpp | 36 ++++++------- src/plugins/projectexplorer/projectnodes.cpp | 15 +----- src/plugins/projectexplorer/projectnodes.h | 1 - .../qbsprojectmanager/qbsnodetreebuilder.cpp | 51 ++++++++++--------- .../qmakenodetreebuilder.cpp | 19 ++++--- .../tests/qmlprofilerdetailsrewriter_test.cpp | 10 ++-- src/plugins/resourceeditor/resourcenode.cpp | 25 +++++---- 7 files changed, 73 insertions(+), 84 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index eb6a71bbc1d..64f74b38e1a 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -264,9 +264,10 @@ static void addCMakeVFolder(FolderNode *base, const Utils::FileName &basePath, i return; FolderNode *folder = base; if (!displayName.isEmpty()) { - folder = new VirtualFolderNode(basePath, priority); - folder->setDisplayName(displayName); - base->addNode(folder); + auto newFolder = std::make_unique(basePath, priority); + newFolder->setDisplayName(displayName); + folder = newFolder.get(); + base->addNode(std::move(newFolder)); } folder->addNestedNodes(files); for (FolderNode *fn : folder->folderNodes()) @@ -291,8 +292,7 @@ static void addCMakeInputs(FolderNode *root, QList &buildInputs, QList &rootInputs) { - ProjectNode *cmakeVFolder = new CMakeInputsNode(root->filePath()); - root->addNode(cmakeVFolder); + std::unique_ptr cmakeVFolder = std::make_unique(root->filePath()); QSet knownFiles; root->forEachGenericNode([&knownFiles](const Node *n) { @@ -300,13 +300,15 @@ static void addCMakeInputs(FolderNode *root, knownFiles.insert(n->filePath()); }); - addCMakeVFolder(cmakeVFolder, sourceDir, 1000, QString(), removeKnownNodes(knownFiles, sourceInputs)); - addCMakeVFolder(cmakeVFolder, buildDir, 100, + addCMakeVFolder(cmakeVFolder.get(), sourceDir, 1000, QString(), removeKnownNodes(knownFiles, sourceInputs)); + addCMakeVFolder(cmakeVFolder.get(), buildDir, 100, QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", ""), removeKnownNodes(knownFiles, buildInputs)); - addCMakeVFolder(cmakeVFolder, Utils::FileName(), 10, + addCMakeVFolder(cmakeVFolder.get(), Utils::FileName(), 10, QCoreApplication::translate("CMakeProjectManager::Internal::ServerModeReader", ""), removeKnownNodes(knownFiles, rootInputs)); + + root->addNode(std::move(cmakeVFolder)); } void ServerModeReader::generateProjectTree(CMakeProjectNode *root, @@ -751,8 +753,9 @@ static ProjectNode *createProjectNode(const QHash(cmln->projectNode(projectName)); if (!pn) { - pn = new CMakeProjectNode(projectName); - cmln->addNode(pn); + auto newNode = std::make_unique(projectName); + pn = newNode.get(); + cmln->addNode(std::move(newNode)); } pn->setDisplayName(displayName); return pn; @@ -781,8 +784,9 @@ static CMakeTargetNode *createTargetNode(const QHashid() == targetId; })); if (!tn) { - tn = new CMakeTargetNode(dir, displayName); - cmln->addNode(tn); + auto newNode = std::make_unique(dir, displayName); + tn = newNode.get(); + cmln->addNode(std::move(newNode)); } tn->setDisplayName(displayName); return tn; @@ -885,7 +889,7 @@ void ServerModeReader::addHeaderNodes(ProjectNode *root, const QList return; static QIcon headerNodeIcon = Core::FileIconProvider::directoryIcon(ProjectExplorer::Constants::FILEOVERLAY_H); - auto headerNode = new VirtualFolderNode(root->filePath(), Node::DefaultPriority - 5); + auto headerNode = std::make_unique(root->filePath(), Node::DefaultPriority - 5); headerNode->setDisplayName(tr("")); headerNode->setIcon(headerNodeIcon); @@ -905,10 +909,8 @@ void ServerModeReader::addHeaderNodes(ProjectNode *root, const QList } } - if (headerNode->isEmpty()) - delete headerNode; // No Headers, do not show this Folder. - else - root->addNode(headerNode); + if (!headerNode->isEmpty()) + root->addNode(std::move(headerNode)); } } // namespace Internal diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index a1278cf106e..45f6d363dee 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -560,11 +560,8 @@ void FolderNode::addNestedNode(std::unique_ptr &&fileNode, void FolderNode::addNestedNodes(const QList &files, const Utils::FileName &overrideBaseDir, const FolderNodeFactory &factory) { - for (FileNode *fileNode : files) { - FolderNode *folder = recursiveFindOrCreateFolderNode(this, fileNode->filePath().parentDir(), - overrideBaseDir, factory); - folder->addNode(fileNode); - } + for (FileNode *fileNode : files) + addNestedNode(std::unique_ptr(fileNode), overrideBaseDir, factory); } // "Compress" a tree of foldernodes such that foldernodes with exactly one foldernode as a child @@ -712,14 +709,6 @@ FolderNode::AddNewInformation FolderNode::addNewInformation(const QStringList &f Adds a node specified by \a node to the internal list of nodes. */ -void FolderNode::addNode(Node *node) -{ - QTC_ASSERT(node, return); - QTC_ASSERT(!node->parentFolderNode(), qDebug("Node has already a parent folder")); - node->setParentFolderNode(this); - m_nodes.emplace_back(std::unique_ptr(node)); -} - void FolderNode::addNode(std::unique_ptr &&node) { QTC_ASSERT(node, return); diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 7a4faea7644..9455d23ad1e 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -282,7 +282,6 @@ public: // determines if node will always be shown when hiding empty directories virtual bool showWhenEmpty() const; - void addNode(Node *node); void addNode(std::unique_ptr &&node); std::unique_ptr takeNode(Node *node); diff --git a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp index 37e669a7da9..022d1191905 100644 --- a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp @@ -80,23 +80,23 @@ void setupArtifacts(ProjectExplorer::FolderNode *root, const QListcompress(); } -QbsProjectManager::Internal::QbsGroupNode -*buildGroupNodeTree(const qbs::GroupData &grp, const QString &productPath, bool productIsEnabled) +std::unique_ptr +buildGroupNodeTree(const qbs::GroupData &grp, const QString &productPath, bool productIsEnabled) { QTC_ASSERT(grp.isValid(), return nullptr); - auto result = new QbsProjectManager::Internal::QbsGroupNode(grp, productPath); + auto result = std::make_unique(grp, productPath); result->setEnabled(productIsEnabled && grp.isEnabled()); result->setAbsoluteFilePathAndLine( Utils::FileName::fromString(grp.location().filePath()).parentDir(), -1); result->setDisplayName(grp.name()); - result->addNode(new QbsProjectManager::Internal::QbsFileNode( + result->addNode(std::make_unique( Utils::FileName::fromString(grp.location().filePath()), ProjectExplorer::FileType::Project, false, grp.location().line())); - ::setupArtifacts(result, grp.allSourceArtifacts()); + ::setupArtifacts(result.get(), grp.allSourceArtifacts()); return result; } @@ -113,9 +113,9 @@ void setupQbsProductData(QbsProjectManager::Internal::QbsProductNode *node, const QString &productPath = QFileInfo(prd.location().filePath()).absolutePath(); // Add QbsFileNode: - node->addNode(new QbsFileNode(Utils::FileName::fromString(prd.location().filePath()), - ProjectExplorer::FileType::Project, false, - prd.location().line())); + node->addNode(std::make_unique(Utils::FileName::fromString(prd.location().filePath()), + ProjectExplorer::FileType::Project, false, + prd.location().line())); foreach (const qbs::GroupData &grp, prd.groups()) { @@ -129,18 +129,19 @@ void setupQbsProductData(QbsProjectManager::Internal::QbsProductNode *node, // Add "Generated Files" Node: auto genFiles - = new ProjectExplorer::VirtualFolderNode(node->filePath(), - ProjectExplorer::Node::DefaultProjectFilePriority - 10); + = std::make_unique(node->filePath(), + ProjectExplorer::Node::DefaultProjectFilePriority - 10); genFiles->setDisplayName(QCoreApplication::translate("QbsProductNode", "Generated files")); - node->addNode(genFiles); - setupArtifacts(genFiles, prd.generatedArtifacts()); + setupArtifacts(genFiles.get(), prd.generatedArtifacts()); + node->addNode(std::move(genFiles)); } -QbsProjectManager::Internal::QbsProductNode *buildProductNodeTree(const qbs::ProductData &prd) +std::unique_ptr +buildProductNodeTree(const qbs::ProductData &prd) { - auto result = new QbsProjectManager::Internal::QbsProductNode(prd); + auto result = std::make_unique(prd); - setupQbsProductData(result, prd); + setupQbsProductData(result.get(), prd); return result; } @@ -148,15 +149,15 @@ void setupProjectNode(QbsProjectManager::Internal::QbsProjectNode *node, const q const qbs::Project &qbsProject) { using namespace QbsProjectManager::Internal; - node->addNode(new QbsFileNode(Utils::FileName::fromString(prjData.location().filePath()), - ProjectExplorer::FileType::Project, false, - prjData.location().line())); + node->addNode(std::make_unique(Utils::FileName::fromString(prjData.location().filePath()), + ProjectExplorer::FileType::Project, false, + prjData.location().line())); foreach (const qbs::ProjectData &subData, prjData.subProjects()) { auto subProject = - new QbsProjectManager::Internal::QbsProjectNode( + std::make_unique( Utils::FileName::fromString(subData.location().filePath()).parentDir()); - setupProjectNode(subProject, subData, qbsProject); - node->addNode(subProject); + setupProjectNode(subProject.get(), subData, qbsProject); + node->addNode(std::move(subProject)); } foreach (const qbs::ProductData &prd, prjData.products()) @@ -212,9 +213,9 @@ std::unique_ptr QbsNodeTreeBuilder::buildTree(QbsProject *pr auto root = std::make_unique(project); setupProjectNode(root.get(), project->qbsProjectData(), project->qbsProject()); auto buildSystemFiles - = new ProjectExplorer::FolderNode(project->projectDirectory(), - ProjectExplorer::NodeType::Folder, - QCoreApplication::translate("QbsRootProjectNode", "Qbs files")); + = std::make_unique(project->projectDirectory(), + ProjectExplorer::NodeType::Folder, + QCoreApplication::translate("QbsRootProjectNode", "Qbs files")); Utils::FileName base = project->projectDirectory(); const QStringList &files = unreferencedBuildSystemFiles(project->qbsProject()); @@ -224,7 +225,7 @@ std::unique_ptr QbsNodeTreeBuilder::buildTree(QbsProject *pr buildSystemFiles->addNestedNode(std::make_unique(filePath, ProjectExplorer::FileType::Project, false)); } buildSystemFiles->compress(); - root->addNode(buildSystemFiles); + root->addNode(std::move(buildSystemFiles)); return root; } diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index b7b4abca0e4..c4c12d43293 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -137,7 +137,7 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi node->setIcon(qmakeStaticData()->projectIcon); // .pro/.pri-file itself: - node->addNode(new FileNode(pri->filePath(), FileType::Project, false)); + node->addNode(std::make_unique(pri->filePath(), FileType::Project, false)); // other normal files: const QVector &fileTypes = qmakeStaticData()->fileTypeData; @@ -148,7 +148,7 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi }); if (!newFilePaths.isEmpty()) { - auto vfolder = new VirtualFolderNode(pri->filePath().parentDir(), Node::DefaultVirtualFolderPriority - i); + auto vfolder = std::make_unique(pri->filePath().parentDir(), Node::DefaultVirtualFolderPriority - i); vfolder->setIcon(fileTypes.at(i).icon); vfolder->setDisplayName(fileTypes.at(i).typeName); vfolder->setAddFileFilter(fileTypes.at(i).addFileFilter); @@ -167,8 +167,7 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi int eid = vfs->idForFileName(file.toString(), QMakeVfs::VfsExact); vfs->readFile(eid, &contents, &errorMessage); } - auto resourceNode = new ResourceEditor::ResourceTopLevelNode(file, false, contents, vfolder); - vfolder->addNode(resourceNode); + vfolder->addNode(std::make_unique(file, false, contents, vfolder.get())); } } else { for (const FileName &fn : newFilePaths) { @@ -181,19 +180,19 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi for (FolderNode *fn : vfolder->folderNodes()) fn->compress(); } - node->addNode(vfolder); + node->addNode(std::move(vfolder)); } } // Virtual folders: for (QmakePriFile *c : pri->children()) { - QmakePriFileNode *newNode = nullptr; + std::unique_ptr newNode; if (auto pf = dynamic_cast(c)) - newNode = new QmakeProFileNode(c->project(), c->filePath(), pf); + newNode = std::make_unique(c->project(), c->filePath(), pf); else - newNode = new QmakePriFileNode(c->project(), node->proFileNode(), c->filePath(), c); - createTree(c, newNode, toExclude); - node->addNode(newNode); + newNode = std::make_unique(c->project(), node->proFileNode(), c->filePath(), c); + createTree(c, newNode.get(), toExclude); + node->addNode(std::move(newNode)); } } diff --git a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp index 4f9e6581cfd..f4e9d0e00db 100644 --- a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp +++ b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp @@ -53,15 +53,15 @@ public: DummyProject(const Utils::FileName &file) : ProjectExplorer::Project(QString(), file, {}) { - ProjectExplorer::FileNode *fileNode - = new ProjectExplorer::FileNode(file, ProjectExplorer::FileType::Source, false); + auto fileNode + = std::make_unique(file, ProjectExplorer::FileType::Source, false); auto root = std::make_unique(file); - root->addNode(fileNode); - fileNode = new ProjectExplorer::FileNode( + root->addNode(std::move(fileNode)); + fileNode = std::make_unique( Utils::FileName::fromLatin1( ":/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp"), ProjectExplorer::FileType::Source, false); - root->addNode(fileNode); + root->addNode(std::move(fileNode)); setRootProjectNode(std::move(root)); } diff --git a/src/plugins/resourceeditor/resourcenode.cpp b/src/plugins/resourceeditor/resourcenode.cpp index 9ba9df330f5..8ba825cc518 100644 --- a/src/plugins/resourceeditor/resourcenode.cpp +++ b/src/plugins/resourceeditor/resourcenode.cpp @@ -313,9 +313,9 @@ void ResourceTopLevelNode::addInternalNodes() // ensure that we don't duplicate prefixes PrefixFolderLang prefixId(prefix, QString(), lang); if (!folderNodes.contains(prefixId)) { - FolderNode *fn = new ResourceFolderNode(file.prefix(i), file.lang(i), this); - addNode(fn); - folderNodes.insert(prefixId, fn); + auto fn = std::make_unique(file.prefix(i), file.lang(i), this); + folderNodes.insert(prefixId, fn.get()); + addNode(std::move(fn)); } ResourceFolderNode *currentPrefixNode = static_cast(folderNodes[prefixId]); @@ -357,19 +357,18 @@ void ResourceTopLevelNode::addInternalNodes() = filePath().toFileInfo().absoluteDir().absoluteFilePath( currentPathList.join(QLatin1Char('/'))); const FileName folderPath = FileName::fromString(absoluteFolderName); - FolderNode *newNode - = new SimpleResourceFolderNode(folderName, pathElement, - prefix, lang, folderPath, - this, currentPrefixNode); - folderNodes.insert(folderId, newNode); + std::unique_ptr newNode + = std::make_unique(folderName, pathElement, + prefix, lang, folderPath, + this, currentPrefixNode); + folderNodes.insert(folderId, newNode.get()); PrefixFolderLang thisPrefixId = prefixId; if (!parentIsPrefix) thisPrefixId = PrefixFolderLang(prefix, parentFolderName, lang); FolderNode *fn = folderNodes[thisPrefixId]; - QTC_CHECK(fn); - if (fn) - fn->addNode(newNode); + if (QTC_GUARD(fn)) + fn->addNode(std::move(newNode)); } parentIsPrefix = false; parentFolderName = folderName; @@ -380,8 +379,8 @@ void ResourceTopLevelNode::addInternalNodes() FolderNode *fn = folderNodes[folderId]; QTC_CHECK(fn); if (fn) - fn->addNode(new ResourceFileNode(FileName::fromString(fileName), - qrcPath, displayName)); + fn->addNode(std::make_unique(FileName::fromString(fileName), + qrcPath, displayName)); } } }