From a8a68b024a120802345f154a340a64ac3abd59eb Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 7 Jul 2023 17:33:56 +0200 Subject: [PATCH] ProjectExplorer: Use less indirection for BuildConfiguration aspects Change-Id: I6c219bc35edccd723f39e71d52b246060c1c424e Reviewed-by: Christian Kandeler --- .../cmakebuildconfiguration.h | 2 +- src/plugins/projectexplorer/buildaspects.cpp | 5 +- src/plugins/projectexplorer/buildaspects.h | 3 +- .../projectexplorer/buildconfiguration.cpp | 50 +++++++++---------- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index cd019042d45..cee3ae64baa 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -79,7 +79,7 @@ public: void setInitialCMakeArguments(const QStringList &args); void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false); - ProjectExplorer::BuildDirectoryAspect buildDir{this}; + ProjectExplorer::BuildDirectoryAspect buildDir{this, this}; Internal::InitialCMakeArgumentsAspect initialCMakeArguments{this}; Utils::StringAspect additionalCMakeOptions{this}; Utils::FilePathAspect sourceDirectory{this}; diff --git a/src/plugins/projectexplorer/buildaspects.cpp b/src/plugins/projectexplorer/buildaspects.cpp index 2ffcbc7ac8a..3577aa9ec04 100644 --- a/src/plugins/projectexplorer/buildaspects.cpp +++ b/src/plugins/projectexplorer/buildaspects.cpp @@ -36,8 +36,9 @@ public: QPointer problemLabel; }; -BuildDirectoryAspect::BuildDirectoryAspect(const BuildConfiguration *bc) - : d(new Private(bc->target())) +BuildDirectoryAspect::BuildDirectoryAspect(AspectContainer *container, const BuildConfiguration *bc) + : FilePathAspect(container), + d(new Private(bc->target())) { setSettingsKey("ProjectExplorer.BuildConfiguration.BuildDirectory"); setLabelText(Tr::tr("Build directory:")); diff --git a/src/plugins/projectexplorer/buildaspects.h b/src/plugins/projectexplorer/buildaspects.h index bcc8987cd0c..10043b4ec62 100644 --- a/src/plugins/projectexplorer/buildaspects.h +++ b/src/plugins/projectexplorer/buildaspects.h @@ -14,8 +14,9 @@ class BuildConfiguration; class PROJECTEXPLORER_EXPORT BuildDirectoryAspect : public Utils::FilePathAspect { Q_OBJECT + public: - explicit BuildDirectoryAspect(const BuildConfiguration *bc); + explicit BuildDirectoryAspect(Utils::AspectContainer *container, const BuildConfiguration *bc); ~BuildDirectoryAspect() override; void allowInSourceBuilds(const Utils::FilePath &sourceDir); diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 18a22a421af..e05f863ea18 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -128,15 +128,17 @@ class BuildConfigurationPrivate public: BuildConfigurationPrivate(BuildConfiguration *bc) : m_buildSteps(bc, Constants::BUILDSTEPS_BUILD), - m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN) + m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN), + m_buildDirectoryAspect(bc, bc), + m_tooltipAspect(bc) {} bool m_clearSystemEnvironment = false; EnvironmentItems m_userEnvironmentChanges; BuildStepList m_buildSteps; BuildStepList m_cleanSteps; - BuildDirectoryAspect *m_buildDirectoryAspect = nullptr; - StringAspect *m_tooltipAspect = nullptr; + BuildDirectoryAspect m_buildDirectoryAspect; + StringAspect m_tooltipAspect; FilePath m_lastEmittedBuildDirectory; mutable Environment m_cachedEnvironment; QString m_configWidgetDisplayName; @@ -190,24 +192,22 @@ BuildConfiguration::BuildConfiguration(Target *target, Utils::Id id) connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged, this, &BuildConfiguration::updateCacheAndEmitEnvironmentChanged); - d->m_buildDirectoryAspect = addAspect(this); - d->m_buildDirectoryAspect->setBaseFileName(target->project()->projectDirectory()); - d->m_buildDirectoryAspect->setEnvironment(environment()); - d->m_buildDirectoryAspect->setMacroExpanderProvider([this] { return macroExpander(); }); - connect(d->m_buildDirectoryAspect, &StringAspect::changed, + d->m_buildDirectoryAspect.setBaseFileName(target->project()->projectDirectory()); + d->m_buildDirectoryAspect.setEnvironment(environment()); + d->m_buildDirectoryAspect.setMacroExpanderProvider([this] { return macroExpander(); }); + connect(&d->m_buildDirectoryAspect, &StringAspect::changed, this, &BuildConfiguration::emitBuildDirectoryChanged); connect(this, &BuildConfiguration::environmentChanged, this, [this] { - d->m_buildDirectoryAspect->setEnvironment(environment()); + d->m_buildDirectoryAspect.setEnvironment(environment()); emit this->target()->buildEnvironmentChanged(this); }); - d->m_tooltipAspect = addAspect(); - d->m_tooltipAspect->setLabelText(Tr::tr("Tooltip in target selector:")); - d->m_tooltipAspect->setToolTip(Tr::tr("Appears as a tooltip when hovering the build configuration")); - d->m_tooltipAspect->setDisplayStyle(StringAspect::LineEditDisplay); - d->m_tooltipAspect->setSettingsKey("ProjectExplorer.BuildConfiguration.Tooltip"); - connect(d->m_tooltipAspect, &StringAspect::changed, this, [this] { - setToolTip(d->m_tooltipAspect->value()); + d->m_tooltipAspect.setLabelText(Tr::tr("Tooltip in target selector:")); + d->m_tooltipAspect.setToolTip(Tr::tr("Appears as a tooltip when hovering the build configuration")); + d->m_tooltipAspect.setDisplayStyle(StringAspect::LineEditDisplay); + d->m_tooltipAspect.setSettingsKey("ProjectExplorer.BuildConfiguration.Tooltip"); + connect(&d->m_tooltipAspect, &StringAspect::changed, this, [this] { + setToolTip(d->m_tooltipAspect()); }); connect(target, &Target::parsingStarted, this, &BuildConfiguration::enabledChanged); @@ -228,7 +228,7 @@ BuildConfiguration::~BuildConfiguration() FilePath BuildConfiguration::buildDirectory() const { FilePath path = FilePath::fromUserInput( - environment().expandVariables(d->m_buildDirectoryAspect->value().trimmed())); + environment().expandVariables(d->m_buildDirectoryAspect.value().trimmed())); // FIXME: If the macro expander is expected to be able to do some // structual changes, the fromUserInput() above might already have // mis-parsed. Should this here be encapsulated in the FilePathAspect? @@ -242,17 +242,17 @@ FilePath BuildConfiguration::buildDirectory() const FilePath BuildConfiguration::rawBuildDirectory() const { - return d->m_buildDirectoryAspect->filePath(); + return d->m_buildDirectoryAspect(); } void BuildConfiguration::setBuildDirectory(const FilePath &dir) { - if (dir == d->m_buildDirectoryAspect->filePath()) + if (dir == d->m_buildDirectoryAspect()) return; - d->m_buildDirectoryAspect->setValue(dir); + d->m_buildDirectoryAspect.setValue(dir); const FilePath fixedDir = BuildDirectoryAspect::fixupDir(buildDirectory()); if (!fixedDir.isEmpty()) - d->m_buildDirectoryAspect->setValue(fixedDir); + d->m_buildDirectoryAspect.setValue(fixedDir); emitBuildDirectoryChanged(); } @@ -425,7 +425,7 @@ bool BuildConfiguration::fromMap(const QVariantMap &map) d->m_customParsers = transform(map.value(CUSTOM_PARSERS_KEY).toList(), &Utils::Id::fromSetting); const bool res = ProjectConfiguration::fromMap(map); - setToolTip(d->m_tooltipAspect->value()); + setToolTip(d->m_tooltipAspect()); return res; } @@ -449,7 +449,7 @@ void BuildConfiguration::emitBuildDirectoryChanged() ProjectExplorer::BuildDirectoryAspect *BuildConfiguration::buildDirectoryAspect() const { - return d->m_buildDirectoryAspect; + return &d->m_buildDirectoryAspect; } void BuildConfiguration::setConfigWidgetDisplayName(const QString &display) @@ -459,7 +459,7 @@ void BuildConfiguration::setConfigWidgetDisplayName(const QString &display) void BuildConfiguration::setBuildDirectoryHistoryCompleter(const QString &history) { - d->m_buildDirectoryAspect->setHistoryCompleter(history); + d->m_buildDirectoryAspect.setHistoryCompleter(history); } void BuildConfiguration::setConfigWidgetHasFrame(bool configWidgetHasFrame) @@ -469,7 +469,7 @@ void BuildConfiguration::setConfigWidgetHasFrame(bool configWidgetHasFrame) void BuildConfiguration::setBuildDirectorySettingsKey(const QString &key) { - d->m_buildDirectoryAspect->setSettingsKey(key); + d->m_buildDirectoryAspect.setSettingsKey(key); } Environment BuildConfiguration::baseEnvironment() const