ProjectExplorer: Remove unusual {Arguments,WorkingDir}Aspect

Follows suite to 2cc4967 to have the user side code more uniform.
Most of the extra verbosity (setMacroExpander) can go away again
when distributing the expander via the "owning" AspectContainer.

Change-Id: I9e80cb235f0a4a9ebee601dd638aefbaa41efc1b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2023-07-05 08:56:05 +02:00
parent 7e0534c301
commit 739f835ef1
19 changed files with 128 additions and 46 deletions

View File

@@ -53,7 +53,8 @@ public:
auto envAspect = addAspect<EnvironmentAspect>();
envAspect->addSupportedBaseEnvironment(Tr::tr("Clean Environment"), {});
auto extraAppArgsAspect = addAspect<ArgumentsAspect>(macroExpander());
auto extraAppArgsAspect = addAspect<ArgumentsAspect>();
extraAppArgsAspect->setMacroExpander(macroExpander());
connect(extraAppArgsAspect, &BaseAspect::changed, this, [target, extraAppArgsAspect] {
if (target->buildConfigurations().first()->buildType() == BuildConfiguration::BuildType::Release) {

View File

@@ -29,8 +29,11 @@ public:
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setPlaceHolderText(Tr::tr("Unknown"));
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
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<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
setDefaultDisplayName(RunConfigurationFactory::decoratedTargetName(
Tr::tr("Custom Executable"), target));

View File

@@ -82,8 +82,14 @@ QdbRunConfiguration::QdbRunConfiguration(Target *target, Id id)
auto envAspect = addAspect<RemoteLinux::RemoteLinuxEnvironmentAspect>(target);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
addAspect<FullCommandLineAspect>(this);
setUpdater([this, target, exeAspect, symbolsAspect] {

View File

@@ -38,9 +38,13 @@ HaskellRunConfiguration::HaskellRunConfiguration(Target *target, Utils::Id id)
envAspect->setSupportForBuildEnvironment(target);
addAspect<HaskellExecutableAspect>();
addAspect<ArgumentsAspect>(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
workingDirAspect->setDefaultWorkingDirectory(target->project()->projectDirectory());
workingDirAspect->setVisible(false);

View File

@@ -61,7 +61,8 @@ IosRunConfiguration::IosRunConfiguration(Target *target, Id id)
auto executableAspect = addAspect<ExecutableAspect>();
executableAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander());
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
m_deviceTypeAspect = addAspect<IosDeviceTypeAspect>(this);

View File

@@ -29,8 +29,13 @@ public:
auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
addAspect<TerminalAspect>();
auto libAspect = addAspect<UseLibraryPathsAspect>();

View File

@@ -32,7 +32,8 @@ private:
NimbleBuildStep::NimbleBuildStep(BuildStepList *parentList, Id id)
: AbstractProcessStep(parentList, id)
{
auto arguments = addAspect<ArgumentsAspect>(macroExpander());
auto arguments = addAspect<ArgumentsAspect>();
arguments->setMacroExpander(macroExpander());
arguments->setSettingsKey(Constants::C_NIMBLEBUILDSTEP_ARGUMENTS);
arguments->setResetter([this] { return defaultArguments(); });
arguments->setArguments(defaultArguments());

View File

@@ -32,8 +32,12 @@ public:
auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
addAspect<TerminalAspect>();
setUpdater([this] {
@@ -70,9 +74,14 @@ public:
exeAspect->setDeviceSelector(target, ExecutableAspect::BuildDevice);
exeAspect->setExecutable(Nim::nimblePathFromKit(target->kit()));
addAspect<ArgumentsAspect>(macroExpander())->setArguments("test");
addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr)
->setDefaultWorkingDirectory(project()->projectDirectory());
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
argsAspect->setArguments("test");
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setDefaultWorkingDirectory(project()->projectDirectory());
addAspect<TerminalAspect>();
setDisplayName(Tr::tr("Nimble Test"));

View File

@@ -32,8 +32,12 @@ public:
auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
addAspect<TerminalAspect>();
setDisplayName(Tr::tr("Current Build Target"));

View File

@@ -34,8 +34,13 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe
exeAspect->setExpectedKind(PathChooser::ExistingCommand);
exeAspect->setEnvironment(envAspect->environment());
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
addAspect<TerminalAspect>();
connect(envAspect, &EnvironmentAspect::environmentChanged, this, [exeAspect, envAspect] {

View File

@@ -48,8 +48,13 @@ DesktopRunConfiguration::DesktopRunConfiguration(Target *target, Id id, Kind kin
auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
addAspect<TerminalAspect>();
auto libAspect = addAspect<UseLibraryPathsAspect>();

View File

@@ -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.

View File

@@ -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<QString()> &resetter);
void resetArguments();
void setMacroExpander(const Utils::MacroExpander *macroExpander);
struct Data : BaseAspect::Data
{

View File

@@ -201,9 +201,12 @@ PythonRunConfiguration::PythonRunConfiguration(Target *target, Id id)
auto envAspect = addAspect<EnvironmentAspect>();
envAspect->setSupportForBuildEnvironment(target);
auto argumentsAspect = addAspect<ArgumentsAspect>(macroExpander());
auto argumentsAspect = addAspect<ArgumentsAspect>();
argumentsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr);
addAspect<TerminalAspect>();
if (HostOsInfo::isAnyUnixHost())

View File

@@ -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<ArgumentsAspect>(macroExpander());
m_userArgs = addAspect<ArgumentsAspect>();
m_userArgs->setMacroExpander(macroExpander());
m_userArgs->setSettingsKey(QMAKE_ARGUMENTS_KEY);
m_userArgs->setLabelText(Tr::tr("Additional arguments:"));

View File

@@ -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<ArgumentsAspect>(macroExpander());
auto argumentAspect = addAspect<ArgumentsAspect>();
argumentAspect->setMacroExpander(macroExpander());
argumentAspect->setSettingsKey(Constants::QML_VIEWER_ARGUMENTS_KEY);
setCommandLineGetter([this, target] {

View File

@@ -42,8 +42,13 @@ public:
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
addAspect<TerminalAspect>();
auto libAspect = addAspect<StringAspect>();
@@ -75,8 +80,6 @@ public:
}
};
// QnxRunConfigurationFactory
QnxRunConfigurationFactory::QnxRunConfigurationFactory()

View File

@@ -46,8 +46,13 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar
symbolsAspect->setSettingsKey("RemoteLinux.CustomRunConfig.LocalExecutable");
symbolsAspect->setLabelText(Tr::tr("Local executable:"));
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
if (HostOsInfo::isAnyUnixHost())
addAspect<TerminalAspect>();
if (HostOsInfo::isAnyUnixHost())

View File

@@ -47,8 +47,13 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id)
symbolsAspect->setLabelText(Tr::tr("Executable on host:"));
symbolsAspect->setDisplayStyle(SymbolFileAspect::LabelDisplay);
addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
auto argsAspect = addAspect<ArgumentsAspect>();
argsAspect->setMacroExpander(macroExpander());
auto workingDirAspect = addAspect<WorkingDirectoryAspect>();
workingDirAspect->setMacroExpander(macroExpander());
workingDirAspect->setEnvironment(envAspect);
if (HostOsInfo::isAnyUnixHost())
addAspect<TerminalAspect>();
if (HostOsInfo::isAnyUnixHost())