forked from qt-creator/qt-creator
ProjectExplorer: Shift full FilePath creation into Executable aspect
Less need for correction: When a target is given, the executable produced by the aspect will be on the target device. Change-Id: I86c38e9f9fa5b4d4fe9b2ef7f21a0b3aa5b28670 Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -48,7 +48,7 @@ public:
|
||||
explicit BareMetalRunConfiguration(Target *target, Utils::Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
const auto exeAspect = addAspect<ExecutableAspect>();
|
||||
const auto exeAspect = addAspect<ExecutableAspect>(target);
|
||||
exeAspect->setDisplayStyle(StringAspect::LabelDisplay);
|
||||
exeAspect->setPlaceHolderText(tr("Unknown"));
|
||||
|
||||
@@ -69,10 +69,10 @@ class BareMetalCustomRunConfiguration final : public RunConfiguration
|
||||
Q_DECLARE_TR_FUNCTIONS(BareMetal::Internal::BareMetalCustomRunConfiguration)
|
||||
|
||||
public:
|
||||
explicit BareMetalCustomRunConfiguration(Target *target, Utils::Id id)
|
||||
explicit BareMetalCustomRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
const auto exeAspect = addAspect<ExecutableAspect>();
|
||||
const auto exeAspect = addAspect<ExecutableAspect>(target);
|
||||
exeAspect->setSettingsKey("BareMetal.CustomRunConfig.Executable");
|
||||
exeAspect->setPlaceHolderText(tr("Unknown"));
|
||||
exeAspect->setDisplayStyle(StringAspect::PathChooserDisplay);
|
||||
|
@@ -84,13 +84,12 @@ private:
|
||||
QString defaultDisplayName() const;
|
||||
};
|
||||
|
||||
QdbRunConfiguration::QdbRunConfiguration(Target *target, Utils::Id id)
|
||||
QdbRunConfiguration::QdbRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
auto exeAspect = addAspect<ExecutableAspect>(target);
|
||||
exeAspect->setSettingsKey("QdbRunConfig.RemoteExecutable");
|
||||
exeAspect->setLabelText(tr("Executable on device:"));
|
||||
exeAspect->setExecutablePathStyle(OsTypeLinux);
|
||||
exeAspect->setPlaceHolderText(tr("Remote path not set"));
|
||||
exeAspect->makeOverridable("QdbRunConfig.AlternateRemoteExecutable",
|
||||
"QdbRunCofig.UseAlternateRemoteExecutable");
|
||||
|
@@ -77,10 +77,10 @@ static IosDeviceType toIosDeviceType(const SimulatorInfo &device)
|
||||
return iosDeviceType;
|
||||
}
|
||||
|
||||
IosRunConfiguration::IosRunConfiguration(Target *target, Utils::Id id)
|
||||
IosRunConfiguration::IosRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto executableAspect = addAspect<ExecutableAspect>();
|
||||
auto executableAspect = addAspect<ExecutableAspect>(target);
|
||||
executableAspect->setDisplayStyle(StringAspect::LabelDisplay);
|
||||
|
||||
addAspect<ArgumentsAspect>();
|
||||
|
@@ -44,7 +44,7 @@ MesonRunConfiguration::MesonRunConfiguration(ProjectExplorer::Target *target, Ut
|
||||
{
|
||||
auto envAspect = addAspect<ProjectExplorer::LocalEnvironmentAspect>(target);
|
||||
|
||||
addAspect<ProjectExplorer::ExecutableAspect>();
|
||||
addAspect<ProjectExplorer::ExecutableAspect>(target);
|
||||
addAspect<ProjectExplorer::ArgumentsAspect>();
|
||||
addAspect<ProjectExplorer::WorkingDirectoryAspect>(envAspect);
|
||||
addAspect<ProjectExplorer::TerminalAspect>();
|
||||
|
@@ -52,7 +52,7 @@ public:
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto envAspect = addAspect<LocalEnvironmentAspect>(target);
|
||||
addAspect<ExecutableAspect>();
|
||||
addAspect<ExecutableAspect>(target);
|
||||
addAspect<ArgumentsAspect>();
|
||||
addAspect<WorkingDirectoryAspect>(envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
@@ -89,7 +89,7 @@ public:
|
||||
NimbleTestConfiguration(ProjectExplorer::Target *target, Utils::Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
addAspect<ExecutableAspect>()->setExecutable(Nim::nimblePathFromKit(target->kit()));
|
||||
addAspect<ExecutableAspect>(target)->setExecutable(Nim::nimblePathFromKit(target->kit()));
|
||||
addAspect<ArgumentsAspect>()->setArguments("test");
|
||||
addAspect<WorkingDirectoryAspect>(nullptr)->setDefaultWorkingDirectory(project()->projectDirectory());
|
||||
addAspect<TerminalAspect>();
|
||||
|
@@ -50,7 +50,7 @@ public:
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto envAspect = addAspect<LocalEnvironmentAspect>(target);
|
||||
addAspect<ExecutableAspect>();
|
||||
addAspect<ExecutableAspect>(target);
|
||||
addAspect<ArgumentsAspect>();
|
||||
addAspect<WorkingDirectoryAspect>(envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
@@ -41,20 +41,19 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe
|
||||
: CustomExecutableRunConfiguration(target, CUSTOM_EXECUTABLE_RUNCONFIG_ID)
|
||||
{}
|
||||
|
||||
CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *target, Utils::Id id)
|
||||
CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto envAspect = addAspect<LocalEnvironmentAspect>(target);
|
||||
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
auto exeAspect = addAspect<ExecutableAspect>(nullptr); // nullptr - to enforce host-only operation.
|
||||
exeAspect->setSettingsKey("ProjectExplorer.CustomExecutableRunConfiguration.Executable");
|
||||
exeAspect->setDisplayStyle(StringAspect::PathChooserDisplay);
|
||||
exeAspect->setHistoryCompleter("Qt.CustomExecutable.History");
|
||||
exeAspect->setExpectedKind(PathChooser::ExistingCommand);
|
||||
exeAspect->setEnvironmentChange(EnvironmentChange::fromFixedEnvironment(envAspect->environment()));
|
||||
|
||||
auto argsAspect = addAspect<ArgumentsAspect>();
|
||||
|
||||
addAspect<ArgumentsAspect>();
|
||||
addAspect<WorkingDirectoryAspect>(envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
||||
@@ -62,12 +61,6 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe
|
||||
exeAspect->setEnvironmentChange(EnvironmentChange::fromFixedEnvironment(envAspect->environment()));
|
||||
});
|
||||
|
||||
setCommandLineGetter([exeAspect, argsAspect, this] {
|
||||
const FilePath executable = exeAspect->executable();
|
||||
const QString arguments = argsAspect->arguments(macroExpander());
|
||||
return CommandLine{executable, arguments, CommandLine::Raw};
|
||||
});
|
||||
|
||||
setDefaultDisplayName(defaultDisplayName());
|
||||
}
|
||||
|
||||
|
@@ -68,7 +68,7 @@ DesktopRunConfiguration::DesktopRunConfiguration(Target *target, Id id, Kind kin
|
||||
{
|
||||
auto envAspect = addAspect<LocalEnvironmentAspect>(target);
|
||||
|
||||
addAspect<ExecutableAspect>();
|
||||
addAspect<ExecutableAspect>(target);
|
||||
addAspect<ArgumentsAspect>();
|
||||
addAspect<WorkingDirectoryAspect>(envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
@@ -217,9 +217,6 @@ RunConfiguration::RunConfiguration(Target *target, Utils::Id id)
|
||||
if (const auto argumentsAspect = aspect<ArgumentsAspect>())
|
||||
arguments = argumentsAspect->arguments(macroExpander());
|
||||
|
||||
if (IDevice::ConstPtr dev = DeviceKitAspect::device(target->kit()))
|
||||
executable = dev->filePath(executable.path());
|
||||
|
||||
return CommandLine{executable, arguments, CommandLine::Raw};
|
||||
};
|
||||
|
||||
|
@@ -25,7 +25,9 @@
|
||||
|
||||
#include "runconfigurationaspects.h"
|
||||
|
||||
#include "devicesupport/idevice.h"
|
||||
#include "environmentaspect.h"
|
||||
#include "kitinformation.h"
|
||||
#include "project.h"
|
||||
#include "projectexplorer.h"
|
||||
#include "projectexplorersettings.h"
|
||||
@@ -515,39 +517,42 @@ void ArgumentsAspect::addToLayout(LayoutBuilder &builder)
|
||||
by the build system's parsing results with an optional manual override.
|
||||
*/
|
||||
|
||||
ExecutableAspect::ExecutableAspect()
|
||||
ExecutableAspect::ExecutableAspect(Target *target)
|
||||
: m_target(target)
|
||||
{
|
||||
setDisplayName(tr("Executable"));
|
||||
setId("ExecutableAspect");
|
||||
setExecutablePathStyle(HostOsInfo::hostOs());
|
||||
|
||||
addDataExtractor(this, &ExecutableAspect::executable, &Data::executable);
|
||||
|
||||
m_executable.setPlaceHolderText(tr("<unknown>"));
|
||||
m_executable.setLabelText(tr("Executable:"));
|
||||
m_executable.setDisplayStyle(StringAspect::LabelDisplay);
|
||||
|
||||
connect(&m_executable, &StringAspect::changed,
|
||||
this, &ExecutableAspect::changed);
|
||||
updateDevice();
|
||||
|
||||
connect(&m_executable, &StringAspect::changed, this, &ExecutableAspect::changed);
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
|
||||
static IDevice::ConstPtr deviceForTarget(Target *target)
|
||||
{
|
||||
return target ? DeviceKitAspect::device(target->kit()) : IDevice::ConstPtr();
|
||||
}
|
||||
|
||||
ExecutableAspect::~ExecutableAspect()
|
||||
{
|
||||
delete m_alternativeExecutable;
|
||||
m_alternativeExecutable = nullptr;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the display style of the paths to the default used on \a osType,
|
||||
backslashes on Windows, forward slashes elsewhere.
|
||||
|
||||
\sa Utils::StringAspect::setDisplayFilter()
|
||||
*/
|
||||
void ExecutableAspect::setExecutablePathStyle(OsType osType)
|
||||
void ExecutableAspect::updateDevice()
|
||||
{
|
||||
const IDevice::ConstPtr dev = deviceForTarget(m_target);
|
||||
const OsType osType = dev ? dev->osType() : HostOsInfo::hostOs();
|
||||
|
||||
m_executable.setDisplayFilter([osType](const QString &pathName) {
|
||||
return OsSpecificAspects::pathWithNativeSeparators(osType, pathName);
|
||||
});
|
||||
@@ -632,10 +637,14 @@ void ExecutableAspect::makeOverridable(const QString &overridingKey, const QStri
|
||||
*/
|
||||
FilePath ExecutableAspect::executable() const
|
||||
{
|
||||
if (m_alternativeExecutable && m_alternativeExecutable->isChecked())
|
||||
return m_alternativeExecutable->filePath();
|
||||
FilePath exe = m_alternativeExecutable && m_alternativeExecutable->isChecked()
|
||||
? m_alternativeExecutable->filePath()
|
||||
: m_executable.filePath();
|
||||
|
||||
return m_executable.filePath();
|
||||
if (const IDevice::ConstPtr dev = deviceForTarget(m_target))
|
||||
exe = dev->filePath(exe.path());
|
||||
|
||||
return exe;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@@ -174,7 +174,7 @@ class PROJECTEXPLORER_EXPORT ExecutableAspect : public Utils::BaseAspect
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ExecutableAspect();
|
||||
explicit ExecutableAspect(Target *target); // Uses device from target if non-null.
|
||||
~ExecutableAspect() override;
|
||||
|
||||
Utils::FilePath executable() const;
|
||||
@@ -185,7 +185,6 @@ public:
|
||||
void addToLayout(Utils::LayoutBuilder &builder) override;
|
||||
void setLabelText(const QString &labelText);
|
||||
void setPlaceHolderText(const QString &placeHolderText);
|
||||
void setExecutablePathStyle(Utils::OsType osType);
|
||||
void setHistoryCompleter(const QString &historyCompleterKey);
|
||||
void setExpectedKind(const Utils::PathChooser::Kind expectedKind);
|
||||
void setEnvironmentChange(const Utils::EnvironmentChange &change);
|
||||
@@ -202,9 +201,11 @@ protected:
|
||||
|
||||
private:
|
||||
QString executableText() const;
|
||||
void updateDevice();
|
||||
|
||||
Utils::StringAspect m_executable;
|
||||
Utils::StringAspect *m_alternativeExecutable = nullptr;
|
||||
Target *m_target = nullptr;
|
||||
};
|
||||
|
||||
class PROJECTEXPLORER_EXPORT SymbolFileAspect : public Utils::StringAspect
|
||||
|
@@ -47,9 +47,8 @@ namespace Internal {
|
||||
QnxRunConfiguration::QnxRunConfiguration(Target *target, Utils::Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
auto exeAspect = addAspect<ExecutableAspect>(target);
|
||||
exeAspect->setLabelText(tr("Executable on device:"));
|
||||
exeAspect->setExecutablePathStyle(OsTypeLinux);
|
||||
exeAspect->setPlaceHolderText(tr("Remote path not set"));
|
||||
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",
|
||||
"RemoteLinux.RunConfig.UseAlternateRemoteExecutable");
|
||||
|
@@ -57,7 +57,7 @@ const char CleanInstallRootAspectId[] = "RemoteLinux.MakeInstall.CleanInstallRoo
|
||||
const char FullCommandLineAspectId[] = "RemoteLinux.MakeInstall.FullCommandLine";
|
||||
const char CustomCommandLineAspectId[] = "RemoteLinux.MakeInstall.CustomCommandLine";
|
||||
|
||||
MakeInstallStep::MakeInstallStep(BuildStepList *parent, Utils::Id id) : MakeStep(parent, id)
|
||||
MakeInstallStep::MakeInstallStep(BuildStepList *parent, Id id) : MakeStep(parent, id)
|
||||
{
|
||||
makeCommandAspect()->setVisible(false);
|
||||
buildTargetsAspect()->setVisible(false);
|
||||
@@ -67,7 +67,7 @@ MakeInstallStep::MakeInstallStep(BuildStepList *parent, Utils::Id id) : MakeStep
|
||||
jobCountAspect()->setVisible(false);
|
||||
disabledForSubdirsAspect()->setVisible(false);
|
||||
|
||||
const auto makeAspect = addAspect<ExecutableAspect>();
|
||||
const auto makeAspect = addAspect<ExecutableAspect>(parent->target());
|
||||
makeAspect->setId(MakeAspectId);
|
||||
makeAspect->setSettingsKey(MakeAspectId);
|
||||
makeAspect->setDisplayStyle(StringAspect::PathChooserDisplay);
|
||||
|
@@ -59,10 +59,9 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar
|
||||
{
|
||||
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
|
||||
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
auto exeAspect = addAspect<ExecutableAspect>(target);
|
||||
exeAspect->setSettingsKey("RemoteLinux.CustomRunConfig.RemoteExecutable");
|
||||
exeAspect->setLabelText(tr("Remote executable:"));
|
||||
exeAspect->setExecutablePathStyle(OsTypeLinux);
|
||||
exeAspect->setDisplayStyle(StringAspect::LineEditDisplay);
|
||||
exeAspect->setHistoryCompleter("RemoteLinux.CustomExecutable.History");
|
||||
exeAspect->setExpectedKind(PathChooser::Any);
|
||||
|
@@ -59,9 +59,8 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id)
|
||||
{
|
||||
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
|
||||
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
auto exeAspect = addAspect<ExecutableAspect>(target);
|
||||
exeAspect->setLabelText(tr("Executable on device:"));
|
||||
exeAspect->setExecutablePathStyle(OsTypeLinux);
|
||||
exeAspect->setPlaceHolderText(tr("Remote path not set"));
|
||||
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",
|
||||
"RemoteLinux.RunConfig.UseAlternateRemoteExecutable");
|
||||
|
Reference in New Issue
Block a user