diff options
Diffstat (limited to 'src/plugins/projectexplorer/project.cpp')
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 09475e24b8..32cbcdc218 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -52,6 +52,7 @@ #include <utils/qtcassert.h> #include <limits> +#include <memory> /*! \class ProjectExplorer::Project @@ -126,20 +127,25 @@ bool ProjectDocument::reload(QString *errorString, Core::IDocument::ReloadFlag f class ProjectPrivate { public: - ProjectPrivate(Core::IDocument *document) : m_document(document) { } + ProjectPrivate(const QString &mimeType, const Utils::FileName &fileName, + const ProjectDocument::ProjectCallback &callback) + { + m_document = std::make_unique<ProjectDocument>(mimeType, fileName, callback); + } + ~ProjectPrivate(); Core::Id m_id; - Core::IDocument *m_document = nullptr; + std::unique_ptr<Core::IDocument> m_document; ProjectNode *m_rootProjectNode = nullptr; - ContainerNode *m_containerNode = nullptr; + std::unique_ptr<ContainerNode> m_containerNode; QList<Target *> m_targets; Target *m_activeTarget = nullptr; EditorConfiguration m_editorConfiguration; Core::Context m_projectContext; Core::Context m_projectLanguages; QVariantMap m_pluginSettings; - Internal::UserFileAccessor *m_accessor = nullptr; + std::unique_ptr<Internal::UserFileAccessor> m_accessor; QString m_displayName; @@ -151,32 +157,28 @@ public: ProjectPrivate::~ProjectPrivate() { + qDeleteAll(m_targets); + // Make sure our root node is null when deleting ProjectNode *oldNode = m_rootProjectNode; m_rootProjectNode = nullptr; delete oldNode; - - delete m_containerNode; - - delete m_document; - delete m_accessor; } Project::Project(const QString &mimeType, const Utils::FileName &fileName, const ProjectDocument::ProjectCallback &callback) : - d(new ProjectPrivate(new ProjectDocument(mimeType, fileName, callback))) + d(new ProjectPrivate(mimeType, fileName, callback)) { d->m_macroExpander.setDisplayName(tr("Project")); d->m_macroExpander.registerVariable("Project:Name", tr("Project Name"), [this] { return displayName(); }); // Only set up containernode after d is set so that it will find the project directory! - d->m_containerNode = new ContainerNode(this); + d->m_containerNode = std::make_unique<ContainerNode>(this); } Project::~Project() { - qDeleteAll(d->m_targets); delete d; } @@ -194,7 +196,7 @@ Core::Id Project::id() const Core::IDocument *Project::document() const { QTC_CHECK(d->m_document); - return d->m_document; + return d->m_document.get(); } Utils::FileName Project::projectFilePath() const @@ -493,7 +495,7 @@ void Project::setRootProjectNode(ProjectNode *root) ProjectNode *oldNode = d->m_rootProjectNode; d->m_rootProjectNode = root; if (root) { - root->setParentFolderNode(d->m_containerNode); + root->setParentFolderNode(d->m_containerNode.get()); // Only announce non-null root, null is only used when project is destroyed. // In that case SessionManager::projectRemoved() triggers the update. ProjectTree::emitSubtreeChanged(root); @@ -531,7 +533,7 @@ void Project::saveSettings() { emit aboutToSaveSettings(); if (!d->m_accessor) - d->m_accessor = new Internal::UserFileAccessor(this); + d->m_accessor = std::make_unique<Internal::UserFileAccessor>(this); if (!targets().isEmpty()) d->m_accessor->saveSettings(toMap(), Core::ICore::mainWindow()); } @@ -539,7 +541,7 @@ void Project::saveSettings() Project::RestoreResult Project::restoreSettings(QString *errorMessage) { if (!d->m_accessor) - d->m_accessor = new Internal::UserFileAccessor(this); + d->m_accessor = std::make_unique<Internal::UserFileAccessor>(this); QVariantMap map(d->m_accessor->restoreSettings(Core::ICore::mainWindow())); RestoreResult result = fromMap(map, errorMessage); if (result == RestoreResult::Ok) @@ -633,7 +635,7 @@ ProjectNode *Project::rootProjectNode() const ContainerNode *Project::containerNode() const { - return d->m_containerNode; + return d->m_containerNode.get(); } Project::RestoreResult Project::fromMap(const QVariantMap &map, QString *errorMessage) |