forked from qt-creator/qt-creator
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:
@@ -25,7 +25,8 @@ public:
|
||||
explicit BareMetalRunConfiguration(Target *target, Id 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"));
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
@@ -46,7 +47,8 @@ public:
|
||||
explicit BareMetalCustomRunConfiguration(Target *target, Id 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->setPlaceHolderText(Tr::tr("Unknown"));
|
||||
exeAspect->setReadOnly(false);
|
||||
|
@@ -67,7 +67,8 @@ private:
|
||||
QdbRunConfiguration::QdbRunConfiguration(Target *target, Id 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->setLabelText(Tr::tr("Executable on device:"));
|
||||
exeAspect->setPlaceHolderText(Tr::tr("Remote path not set"));
|
||||
|
@@ -58,7 +58,8 @@ static IosDeviceType toIosDeviceType(const SimulatorInfo &device)
|
||||
IosRunConfiguration::IosRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto executableAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice);
|
||||
auto executableAspect = addAspect<ExecutableAspect>();
|
||||
executableAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
|
||||
|
@@ -26,7 +26,9 @@ public:
|
||||
auto envAspect = addAspect<EnvironmentAspect>();
|
||||
envAspect->setSupportForBuildEnvironment(target);
|
||||
|
||||
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice);
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
@@ -29,7 +29,9 @@ public:
|
||||
auto envAspect = addAspect<EnvironmentAspect>();
|
||||
envAspect->setSupportForBuildEnvironment(target);
|
||||
|
||||
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice);
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
@@ -64,8 +66,10 @@ public:
|
||||
NimbleTestConfiguration(ProjectExplorer::Target *target, Utils::Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
addAspect<ExecutableAspect>(target, ExecutableAspect::BuildDevice)
|
||||
->setExecutable(Nim::nimblePathFromKit(target->kit()));
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
exeAspect->setDeviceSelector(target, ExecutableAspect::BuildDevice);
|
||||
exeAspect->setExecutable(Nim::nimblePathFromKit(target->kit()));
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander())->setArguments("test");
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), nullptr)
|
||||
->setDefaultWorkingDirectory(project()->projectDirectory());
|
||||
|
@@ -29,7 +29,9 @@ public:
|
||||
auto envAspect = addAspect<EnvironmentAspect>();
|
||||
envAspect->setSupportForBuildEnvironment(target);
|
||||
|
||||
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice);
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
@@ -26,7 +26,8 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe
|
||||
auto envAspect = addAspect<EnvironmentAspect>();
|
||||
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->setReadOnly(false);
|
||||
exeAspect->setHistoryCompleter("Qt.CustomExecutable.History");
|
||||
|
@@ -45,7 +45,9 @@ DesktopRunConfiguration::DesktopRunConfiguration(Target *target, Id id, Kind kin
|
||||
auto envAspect = addAspect<EnvironmentAspect>();
|
||||
envAspect->setSupportForBuildEnvironment(target);
|
||||
|
||||
addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice);
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
@@ -495,8 +495,8 @@ void ArgumentsAspect::addToLayout(LayoutItem &builder)
|
||||
by the build system's parsing results with an optional manual override.
|
||||
*/
|
||||
|
||||
ExecutableAspect::ExecutableAspect(Target *target, ExecutionDeviceSelector selector)
|
||||
: m_target(target), m_selector(selector)
|
||||
ExecutableAspect::ExecutableAspect(AspectContainer *container)
|
||||
: BaseAspect(container)
|
||||
{
|
||||
setDisplayName(Tr::tr("Executable"));
|
||||
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.setLabelText(Tr::tr("Executable:"));
|
||||
|
||||
updateDevice();
|
||||
|
||||
connect(&m_executable, &StringAspect::changed, this, &ExecutableAspect::changed);
|
||||
}
|
||||
|
||||
@@ -533,8 +531,11 @@ ExecutableAspect::~ExecutableAspect()
|
||||
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 OsType osType = dev ? dev->osType() : HostOsInfo::hostOs();
|
||||
|
||||
|
@@ -155,12 +155,13 @@ class PROJECTEXPLORER_EXPORT ExecutableAspect : public Utils::BaseAspect
|
||||
public:
|
||||
enum ExecutionDeviceSelector { HostDevice, BuildDevice, RunDevice };
|
||||
|
||||
explicit ExecutableAspect(Target *target, ExecutionDeviceSelector selector);
|
||||
explicit ExecutableAspect(Utils::AspectContainer *container = nullptr);
|
||||
~ExecutableAspect() override;
|
||||
|
||||
Utils::FilePath executable() const;
|
||||
void setExecutable(const Utils::FilePath &executable);
|
||||
|
||||
void setDeviceSelector(Target *target, ExecutionDeviceSelector selector);
|
||||
void setSettingsKey(const QString &key);
|
||||
void makeOverridable(const QString &overridingKey, const QString &useOverridableKey);
|
||||
void addToLayout(Layouting::LayoutItem &parent) override;
|
||||
@@ -182,7 +183,6 @@ protected:
|
||||
|
||||
private:
|
||||
QString executableText() const;
|
||||
void updateDevice();
|
||||
|
||||
Utils::FilePathAspect m_executable;
|
||||
Utils::FilePathAspect *m_alternativeExecutable = nullptr;
|
||||
|
@@ -22,59 +22,60 @@ using namespace Utils;
|
||||
|
||||
namespace Qnx::Internal {
|
||||
|
||||
class QnxRunConfiguration final : public ProjectExplorer::RunConfiguration
|
||||
class QnxRunConfiguration final : public RunConfiguration
|
||||
{
|
||||
public:
|
||||
QnxRunConfiguration(ProjectExplorer::Target *target, Utils::Id id);
|
||||
QnxRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto exeAspect = addAspect<ExecutableAspect>();
|
||||
exeAspect->setDeviceSelector(target, ExecutableAspect::RunDevice);
|
||||
exeAspect->setLabelText(Tr::tr("Executable on device:"));
|
||||
exeAspect->setPlaceHolderText(Tr::tr("Remote path not set"));
|
||||
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",
|
||||
"RemoteLinux.RunConfig.UseAlternateRemoteExecutable");
|
||||
exeAspect->setHistoryCompleter("RemoteLinux.AlternateExecutable.History");
|
||||
|
||||
auto symbolsAspect = addAspect<SymbolFileAspect>();
|
||||
symbolsAspect->setLabelText(Tr::tr("Executable on host:"));
|
||||
symbolsAspect->setDisplayStyle(SymbolFileAspect::LabelDisplay);
|
||||
|
||||
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
||||
auto libAspect = addAspect<StringAspect>();
|
||||
libAspect->setSettingsKey("Qt4ProjectManager.QnxRunConfiguration.QtLibPath");
|
||||
libAspect->setLabelText(Tr::tr("Path to Qt libraries on device"));
|
||||
libAspect->setDisplayStyle(StringAspect::LineEditDisplay);
|
||||
|
||||
setUpdater([this, target, exeAspect, symbolsAspect] {
|
||||
const BuildTargetInfo bti = buildTargetInfo();
|
||||
const FilePath localExecutable = bti.targetFilePath;
|
||||
const DeployableFile depFile = target->deploymentData()
|
||||
.deployableForLocalFile(localExecutable);
|
||||
exeAspect->setExecutable(FilePath::fromString(depFile.remoteFilePath()));
|
||||
symbolsAspect->setValue(localExecutable);
|
||||
});
|
||||
|
||||
setRunnableModifier([libAspect](Runnable &r) {
|
||||
QString libPath = libAspect->value();
|
||||
if (!libPath.isEmpty()) {
|
||||
r.environment.appendOrSet("LD_LIBRARY_PATH", libPath + "/lib:$LD_LIBRARY_PATH");
|
||||
r.environment.appendOrSet("QML_IMPORT_PATH", libPath + "/imports:$QML_IMPORT_PATH");
|
||||
r.environment.appendOrSet("QML2_IMPORT_PATH", libPath + "/qml:$QML2_IMPORT_PATH");
|
||||
r.environment.appendOrSet("QT_PLUGIN_PATH", libPath + "/plugins:$QT_PLUGIN_PATH");
|
||||
r.environment.set("QT_QPA_FONTDIR", libPath + "/lib/fonts");
|
||||
}
|
||||
});
|
||||
|
||||
connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update);
|
||||
}
|
||||
};
|
||||
|
||||
QnxRunConfiguration::QnxRunConfiguration(Target *target, Id id)
|
||||
: RunConfiguration(target, id)
|
||||
{
|
||||
auto exeAspect = addAspect<ExecutableAspect>(target, ExecutableAspect::RunDevice);
|
||||
exeAspect->setLabelText(Tr::tr("Executable on device:"));
|
||||
exeAspect->setPlaceHolderText(Tr::tr("Remote path not set"));
|
||||
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",
|
||||
"RemoteLinux.RunConfig.UseAlternateRemoteExecutable");
|
||||
exeAspect->setHistoryCompleter("RemoteLinux.AlternateExecutable.History");
|
||||
|
||||
auto symbolsAspect = addAspect<SymbolFileAspect>();
|
||||
symbolsAspect->setLabelText(Tr::tr("Executable on host:"));
|
||||
symbolsAspect->setDisplayStyle(SymbolFileAspect::LabelDisplay);
|
||||
|
||||
auto envAspect = addAspect<RemoteLinuxEnvironmentAspect>(target);
|
||||
|
||||
addAspect<ArgumentsAspect>(macroExpander());
|
||||
addAspect<WorkingDirectoryAspect>(macroExpander(), envAspect);
|
||||
addAspect<TerminalAspect>();
|
||||
|
||||
auto libAspect = addAspect<StringAspect>();
|
||||
libAspect->setSettingsKey("Qt4ProjectManager.QnxRunConfiguration.QtLibPath");
|
||||
libAspect->setLabelText(Tr::tr("Path to Qt libraries on device"));
|
||||
libAspect->setDisplayStyle(StringAspect::LineEditDisplay);
|
||||
|
||||
setUpdater([this, target, exeAspect, symbolsAspect] {
|
||||
const BuildTargetInfo bti = buildTargetInfo();
|
||||
const FilePath localExecutable = bti.targetFilePath;
|
||||
const DeployableFile depFile = target->deploymentData()
|
||||
.deployableForLocalFile(localExecutable);
|
||||
exeAspect->setExecutable(FilePath::fromString(depFile.remoteFilePath()));
|
||||
symbolsAspect->setValue(localExecutable);
|
||||
});
|
||||
|
||||
setRunnableModifier([libAspect](Runnable &r) {
|
||||
QString libPath = libAspect->value();
|
||||
if (!libPath.isEmpty()) {
|
||||
r.environment.appendOrSet("LD_LIBRARY_PATH", libPath + "/lib:$LD_LIBRARY_PATH");
|
||||
r.environment.appendOrSet("QML_IMPORT_PATH", libPath + "/imports:$QML_IMPORT_PATH");
|
||||
r.environment.appendOrSet("QML2_IMPORT_PATH", libPath + "/qml:$QML2_IMPORT_PATH");
|
||||
r.environment.appendOrSet("QT_PLUGIN_PATH", libPath + "/plugins:$QT_PLUGIN_PATH");
|
||||
r.environment.set("QT_QPA_FONTDIR", libPath + "/lib/fonts");
|
||||
}
|
||||
});
|
||||
|
||||
connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update);
|
||||
}
|
||||
|
||||
// QnxRunConfigurationFactory
|
||||
|
||||
|
@@ -87,8 +87,8 @@ MakeInstallStep::MakeInstallStep(BuildStepList *parent, Id id) : MakeStep(parent
|
||||
rootPath = FilePath::fromString(tmpDir.path());
|
||||
}
|
||||
|
||||
const auto makeAspect = addAspect<ExecutableAspect>(parent->target(),
|
||||
ExecutableAspect::BuildDevice);
|
||||
const auto makeAspect = addAspect<ExecutableAspect>();
|
||||
makeAspect->setDeviceSelector(parent->target(), ExecutableAspect::BuildDevice);
|
||||
makeAspect->setId(MakeAspectId);
|
||||
makeAspect->setSettingsKey(MakeAspectId);
|
||||
makeAspect->setReadOnly(false);
|
||||
|
@@ -34,7 +34,8 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar
|
||||
{
|
||||
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->setLabelText(Tr::tr("Remote executable:"));
|
||||
exeAspect->setReadOnly(false);
|
||||
|
@@ -35,7 +35,8 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id)
|
||||
{
|
||||
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->setPlaceHolderText(Tr::tr("Remote path not set"));
|
||||
exeAspect->makeOverridable("RemoteLinux.RunConfig.AlternateRemoteExecutable",
|
||||
|
Reference in New Issue
Block a user