diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp index 157f6f5afca..e481f1eda44 100644 --- a/src/plugins/android/androidrunconfiguration.cpp +++ b/src/plugins/android/androidrunconfiguration.cpp @@ -53,7 +53,8 @@ public: auto envAspect = addAspect(); envAspect->addSupportedBaseEnvironment(Tr::tr("Clean Environment"), {}); - auto extraAppArgsAspect = addAspect(macroExpander()); + auto extraAppArgsAspect = addAspect(); + extraAppArgsAspect->setMacroExpander(macroExpander()); connect(extraAppArgsAspect, &BaseAspect::changed, this, [target, extraAppArgsAspect] { if (target->buildConfigurations().first()->buildType() == BuildConfiguration::BuildType::Release) { diff --git a/src/plugins/baremetal/baremetalrunconfiguration.cpp b/src/plugins/baremetal/baremetalrunconfiguration.cpp index b4a10baaf5a..8d3f042a713 100644 --- a/src/plugins/baremetal/baremetalrunconfiguration.cpp +++ b/src/plugins/baremetal/baremetalrunconfiguration.cpp @@ -29,8 +29,11 @@ public: exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); exeAspect->setPlaceHolderText(Tr::tr("Unknown")); - addAspect(macroExpander()); - addAspect(macroExpander(), nullptr); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); setUpdater([this, exeAspect] { const BuildTargetInfo bti = buildTargetInfo(); @@ -55,8 +58,11 @@ public: exeAspect->setHistoryCompleter("BareMetal.CustomRunConfig.History"); exeAspect->setExpectedKind(PathChooser::Any); - addAspect(macroExpander()); - addAspect(macroExpander(), nullptr); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); setDefaultDisplayName(RunConfigurationFactory::decoratedTargetName( Tr::tr("Custom Executable"), target)); diff --git a/src/plugins/boot2qt/qdbrunconfiguration.cpp b/src/plugins/boot2qt/qdbrunconfiguration.cpp index 28853877642..efc4886b3bf 100644 --- a/src/plugins/boot2qt/qdbrunconfiguration.cpp +++ b/src/plugins/boot2qt/qdbrunconfiguration.cpp @@ -82,8 +82,14 @@ QdbRunConfiguration::QdbRunConfiguration(Target *target, Id id) auto envAspect = addAspect(target); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + + workingDirAspect->setEnvironment(envAspect); + addAspect(this); setUpdater([this, target, exeAspect, symbolsAspect] { diff --git a/src/plugins/haskell/haskellrunconfiguration.cpp b/src/plugins/haskell/haskellrunconfiguration.cpp index 76d25e557c3..fec7f73e966 100644 --- a/src/plugins/haskell/haskellrunconfiguration.cpp +++ b/src/plugins/haskell/haskellrunconfiguration.cpp @@ -38,9 +38,13 @@ HaskellRunConfiguration::HaskellRunConfiguration(Target *target, Utils::Id id) envAspect->setSupportForBuildEnvironment(target); addAspect(); - addAspect(macroExpander()); - auto workingDirAspect = addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); workingDirAspect->setDefaultWorkingDirectory(target->project()->projectDirectory()); workingDirAspect->setVisible(false); diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 15e774248ea..dda93209270 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -61,7 +61,8 @@ IosRunConfiguration::IosRunConfiguration(Target *target, Id id) auto executableAspect = addAspect(); executableAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); - addAspect(macroExpander()); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); m_deviceTypeAspect = addAspect(this); diff --git a/src/plugins/mesonprojectmanager/mesonrunconfiguration.cpp b/src/plugins/mesonprojectmanager/mesonrunconfiguration.cpp index e75d4c83f7a..fee6f100ee7 100644 --- a/src/plugins/mesonprojectmanager/mesonrunconfiguration.cpp +++ b/src/plugins/mesonprojectmanager/mesonrunconfiguration.cpp @@ -29,8 +29,13 @@ public: auto exeAspect = addAspect(); exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); + addAspect(); auto libAspect = addAspect(); diff --git a/src/plugins/nim/project/nimblebuildstep.cpp b/src/plugins/nim/project/nimblebuildstep.cpp index d432db5154e..ca9b5a4b2a8 100644 --- a/src/plugins/nim/project/nimblebuildstep.cpp +++ b/src/plugins/nim/project/nimblebuildstep.cpp @@ -32,7 +32,8 @@ private: NimbleBuildStep::NimbleBuildStep(BuildStepList *parentList, Id id) : AbstractProcessStep(parentList, id) { - auto arguments = addAspect(macroExpander()); + auto arguments = addAspect(); + arguments->setMacroExpander(macroExpander()); arguments->setSettingsKey(Constants::C_NIMBLEBUILDSTEP_ARGUMENTS); arguments->setResetter([this] { return defaultArguments(); }); arguments->setArguments(defaultArguments()); diff --git a/src/plugins/nim/project/nimblerunconfiguration.cpp b/src/plugins/nim/project/nimblerunconfiguration.cpp index baf4e001975..97b4e3c82a0 100644 --- a/src/plugins/nim/project/nimblerunconfiguration.cpp +++ b/src/plugins/nim/project/nimblerunconfiguration.cpp @@ -32,8 +32,12 @@ public: auto exeAspect = addAspect(); exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + addAspect(); setUpdater([this] { @@ -70,9 +74,14 @@ public: exeAspect->setDeviceSelector(target, ExecutableAspect::BuildDevice); exeAspect->setExecutable(Nim::nimblePathFromKit(target->kit())); - addAspect(macroExpander())->setArguments("test"); - addAspect(macroExpander(), nullptr) - ->setDefaultWorkingDirectory(project()->projectDirectory()); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + argsAspect->setArguments("test"); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setDefaultWorkingDirectory(project()->projectDirectory()); + addAspect(); setDisplayName(Tr::tr("Nimble Test")); diff --git a/src/plugins/nim/project/nimrunconfiguration.cpp b/src/plugins/nim/project/nimrunconfiguration.cpp index 790557c2117..fa60694be24 100644 --- a/src/plugins/nim/project/nimrunconfiguration.cpp +++ b/src/plugins/nim/project/nimrunconfiguration.cpp @@ -32,8 +32,12 @@ public: auto exeAspect = addAspect(); exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + addAspect(); setDisplayName(Tr::tr("Current Build Target")); diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index c8f4a5a42dc..37b112ac8fe 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -34,8 +34,13 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe exeAspect->setExpectedKind(PathChooser::ExistingCommand); exeAspect->setEnvironment(envAspect->environment()); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); + addAspect(); connect(envAspect, &EnvironmentAspect::environmentChanged, this, [exeAspect, envAspect] { diff --git a/src/plugins/projectexplorer/desktoprunconfiguration.cpp b/src/plugins/projectexplorer/desktoprunconfiguration.cpp index 8d7329a1d54..ce7c6ed0f69 100644 --- a/src/plugins/projectexplorer/desktoprunconfiguration.cpp +++ b/src/plugins/projectexplorer/desktoprunconfiguration.cpp @@ -48,8 +48,13 @@ DesktopRunConfiguration::DesktopRunConfiguration(Target *target, Id id, Kind kin auto exeAspect = addAspect(); exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); + addAspect(); auto libAspect = addAspect(); diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index ed7b2cb8273..59e814a56b6 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -47,7 +47,8 @@ namespace ProjectExplorer { The initial value is provided as a hint from the build systems. */ -TerminalAspect::TerminalAspect() +TerminalAspect::TerminalAspect(AspectContainer *container) + : BaseAspect(container) { setDisplayName(Tr::tr("Terminal")); setId("TerminalAspect"); @@ -152,15 +153,24 @@ bool TerminalAspect::isUserSet() const working directory for running the executable. */ -WorkingDirectoryAspect::WorkingDirectoryAspect(const MacroExpander *expander, - EnvironmentAspect *envAspect) - : m_envAspect(envAspect), m_macroExpander(expander) +WorkingDirectoryAspect::WorkingDirectoryAspect(AspectContainer *container) + : BaseAspect(container) { setDisplayName(Tr::tr("Working Directory")); setId("WorkingDirectoryAspect"); setSettingsKey("RunConfiguration.WorkingDirectory"); } +void WorkingDirectoryAspect::setMacroExpander(const MacroExpander *expander) +{ + m_macroExpander = expander; +} + +void WorkingDirectoryAspect::setEnvironment(EnvironmentAspect *envAspect) +{ + m_envAspect = envAspect; +} + /*! \reimp */ @@ -297,8 +307,8 @@ PathChooser *WorkingDirectoryAspect::pathChooser() const arguments for an executable. */ -ArgumentsAspect::ArgumentsAspect(const MacroExpander *macroExpander) - : m_macroExpander(macroExpander) +ArgumentsAspect::ArgumentsAspect(AspectContainer *container) + : BaseAspect(container) { setDisplayName(Tr::tr("Arguments")); setId("ArgumentsAspect"); @@ -309,6 +319,11 @@ ArgumentsAspect::ArgumentsAspect(const MacroExpander *macroExpander) m_labelText = Tr::tr("Command line arguments:"); } +void ArgumentsAspect::setMacroExpander(const MacroExpander *expander) +{ + m_macroExpander = expander; +} + /*! Returns the main value of this aspect. diff --git a/src/plugins/projectexplorer/runconfigurationaspects.h b/src/plugins/projectexplorer/runconfigurationaspects.h index 35081838934..80b89cf7b72 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.h +++ b/src/plugins/projectexplorer/runconfigurationaspects.h @@ -27,7 +27,7 @@ class PROJECTEXPLORER_EXPORT TerminalAspect : public Utils::BaseAspect Q_OBJECT public: - TerminalAspect(); + explicit TerminalAspect(Utils::AspectContainer *container = nullptr); void addToLayout(Layouting::LayoutItem &parent) override; @@ -59,8 +59,7 @@ class PROJECTEXPLORER_EXPORT WorkingDirectoryAspect : public Utils::BaseAspect Q_OBJECT public: - explicit WorkingDirectoryAspect(const Utils::MacroExpander *expander, - EnvironmentAspect *envAspect); + explicit WorkingDirectoryAspect(Utils::AspectContainer *container = nullptr); void addToLayout(Layouting::LayoutItem &parent) override; @@ -69,6 +68,8 @@ public: Utils::FilePath unexpandedWorkingDirectory() const; void setDefaultWorkingDirectory(const Utils::FilePath &defaultWorkingDirectory); Utils::PathChooser *pathChooser() const; + void setMacroExpander(const Utils::MacroExpander *expander); + void setEnvironment(EnvironmentAspect *envAspect); private: void fromMap(const QVariantMap &map) override; @@ -89,7 +90,7 @@ class PROJECTEXPLORER_EXPORT ArgumentsAspect : public Utils::BaseAspect Q_OBJECT public: - explicit ArgumentsAspect(const Utils::MacroExpander *macroExpander); + explicit ArgumentsAspect(Utils::AspectContainer *container = nullptr); void addToLayout(Layouting::LayoutItem &parent) override; @@ -100,6 +101,7 @@ public: void setLabelText(const QString &labelText); void setResetter(const std::function &resetter); void resetArguments(); + void setMacroExpander(const Utils::MacroExpander *macroExpander); struct Data : BaseAspect::Data { diff --git a/src/plugins/python/pythonrunconfiguration.cpp b/src/plugins/python/pythonrunconfiguration.cpp index 151895449b3..267036e63e2 100644 --- a/src/plugins/python/pythonrunconfiguration.cpp +++ b/src/plugins/python/pythonrunconfiguration.cpp @@ -201,9 +201,12 @@ PythonRunConfiguration::PythonRunConfiguration(Target *target, Id id) auto envAspect = addAspect(); envAspect->setSupportForBuildEnvironment(target); - auto argumentsAspect = addAspect(macroExpander()); + auto argumentsAspect = addAspect(); + argumentsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); - addAspect(macroExpander(), nullptr); addAspect(); if (HostOsInfo::isAnyUnixHost()) diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 27e29e497e8..4821b398382 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -69,7 +69,8 @@ QMakeStep::QMakeStep(BuildStepList *bsl, Id id) m_buildType->addOption(Tr::tr("Debug")); m_buildType->addOption(Tr::tr("Release")); - m_userArgs = addAspect(macroExpander()); + m_userArgs = addAspect(); + m_userArgs->setMacroExpander(macroExpander()); m_userArgs->setSettingsKey(QMAKE_ARGUMENTS_KEY); m_userArgs->setLabelText(Tr::tr("Additional arguments:")); diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index e64ebccf006..06b6f35c078 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -77,7 +77,8 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id) m_qmlViewerAspect->setHistoryCompleter("QmlProjectManager.viewer.history"); m_qmlViewerAspect->setSettingsKey(Constants::QML_VIEWER_KEY); - auto argumentAspect = addAspect(macroExpander()); + auto argumentAspect = addAspect(); + argumentAspect->setMacroExpander(macroExpander()); argumentAspect->setSettingsKey(Constants::QML_VIEWER_ARGUMENTS_KEY); setCommandLineGetter([this, target] { diff --git a/src/plugins/qnx/qnxrunconfiguration.cpp b/src/plugins/qnx/qnxrunconfiguration.cpp index 3b389049cf0..96245e95017 100644 --- a/src/plugins/qnx/qnxrunconfiguration.cpp +++ b/src/plugins/qnx/qnxrunconfiguration.cpp @@ -42,8 +42,13 @@ public: auto envAspect = addAspect(target); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); + addAspect(); auto libAspect = addAspect(); @@ -75,8 +80,6 @@ public: } }; - - // QnxRunConfigurationFactory QnxRunConfigurationFactory::QnxRunConfigurationFactory() diff --git a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp index a2707180260..4d124a6be55 100644 --- a/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxcustomrunconfiguration.cpp @@ -46,8 +46,13 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar symbolsAspect->setSettingsKey("RemoteLinux.CustomRunConfig.LocalExecutable"); symbolsAspect->setLabelText(Tr::tr("Local executable:")); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); + if (HostOsInfo::isAnyUnixHost()) addAspect(); if (HostOsInfo::isAnyUnixHost()) diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp index 8dcb286589c..9ea2618c09c 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp @@ -47,8 +47,13 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id) symbolsAspect->setLabelText(Tr::tr("Executable on host:")); symbolsAspect->setDisplayStyle(SymbolFileAspect::LabelDisplay); - addAspect(macroExpander()); - addAspect(macroExpander(), envAspect); + auto argsAspect = addAspect(); + argsAspect->setMacroExpander(macroExpander()); + + auto workingDirAspect = addAspect(); + workingDirAspect->setMacroExpander(macroExpander()); + workingDirAspect->setEnvironment(envAspect); + if (HostOsInfo::isAnyUnixHost()) addAspect(); if (HostOsInfo::isAnyUnixHost())