summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2018-04-26 14:41:46 +0200
committerTobias Hunger <tobias.hunger@qt.io>2018-05-02 11:34:35 +0000
commit5754d5accf10ce7cc01927188c3e6a28c469368b (patch)
tree8899438063530c7eaeafa86e740852f1ad642752 /src
parent1f55ba9012eea79fafedddf270ef401aa6988298 (diff)
downloadqt-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')
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsproject.cpp4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp7
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.h2
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp4
-rw-r--r--src/plugins/nim/project/nimproject.cpp4
-rw-r--r--src/plugins/projectexplorer/project.cpp22
-rw-r--r--src/plugins/projectexplorer/project.h2
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp4
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp8
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodetreebuilder.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp4
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp7
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodetreebuilder.h2
-rw-r--r--src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp4
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp4
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();
}