ProjectExplorer: Replace unusual ExecutableAspect constructor

... by an (only) slightly less weird setter.

Helps with a more uniform aspect API.

Task-number: QTCREATORBUG-29168
Change-Id: I40d2e878987ed7b817e08d250566bc548712749d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-06-29 17:45:09 +02:00
parent 914bc626e7
commit 2cc4967451
14 changed files with 89 additions and 70 deletions

View File

@@ -25,7 +25,8 @@ public:
explicit BareMetalRunConfiguration(Target *target, Id id) explicit BareMetalRunConfiguration(Target *target, Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
const auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); const auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setPlaceHolderText(Tr::tr("Unknown")); exeAspect->setPlaceHolderText(Tr::tr("Unknown"));
addAspect<ArgumentsAspect>(macroExpander()); addAspect<ArgumentsAspect>(macroExpander());
@@ -46,7 +47,8 @@ public:
explicit BareMetalCustomRunConfiguration(Target *target, Id id) explicit BareMetalCustomRunConfiguration(Target *target, Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
const auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); const auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setSettingsKey("BareMetal.CustomRunConfig.Executable"); exeAspect->setSettingsKey("BareMetal.CustomRunConfig.Executable");
exeAspect->setPlaceHolderText(Tr::tr("Unknown")); exeAspect->setPlaceHolderText(Tr::tr("Unknown"));
exeAspect->setReadOnly(false); exeAspect->setReadOnly(false);

View File

@@ -67,7 +67,8 @@ private:
QdbRunConfiguration::QdbRunConfiguration(Target *target, Id id) QdbRunConfiguration::QdbRunConfiguration(Target *target, Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setSettingsKey("QdbRunConfig.RemoteExecutable"); exeAspect->setSettingsKey("QdbRunConfig.RemoteExecutable");
exeAspect->setLabelText(Tr::tr("Executable on device:")); exeAspect->setLabelText(Tr::tr("Executable on device:"));
exeAspect->setPlaceHolderText(Tr::tr("Remote path not set")); exeAspect->setPlaceHolderText(Tr::tr("Remote path not set"));

View File

@@ -58,7 +58,8 @@ static IosDeviceType toIosDeviceType(const SimulatorInfo &device)
IosRunConfiguration::IosRunConfiguration(Target *target, Id id) IosRunConfiguration::IosRunConfiguration(Target *target, Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
auto executableAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto executableAspect = addAspect<ExecutableAspect>();
executableAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander()); addAspect<ArgumentsAspect>(macroExpander());

View File

@@ -26,7 +26,9 @@ public:
auto envAspect = addAspect<EnvironmentAspect>(); auto envAspect = addAspect<EnvironmentAspect>();
envAspect->setSupportForBuildEnvironment(target); envAspect->setSupportForBuildEnvironment(target);
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander()); addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect); addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
addAspect<TerminalAspect>(); addAspect<TerminalAspect>();

View File

@@ -29,7 +29,9 @@ public:
auto envAspect = addAspect<EnvironmentAspect>(); auto envAspect = addAspect<EnvironmentAspect>();
envAspect->setSupportForBuildEnvironment(target); envAspect->setSupportForBuildEnvironment(target);
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander()); addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect); addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
addAspect<TerminalAspect>(); addAspect<TerminalAspect>();
@@ -64,8 +66,10 @@ public:
NimbleTestConfiguration(ProjectExplorer::Target *target, Utils::Id id) NimbleTestConfiguration(ProjectExplorer::Target *target, Utils::Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
addAspect<ExecutableAspect>(target, ExecutableAspect::BuildDevice) auto exeAspect = addAspect<ExecutableAspect>();
->setExecutable(Nim::nimblePathFromKit(target->kit())); exeAspect->setDeviceSelector(target, ExecutableAspect::BuildDevice);
exeAspect->setExecutable(Nim::nimblePathFromKit(target->kit()));
addAspect<ArgumentsAspect>(macroExpander())->setArguments("test"); addAspect<ArgumentsAspect>(macroExpander())->setArguments("test");
addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr) addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr)
->setDefaultWorkingDirectory(project()->projectDirectory()); ->setDefaultWorkingDirectory(project()->projectDirectory());

View File

@@ -29,7 +29,9 @@ public:
auto envAspect = addAspect<EnvironmentAspect>(); auto envAspect = addAspect<EnvironmentAspect>();
envAspect->setSupportForBuildEnvironment(target); envAspect->setSupportForBuildEnvironment(target);
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander()); addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect); addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
addAspect<TerminalAspect>(); addAspect<TerminalAspect>();

View File

@@ -26,7 +26,8 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe
auto envAspect = addAspect<EnvironmentAspect>(); auto envAspect = addAspect<EnvironmentAspect>();
envAspect->setSupportForBuildEnvironment(target); envAspect->setSupportForBuildEnvironment(target);
auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::HostDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::HostDevice);
exeAspect->setSettingsKey("ProjectExplorer.CustomExecutableRunConfiguration.Executable"); exeAspect->setSettingsKey("ProjectExplorer.CustomExecutableRunConfiguration.Executable");
exeAspect->setReadOnly(false); exeAspect->setReadOnly(false);
exeAspect->setHistoryCompleter("Qt.CustomExecutable.History"); exeAspect->setHistoryCompleter("Qt.CustomExecutable.History");

View File

@@ -45,7 +45,9 @@ DesktopRunConfiguration::DesktopRunConfiguration(Target *target, Id id, Kind kin
auto envAspect = addAspect<EnvironmentAspect>(); auto envAspect = addAspect<EnvironmentAspect>();
envAspect->setSupportForBuildEnvironment(target); envAspect->setSupportForBuildEnvironment(target);
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
addAspect<ArgumentsAspect>(macroExpander()); addAspect<ArgumentsAspect>(macroExpander());
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect); addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
addAspect<TerminalAspect>(); addAspect<TerminalAspect>();

View File

@@ -495,8 +495,8 @@ void ArgumentsAspect::addToLayout(LayoutItem &builder)
by the build system's parsing results with an optional manual override. by the build system's parsing results with an optional manual override.
*/ */
ExecutableAspect::ExecutableAspect(Target *target, ExecutionDeviceSelector selector) ExecutableAspect::ExecutableAspect(AspectContainer *container)
: m_target(target), m_selector(selector) : BaseAspect(container)
{ {
setDisplayName(Tr::tr("Executable")); setDisplayName(Tr::tr("Executable"));
setId("ExecutableAspect"); setId("ExecutableAspect");
@@ -506,8 +506,6 @@ ExecutableAspect::ExecutableAspect(Target *target, ExecutionDeviceSelector selec
m_executable.setPlaceHolderText(Tr::tr("Enter the path to the executable")); m_executable.setPlaceHolderText(Tr::tr("Enter the path to the executable"));
m_executable.setLabelText(Tr::tr("Executable:")); m_executable.setLabelText(Tr::tr("Executable:"));
updateDevice();
connect(&m_executable, &StringAspect::changed, this, &ExecutableAspect::changed); connect(&m_executable, &StringAspect::changed, this, &ExecutableAspect::changed);
} }
@@ -533,8 +531,11 @@ ExecutableAspect::~ExecutableAspect()
m_alternativeExecutable = nullptr; m_alternativeExecutable = nullptr;
} }
void ExecutableAspect::updateDevice() void ExecutableAspect::setDeviceSelector(Target *target, ExecutionDeviceSelector selector)
{ {
m_target = target;
m_selector = selector;
const IDevice::ConstPtr dev = executionDevice(m_target, m_selector); const IDevice::ConstPtr dev = executionDevice(m_target, m_selector);
const OsType osType = dev ? dev->osType() : HostOsInfo::hostOs(); const OsType osType = dev ? dev->osType() : HostOsInfo::hostOs();

View File

@@ -155,12 +155,13 @@ class PROJECTEXPLORER_EXPORT ExecutableAspect : public Utils::BaseAspect
public: public:
enum ExecutionDeviceSelector { HostDevice, BuildDevice, RunDevice }; enum ExecutionDeviceSelector { HostDevice, BuildDevice, RunDevice };
explicit ExecutableAspect(Target *target, ExecutionDeviceSelector selector); explicit ExecutableAspect(Utils::AspectContainer *container = nullptr);
~ExecutableAspect() override; ~ExecutableAspect() override;
Utils::FilePath executable() const; Utils::FilePath executable() const;
void setExecutable(const Utils::FilePath &executable); void setExecutable(const Utils::FilePath &executable);
void setDeviceSelector(Target *target, ExecutionDeviceSelector selector);
void setSettingsKey(const QString &key); void setSettingsKey(const QString &key);
void makeOverridable(const QString &overridingKey, const QString &useOverridableKey); void makeOverridable(const QString &overridingKey, const QString &useOverridableKey);
void addToLayout(Layouting::LayoutItem &parent) override; void addToLayout(Layouting::LayoutItem &parent) override;
@@ -182,7 +183,6 @@ protected:
private: private:
QString executableText() const; QString executableText() const;
void updateDevice();
Utils::FilePathAspect m_executable; Utils::FilePathAspect m_executable;
Utils::FilePathAspect *m_alternativeExecutable = nullptr; Utils::FilePathAspect *m_alternativeExecutable = nullptr;

View File

@@ -22,16 +22,14 @@ using namespace Utils;
namespace Qnx::Internal { namespace Qnx::Internal {
class QnxRunConfiguration final : public ProjectExplorer::RunConfiguration class QnxRunConfiguration final : public RunConfiguration
{ {
public: public:
QnxRunConfiguration(ProjectExplorer::Target *target, Utils::Id id); QnxRunConfiguration(Target *target, Id id)
};
QnxRunConfiguration::QnxRunConfiguration(Target *target, Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setLabelText(Tr::tr("Executable on device:")); exeAspect->setLabelText(Tr::tr("Executable on device:"));
exeAspect->setPlaceHolderText(Tr::tr("Remote path not set")); exeAspect->setPlaceHolderText(Tr::tr("Remote path not set"));
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable", exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",
@@ -75,6 +73,9 @@ QnxRunConfiguration::QnxRunConfiguration(Target *target, Id id)
connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update); connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update);
} }
};
// QnxRunConfigurationFactory // QnxRunConfigurationFactory

View File

@@ -87,8 +87,8 @@ MakeInstallStep::MakeInstallStep(BuildStepList *parent, Id id) : MakeStep(parent
rootPath = FilePath::fromString(tmpDir.path()); rootPath = FilePath::fromString(tmpDir.path());
} }
const auto makeAspect = addAspect<ExecutableAspect>(parent->target(), const auto makeAspect = addAspect<ExecutableAspect>();
ExecutableAspect::BuildDevice); makeAspect->setDeviceSelector(parent->target(), ExecutableAspect::BuildDevice);
makeAspect->setId(MakeAspectId); makeAspect->setId(MakeAspectId);
makeAspect->setSettingsKey(MakeAspectId); makeAspect->setSettingsKey(MakeAspectId);
makeAspect->setReadOnly(false); makeAspect->setReadOnly(false);

View File

@@ -34,7 +34,8 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar
{ {
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target); auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setSettingsKey("RemoteLinux.CustomRunConfig.RemoteExecutable"); exeAspect->setSettingsKey("RemoteLinux.CustomRunConfig.RemoteExecutable");
exeAspect->setLabelText(Tr::tr("Remote executable:")); exeAspect->setLabelText(Tr::tr("Remote executable:"));
exeAspect->setReadOnly(false); exeAspect->setReadOnly(false);

View File

@@ -35,7 +35,8 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id)
{ {
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target); auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice); auto exeAspect = addAspect<ExecutableAspect>();
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
exeAspect->setLabelText(Tr::tr("Executable on device:")); exeAspect->setLabelText(Tr::tr("Executable on device:"));
exeAspect->setPlaceHolderText(Tr::tr("Remote path not set")); exeAspect->setPlaceHolderText(Tr::tr("Remote path not set"));
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable", exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",