diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-04-26 14:41:46 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-05-02 11:34:35 +0000 |
commit | 5754d5accf10ce7cc01927188c3e6a28c469368b (patch) | |
tree | 8899438063530c7eaeafa86e740852f1ad642752 /src | |
parent | 1f55ba9012eea79fafedddf270ef401aa6988298 (diff) | |
download | qt-creator-5754d5accf10ce7cc01927188c3e6a28c469368b.tar.gz |
ProjectExplorer: Use unique_ptr for Project::setRootProjectNode
Change-Id: If63a49d0eecfb93adcc6076fcb3208c87603af10
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
15 files changed, 38 insertions, 42 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp index 4f80186c33..d368acd456 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp @@ -206,12 +206,12 @@ void AutotoolsProject::makefileParsingFinished() m_watchedFiles.append(absConfigureAc); } - auto newRoot = new AutotoolsProjectNode(projectDirectory()); + auto newRoot = std::make_unique<AutotoolsProjectNode>(projectDirectory()); for (const QString &f : m_files) { const Utils::FileName path = Utils::FileName::fromString(f); newRoot->addNestedNode(new FileNode(path, FileNode::fileTypeForFileName(path), false)); } - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); updateCppCodeModel(); diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 5e9033df6a..aeed2af7ea 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -272,7 +272,7 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc) auto newRoot = generateProjectTree(m_allFiles); if (newRoot) { setDisplayName(newRoot->displayName()); - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); } updateApplicationAndDeploymentTargets(); @@ -348,14 +348,15 @@ void CMakeProject::updateQmlJSCodeModel() modelManager->updateProjectInfo(projectInfo, this); } -CMakeProjectNode *CMakeProject::generateProjectTree(const QList<const FileNode *> &allFiles) const +std::unique_ptr<CMakeProjectNode> +CMakeProject::generateProjectTree(const QList<const FileNode *> &allFiles) const { if (m_buildDirManager.isParsing()) return nullptr; auto root = std::make_unique<CMakeProjectNode>(projectDirectory()); m_buildDirManager.generateProjectTree(root.get(), allFiles); - return root ? root.release() : nullptr; + return root; } bool CMakeProject::knowsAllBuildExecutables() const diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 7f0c7bf4df..4210184185 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -99,7 +99,7 @@ private: void updateProjectData(Internal::CMakeBuildConfiguration *bc); void updateQmlJSCodeModel(); - Internal::CMakeProjectNode * + std::unique_ptr<Internal::CMakeProjectNode> generateProjectTree(const QList<const ProjectExplorer::FileNode*> &allFiles) const; void createGeneratedCodeModelSupport(); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index f6b925a3f6..80e901fd0d 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -339,7 +339,7 @@ void GenericProject::refresh(RefreshOptions options) parseProject(options); if (options & Files) { - auto newRoot = new GenericProjectNode(this); + auto newRoot = std::make_unique<GenericProjectNode>(this); for (const QString &f : m_files) { FileType fileType = FileType::Source; // ### FIXME @@ -358,7 +358,7 @@ void GenericProject::refresh(RefreshOptions options) FileType::Project, /* generated = */ false)); - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); } refreshCppCodeModel(); diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp index fa5420db02..b0d7191c42 100644 --- a/src/plugins/nim/project/nimproject.cpp +++ b/src/plugins/nim/project/nimproject.cpp @@ -147,10 +147,10 @@ void NimProject::updateProject() if (oldFiles == m_files) return; - auto newRoot = new NimProjectNode(*this, projectDirectory()); + auto newRoot = std::make_unique<NimProjectNode>(*this, projectDirectory()); newRoot->setDisplayName(displayName()); newRoot->addNestedNodes(fileNodes); - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); emitParsingFinished(true); } diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 5208a3df7a..9d48d2237a 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -491,28 +491,26 @@ void Project::setId(Core::Id id) d->m_id = id; } -void Project::setRootProjectNode(ProjectNode *root) +void Project::setRootProjectNode(std::unique_ptr<ProjectNode> &&root) { - if (d->m_rootProjectNode.get() == root) - return; + QTC_ASSERT(d->m_rootProjectNode.get() != root.get(), return); if (root && root->isEmpty()) { // Something went wrong with parsing: At least the project file needs to be // shown so that the user can fix the breakage. // Do not leak root and use default project tree in this case. - delete root; - root = nullptr; + root.reset(); } if (root) { - ProjectTree::applyTreeManager(root); + ProjectTree::applyTreeManager(root.get()); root->setParentFolderNode(d->m_containerNode.get()); } std::unique_ptr<ProjectNode> oldNode = std::move(d->m_rootProjectNode); - d->m_rootProjectNode.reset(root); - if (oldNode || root) + d->m_rootProjectNode = std::move(root); + if (oldNode || d->m_rootProjectNode) handleSubTreeChanged(d->m_containerNode.get()); } @@ -1049,13 +1047,13 @@ void ProjectExplorerPlugin::testProject_projectTree() QCOMPARE(fileSpy.count(), 0); QVERIFY(!project.rootProjectNode()); - project.setRootProjectNode(new TestProjectNode(project.projectDirectory())); // will delete the fileNode... + project.setRootProjectNode(std::make_unique<TestProjectNode>(project.projectDirectory())); QCOMPARE(fileSpy.count(), 0); QVERIFY(!project.rootProjectNode()); std::unique_ptr<ProjectNode> root = createFileTree(&project); ProjectNode *rootNode = root.get(); - project.setRootProjectNode(root.release()); + project.setRootProjectNode(std::move(root)); QCOMPARE(fileSpy.count(), 1); QCOMPARE(project.rootProjectNode(), rootNode); @@ -1077,10 +1075,6 @@ void ProjectExplorerPlugin::testProject_projectTree() QVERIFY(sourceFiles.contains(TEST_PROJECT_PATH)); QVERIFY(sourceFiles.contains(TEST_PROJECT_CPP_FILE)); - project.setRootProjectNode(rootNode); - QCOMPARE(fileSpy.count(), 1); - QCOMPARE(project.rootProjectNode(), rootNode); - project.setRootProjectNode(nullptr); QCOMPARE(fileSpy.count(), 2); QVERIFY(!project.rootProjectNode()); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index b51a44abae..29e6d7fb2d 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -232,7 +232,7 @@ protected: void setPreferredKitPredicate(const Kit::Predicate &predicate); void setId(Core::Id id); - void setRootProjectNode(ProjectNode *root); // takes ownership! + void setRootProjectNode(std::unique_ptr<ProjectNode> &&root); // takes ownership! void setProjectLanguages(Core::Context language); void addProjectLanguage(Core::Id id); void removeProjectLanguage(Core::Id id); diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index 5d9d9b4c09..0f9d58546f 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -457,7 +457,7 @@ void PythonProject::refresh(Target *target) QDir baseDir(projectDirectory().toString()); BuildTargetInfoList appTargets; - auto newRoot = new PythonProjectNode(this); + auto newRoot = std::make_unique<PythonProjectNode>(this); for (const QString &f : m_files) { const QString displayName = baseDir.relativeFilePath(f); FileType fileType = f.endsWith(".pyqtc") ? FileType::Project : FileType::Source; @@ -470,7 +470,7 @@ void PythonProject::refresh(Target *target) appTargets.list.append(bti); } } - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); if (!target) target = activeTarget(); diff --git a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp index 7c84847c6b..79b1fa9822 100644 --- a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp @@ -205,13 +205,13 @@ QStringList unreferencedBuildSystemFiles(const qbs::Project &p) namespace QbsProjectManager { namespace Internal { -QbsRootProjectNode *QbsNodeTreeBuilder::buildTree(QbsProject *project) +std::unique_ptr<QbsRootProjectNode> QbsNodeTreeBuilder::buildTree(QbsProject *project) { if (!project->qbsProjectData().isValid()) - return nullptr; + return {}; - auto root = new QbsRootProjectNode(project); - setupProjectNode(root, project->qbsProjectData(), project->qbsProject()); + auto root = std::make_unique<QbsRootProjectNode>(project); + setupProjectNode(root.get(), project->qbsProjectData(), project->qbsProject()); auto buildSystemFiles = new ProjectExplorer::FolderNode(project->projectDirectory(), ProjectExplorer::NodeType::Folder, diff --git a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.h b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.h index d136fcdafc..4834dd00d1 100644 --- a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.h +++ b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.h @@ -39,7 +39,7 @@ namespace Internal { class QbsNodeTreeBuilder { public: - static QbsRootProjectNode *buildTree(QbsProject *project); + static std::unique_ptr<QbsRootProjectNode> buildTree(QbsProject *project); }; } // namespace Internal diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 5b6f89f770..c3d2993d5a 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -526,9 +526,9 @@ void QbsProject::handleQbsParsingDone(bool success) void QbsProject::rebuildProjectTree() { - QbsProjectNode *newRoot = Internal::QbsNodeTreeBuilder::buildTree(this); + std::unique_ptr<QbsRootProjectNode> newRoot = Internal::QbsNodeTreeBuilder::buildTree(this); setDisplayName(newRoot ? newRoot->displayName() : projectFilePath().toFileInfo().completeBaseName()); - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); } void QbsProject::handleRuleExecutionDone() diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index df327d7654..2b65d30c1d 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -197,7 +197,7 @@ static void createTree(const QmakePriFile *pri, QmakePriFileNode *node, const Fi } } -QmakeProFileNode *QmakeNodeTreeBuilder::buildTree(QmakeProject *project) +std::unique_ptr<QmakeProFileNode> QmakeNodeTreeBuilder::buildTree(QmakeProject *project) { // Remove qmake implementation details that litter up the project data: Target *t = project->activeTarget(); @@ -206,8 +206,9 @@ QmakeProFileNode *QmakeNodeTreeBuilder::buildTree(QmakeProject *project) const FileNameList toExclude = qt ? qt->directoriesToIgnoreInProjectTree() : FileNameList(); - auto root = new QmakeProFileNode(project, project->projectFilePath(), project->rootProFile()); - createTree(project->rootProFile(), root, toExclude); + auto root = std::make_unique<QmakeProFileNode>(project, project->projectFilePath(), + project->rootProFile()); + createTree(project->rootProFile(), root.get(), toExclude); return root; } diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.h b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.h index 48cb9fcd48..2206ac904e 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.h +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.h @@ -37,7 +37,7 @@ namespace QmakeProjectManager { class QmakeNodeTreeBuilder { public: - static QmakeProFileNode *buildTree(QmakeProject *project); + static std::unique_ptr<QmakeProFileNode> buildTree(QmakeProject *project); }; } // namespace QmakeProjectManager diff --git a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp index 3277babc49..4f9e6581cf 100644 --- a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp +++ b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp @@ -55,14 +55,14 @@ public: { ProjectExplorer::FileNode *fileNode = new ProjectExplorer::FileNode(file, ProjectExplorer::FileType::Source, false); - DummyProjectNode *root = new DummyProjectNode(file); + auto root = std::make_unique<DummyProjectNode>(file); root->addNode(fileNode); fileNode = new ProjectExplorer::FileNode( Utils::FileName::fromLatin1( ":/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp"), ProjectExplorer::FileType::Source, false); root->addNode(fileNode); - setRootProjectNode(root); + setRootProjectNode(std::move(root)); } bool needsConfiguration() const final { return false; } diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index d0dd28e0cf..2711afb394 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -359,7 +359,7 @@ void QmlProject::generateProjectTree() if (!m_projectItem) return; - auto newRoot = new Internal::QmlProjectNode(this); + auto newRoot = std::make_unique<Internal::QmlProjectNode>(this); for (const QString &f : m_projectItem.data()->files()) { const Utils::FileName fileName = Utils::FileName::fromString(f); @@ -369,7 +369,7 @@ void QmlProject::generateProjectTree() } newRoot->addNestedNode(new FileNode(projectFilePath(), FileType::Project, false)); - setRootProjectNode(newRoot); + setRootProjectNode(std::move(newRoot)); refreshTargetDirectory(); } |