forked from qt-creator/qt-creator
Macro expander: Do not use RunConfiguration::runnable()
... to get the current executable. That leads to an infinite loop if the argument or working directory fields reference the %{CurrentRun:Executable:Path} variable, as these fields also get evaluated in RunConfiguration::runnable(). Fixes: QTCREATORBUG-18317 Change-Id: Ic249f8ff78d170110947e370045144817b179341 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -44,6 +44,7 @@
|
|||||||
#include "projectexplorersettingspage.h"
|
#include "projectexplorersettingspage.h"
|
||||||
#include "projectmanager.h"
|
#include "projectmanager.h"
|
||||||
#include "removetaskhandler.h"
|
#include "removetaskhandler.h"
|
||||||
|
#include "runconfigurationaspects.h"
|
||||||
#include "kitfeatureprovider.h"
|
#include "kitfeatureprovider.h"
|
||||||
#include "kitmanager.h"
|
#include "kitmanager.h"
|
||||||
#include "kitoptionspage.h"
|
#include "kitoptionspage.h"
|
||||||
@@ -1586,8 +1587,14 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
|||||||
tr("The currently active run configuration's executable (if applicable)."),
|
tr("The currently active run configuration's executable (if applicable)."),
|
||||||
[]() -> QString {
|
[]() -> QString {
|
||||||
if (Target *target = activeTarget()) {
|
if (Target *target = activeTarget()) {
|
||||||
if (RunConfiguration *rc = target->activeRunConfiguration())
|
if (RunConfiguration *rc = target->activeRunConfiguration()) {
|
||||||
return rc->runnable().executable;
|
// TODO: This duplicates code and is not always correct, but see
|
||||||
|
// QTCREATORBUG-18317.
|
||||||
|
// Solution: Re-introduce RunConfiguration::executable()?
|
||||||
|
if (auto executableAspect = rc->aspect<ExecutableAspect>())
|
||||||
|
return executableAspect->executable().toString();
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QString();
|
return QString();
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user