ProjectExplorer: Display build configuration specific variables again

Continues d308b86847.

Task-number: QTCREATORBUG-31614
Change-Id: I408d96ccd6854b7bb62e13252c00ed3a29788b4c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2024-10-16 16:44:07 +02:00
parent c522831cb3
commit 9b6bbc181b
30 changed files with 58 additions and 125 deletions

View File

@@ -69,6 +69,24 @@ class Internal::BaseAspectPrivate
public: public:
explicit BaseAspectPrivate(AspectContainer *container) : m_container(container) {} explicit BaseAspectPrivate(AspectContainer *container) : m_container(container) {}
MacroExpander *macroExpander()
{
if (!m_expander) {
m_expander = std::make_unique<MacroExpander>();
m_expander->setDisplayName("Variables");
if (m_container)
m_expander->registerSubProvider([this] { return m_container->macroExpander(); });
}
return m_expander.get();
}
void setContainer(AspectContainer *container)
{
m_container = container;
if (m_expander)
m_expander->registerSubProvider([this] { return m_container->macroExpander(); });
}
Id m_id; Id m_id;
std::function<QVariant(const QVariant &)> m_toSettings; std::function<QVariant(const QVariant &)> m_toSettings;
std::function<QVariant(const QVariant &)> m_fromSettings; std::function<QVariant(const QVariant &)> m_fromSettings;
@@ -96,8 +114,10 @@ public:
BaseAspect::DataCloner m_dataCloner; BaseAspect::DataCloner m_dataCloner;
QList<BaseAspect::DataExtractor> m_dataExtractors; QList<BaseAspect::DataExtractor> m_dataExtractors;
MacroExpander *m_expander = globalMacroExpander();
QUndoStack *m_undoStack = nullptr; QUndoStack *m_undoStack = nullptr;
private:
std::unique_ptr<MacroExpander> m_expander;
}; };
/*! /*!
@@ -649,6 +669,11 @@ void BaseAspect::forEachSubWidget(const std::function<void(QWidget *)> &func)
func(w); func(w);
} }
void BaseAspect::setContainer(AspectContainer *container)
{
d->setContainer(container);
}
void BaseAspect::saveToMap(Store &data, const QVariant &value, void BaseAspect::saveToMap(Store &data, const QVariant &value,
const QVariant &defaultValue, const Key &key) const QVariant &defaultValue, const Key &key)
{ {
@@ -741,12 +766,14 @@ QVariant BaseAspect::fromSettingsValue(const QVariant &val) const
void BaseAspect::setMacroExpander(MacroExpander *expander) void BaseAspect::setMacroExpander(MacroExpander *expander)
{ {
d->m_expander = expander; d->macroExpander()->clearSubProviders();
if (expander)
d->macroExpander()->registerSubProvider([expander] { return expander; });
} }
MacroExpander *BaseAspect::macroExpander() const MacroExpander *BaseAspect::macroExpander() const
{ {
return d->m_expander; return d->macroExpander();
} }
void BaseAspect::addOnChanged(QObject *guard, const Callback &callback) void BaseAspect::addOnChanged(QObject *guard, const Callback &callback)
@@ -781,15 +808,11 @@ void BaseAspect::addOnLabelPixmapChanged(QObject *guard, const Callback &callbac
void BaseAspect::addMacroExpansion(QWidget *w) void BaseAspect::addMacroExpansion(QWidget *w)
{ {
if (!d->m_expander)
return;
const auto chooser = new VariableChooser(w); const auto chooser = new VariableChooser(w);
chooser->addSupportedWidget(w); chooser->addSupportedWidget(w);
if (d->m_expander == globalMacroExpander()) // default for VariableChooser() chooser->addMacroExpanderProvider([this] { return d->macroExpander(); });
return;
chooser->addMacroExpanderProvider([this] { return d->m_expander; });
if (auto pathChooser = qobject_cast<PathChooser *>(w)) if (auto pathChooser = qobject_cast<PathChooser *>(w))
pathChooser->setMacroExpander(d->m_expander); pathChooser->setMacroExpander(d->macroExpander());
} }
namespace Internal { namespace Internal {
@@ -3169,6 +3192,7 @@ void AspectContainer::addToLayoutImpl(Layouting::Layout &parent)
*/ */
void AspectContainer::registerAspect(BaseAspect *aspect, bool takeOwnership) void AspectContainer::registerAspect(BaseAspect *aspect, bool takeOwnership)
{ {
aspect->setContainer(this);
aspect->setAutoApply(isAutoApply()); aspect->setAutoApply(isAutoApply());
aspect->setEnabled(isEnabled()); aspect->setEnabled(isEnabled());
d->m_items.append(aspect); d->m_items.append(aspect);
@@ -3333,14 +3357,6 @@ void AspectContainer::setEnabled(bool enabled)
aspect->setEnabled(enabled); aspect->setEnabled(enabled);
} }
void AspectContainer::setMacroExpander(MacroExpander *expander)
{
BaseAspect::setMacroExpander(expander);
for (BaseAspect *aspect : std::as_const(d->m_items))
aspect->setMacroExpander(expander);
}
bool AspectContainer::equals(const AspectContainer &other) const bool AspectContainer::equals(const AspectContainer &other) const
{ {
// FIXME: Expensive, but should not really be needed in a fully aspectified world. // FIXME: Expensive, but should not really be needed in a fully aspectified world.

View File

@@ -286,8 +286,11 @@ protected:
} }
private: private:
std::unique_ptr<Internal::BaseAspectPrivate> d;
friend class Internal::CheckableAspectImplementation; friend class Internal::CheckableAspectImplementation;
friend class AspectContainer;
void setContainer(AspectContainer *container);
std::unique_ptr<Internal::BaseAspectPrivate> d;
}; };
QTCREATOR_UTILS_EXPORT void addToLayout(Layouting::Layout *layout, const BaseAspect *aspect); QTCREATOR_UTILS_EXPORT void addToLayout(Layouting::Layout *layout, const BaseAspect *aspect);
@@ -999,8 +1002,6 @@ public:
void setUndoStack(QUndoStack *undoStack) override; void setUndoStack(QUndoStack *undoStack) override;
void setEnabled(bool enabled) override; void setEnabled(bool enabled) override;
void setMacroExpander(MacroExpander *expander);
template <typename T> T *aspect() const template <typename T> T *aspect() const
{ {
for (BaseAspect *aspect : aspects()) for (BaseAspect *aspect : aspects())

View File

@@ -481,6 +481,11 @@ void MacroExpander::registerSubProvider(const MacroExpanderProvider &provider)
d->m_subProviders.append(provider); d->m_subProviders.append(provider);
} }
void MacroExpander::clearSubProviders()
{
d->m_subProviders.clear();
}
bool MacroExpander::isAccumulating() const bool MacroExpander::isAccumulating() const
{ {
return d->m_accumulating; return d->m_accumulating;

View File

@@ -23,7 +23,7 @@ class QTCREATOR_UTILS_EXPORT MacroExpander
Q_DISABLE_COPY(MacroExpander) Q_DISABLE_COPY(MacroExpander)
public: public:
explicit MacroExpander(); MacroExpander();
~MacroExpander(); ~MacroExpander();
bool resolveMacro(const QString &name, QString *ret) const; bool resolveMacro(const QString &name, QString *ret) const;
@@ -69,6 +69,7 @@ public:
void setDisplayName(const QString &displayName); void setDisplayName(const QString &displayName);
void registerSubProvider(const MacroExpanderProvider &provider); void registerSubProvider(const MacroExpanderProvider &provider);
void clearSubProviders();
bool isAccumulating() const; bool isAccumulating() const;
void setAccumulating(bool on); void setAccumulating(bool on);

View File

@@ -53,7 +53,6 @@ public:
{ {
environment.addSupportedBaseEnvironment(Tr::tr("Clean Environment"), {}); environment.addSupportedBaseEnvironment(Tr::tr("Clean Environment"), {});
extraAppArgs.setMacroExpander(macroExpander());
extraAppArgs.addOnChanged(this, [this, target] { extraAppArgs.addOnChanged(this, [this, target] {
if (target->buildConfigurations().first()->buildType() == BuildConfiguration::BuildType::Release) { if (target->buildConfigurations().first()->buildType() == BuildConfiguration::BuildType::Release) {
const QString buildKey = target->activeBuildKey(); const QString buildKey = target->activeBuildKey();

View File

@@ -562,7 +562,6 @@ public:
&m_localPath, &m_localPath,
noMargin}; noMargin};
}); });
setMacroExpander(nullptr);
} }
void updateContent(const PathMapping &mapping) void updateContent(const PathMapping &mapping)

View File

@@ -30,10 +30,6 @@ public:
executable.setDeviceSelector(target, ExecutableAspect::RunDevice); executable.setDeviceSelector(target, ExecutableAspect::RunDevice);
executable.setPlaceHolderText(Tr::tr("Unknown")); executable.setPlaceHolderText(Tr::tr("Unknown"));
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
setUpdater([this] { setUpdater([this] {
const BuildTargetInfo bti = buildTargetInfo(); const BuildTargetInfo bti = buildTargetInfo();
executable.setExecutable(bti.targetFilePath); executable.setExecutable(bti.targetFilePath);
@@ -60,10 +56,6 @@ public:
executable.setHistoryCompleter("BareMetal.CustomRunConfig.History"); executable.setHistoryCompleter("BareMetal.CustomRunConfig.History");
executable.setExpectedKind(PathChooser::Any); executable.setExpectedKind(PathChooser::Any);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
setDefaultDisplayName(RunConfigurationFactory::decoratedTargetName( setDefaultDisplayName(RunConfigurationFactory::decoratedTargetName(
Tr::tr("Custom Executable"), target)); Tr::tr("Custom Executable"), target));
setUsesEmptyBuildKeys(); setUsesEmptyBuildKeys();

View File

@@ -47,9 +47,6 @@ public:
environment.setDeviceSelector(target, EnvironmentAspect::RunDevice); environment.setDeviceSelector(target, EnvironmentAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
fullCommand.setLabelText(Tr::tr("Full command line:")); fullCommand.setLabelText(Tr::tr("Full command line:"));

View File

@@ -37,9 +37,6 @@ public:
executable.setSettingsKey("Haskell.Executable"); executable.setSettingsKey("Haskell.Executable");
executable.setLabelText(Tr::tr("Executable")); executable.setLabelText(Tr::tr("Executable"));
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
workingDir.setDefaultWorkingDirectory(project()->projectDirectory()); workingDir.setDefaultWorkingDirectory(project()->projectDirectory());
workingDir.setVisible(false); workingDir.setVisible(false);

View File

@@ -64,8 +64,6 @@ IosRunConfiguration::IosRunConfiguration(Target *target, Id id)
{ {
executable.setDeviceSelector(target, ExecutableAspect::RunDevice); executable.setDeviceSelector(target, ExecutableAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
setUpdater([this, target] { setUpdater([this, target] {
IDevice::ConstPtr dev = DeviceKitAspect::device(target->kit()); IDevice::ConstPtr dev = DeviceKitAspect::device(target->kit());
const QString devName = dev ? dev->displayName() : IosDevice::name(); const QString devName = dev ? dev->displayName() : IosDevice::name();

View File

@@ -31,9 +31,6 @@ public:
executable.setDeviceSelector(target, ExecutableAspect::RunDevice); executable.setDeviceSelector(target, ExecutableAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
connect(&useLibraryPaths, &BaseAspect::changed, connect(&useLibraryPaths, &BaseAspect::changed,

View File

@@ -24,7 +24,6 @@ public:
NimbleBuildStep(BuildStepList *parentList, Id id) NimbleBuildStep(BuildStepList *parentList, Id id)
: AbstractProcessStep(parentList, id) : AbstractProcessStep(parentList, id)
{ {
arguments.setMacroExpander(macroExpander());
arguments.setSettingsKey(Constants::C_NIMBLEBUILDSTEP_ARGUMENTS); arguments.setSettingsKey(Constants::C_NIMBLEBUILDSTEP_ARGUMENTS);
arguments.setResetter([this] { return defaultArguments(); }); arguments.setResetter([this] { return defaultArguments(); });
arguments.setArguments(defaultArguments()); arguments.setArguments(defaultArguments());

View File

@@ -28,10 +28,6 @@ public:
executable.setDeviceSelector(target, ExecutableAspect::RunDevice); executable.setDeviceSelector(target, ExecutableAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
setUpdater([this] { setUpdater([this] {
BuildTargetInfo bti = buildTargetInfo(); BuildTargetInfo bti = buildTargetInfo();
setDisplayName(bti.displayName); setDisplayName(bti.displayName);
@@ -74,10 +70,8 @@ public:
executable.setDeviceSelector(target, ExecutableAspect::BuildDevice); executable.setDeviceSelector(target, ExecutableAspect::BuildDevice);
executable.setExecutable(Nim::nimblePathFromKit(kit())); executable.setExecutable(Nim::nimblePathFromKit(kit()));
arguments.setMacroExpander(macroExpander());
arguments.setArguments("test"); arguments.setArguments("test");
workingDir.setMacroExpander(macroExpander());
workingDir.setDefaultWorkingDirectory(project()->projectDirectory()); workingDir.setDefaultWorkingDirectory(project()->projectDirectory());
} }

View File

@@ -30,10 +30,6 @@ public:
executable.setDeviceSelector(target, ExecutableAspect::RunDevice); executable.setDeviceSelector(target, ExecutableAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
setDisplayName(Tr::tr("Current Build Target")); setDisplayName(Tr::tr("Current Build Target"));
setDefaultDisplayName(Tr::tr("Current Build Target")); setDefaultDisplayName(Tr::tr("Current Build Target"));

View File

@@ -146,7 +146,6 @@ public:
bool m_configWidgetHasFrame = false; bool m_configWidgetHasFrame = false;
QList<Utils::Id> m_initialBuildSteps; QList<Utils::Id> m_initialBuildSteps;
QList<Utils::Id> m_initialCleanSteps; QList<Utils::Id> m_initialCleanSteps;
Utils::MacroExpander m_macroExpander;
bool m_parseStdOut = false; bool m_parseStdOut = false;
QList<Utils::Id> m_customParsers; QList<Utils::Id> m_customParsers;
@@ -288,11 +287,6 @@ void BuildConfiguration::doInitialize(const BuildInfo &info)
d->m_initializer(info); d->m_initializer(info);
} }
MacroExpander *BuildConfiguration::macroExpander() const
{
return &d->m_macroExpander;
}
bool BuildConfiguration::createBuildDirectory() bool BuildConfiguration::createBuildDirectory()
{ {
const bool result = bool(buildDirectory().ensureWritableDir()); const bool result = bool(buildDirectory().ensureWritableDir());

View File

@@ -111,8 +111,6 @@ public:
void doInitialize(const BuildInfo &info); void doInitialize(const BuildInfo &info);
Utils::MacroExpander *macroExpander() const;
bool createBuildDirectory(); bool createBuildDirectory();
signals: signals:

View File

@@ -15,6 +15,7 @@
#include <utils/fileinprojectfinder.h> #include <utils/fileinprojectfinder.h>
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
#include <utils/macroexpander.h>
#include <utils/outputformatter.h> #include <utils/outputformatter.h>
#include <utils/variablechooser.h> #include <utils/variablechooser.h>
@@ -85,10 +86,8 @@ BuildStep::BuildStep(BuildStepList *bsl, Id id)
: ProjectConfiguration(bsl->target(), id) : ProjectConfiguration(bsl->target(), id)
, m_stepList(bsl) , m_stepList(bsl)
{ {
if (auto bc = buildConfiguration())
setMacroExpander(bc->macroExpander());
connect(this, &ProjectConfiguration::displayNameChanged, this, &BuildStep::updateSummary); connect(this, &ProjectConfiguration::displayNameChanged, this, &BuildStep::updateSummary);
macroExpander()->registerSubProvider([bsl] { return bsl->projectConfiguration()->macroExpander(); });
} }
QWidget *BuildStep::doCreateConfigWidget() QWidget *BuildStep::doCreateConfigWidget()

View File

@@ -32,9 +32,6 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe
executable.setExpectedKind(PathChooser::ExistingCommand); executable.setExpectedKind(PathChooser::ExistingCommand);
executable.setEnvironment(environment.environment()); executable.setEnvironment(environment.environment());
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
connect(&environment, &EnvironmentAspect::environmentChanged, this, [this] { connect(&environment, &EnvironmentAspect::environmentChanged, this, [this] {

View File

@@ -32,9 +32,6 @@ protected:
executable.setDeviceSelector(target, ExecutableAspect::RunDevice); executable.setDeviceSelector(target, ExecutableAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
connect(&useLibraryPaths, &UseLibraryPathsAspect::changed, connect(&useLibraryPaths, &UseLibraryPathsAspect::changed,

View File

@@ -148,28 +148,27 @@ RunConfiguration::RunConfiguration(Target *target, Utils::Id id)
forceDisplayNameSerialization(); forceDisplayNameSerialization();
connect(target, &Target::parsingFinished, this, &RunConfiguration::update); connect(target, &Target::parsingFinished, this, &RunConfiguration::update);
setMacroExpander(&m_expander); MacroExpander &expander = *macroExpander();
expander.setDisplayName(Tr::tr("Run Settings"));
m_expander.setDisplayName(Tr::tr("Run Settings")); expander.setAccumulating(true);
m_expander.setAccumulating(true); expander.registerSubProvider([target] {
m_expander.registerSubProvider([target] {
BuildConfiguration *bc = target->activeBuildConfiguration(); BuildConfiguration *bc = target->activeBuildConfiguration();
return bc ? bc->macroExpander() : target->macroExpander(); return bc ? bc->macroExpander() : target->macroExpander();
}); });
m_expander.registerPrefix("RunConfig:Env", Tr::tr("Variables in the run environment."), expander.registerPrefix("RunConfig:Env", Tr::tr("Variables in the run environment."),
[this](const QString &var) { [this](const QString &var) {
const auto envAspect = aspect<EnvironmentAspect>(); const auto envAspect = aspect<EnvironmentAspect>();
return envAspect ? envAspect->environment().expandedValueForKey(var) : QString(); return envAspect ? envAspect->environment().expandedValueForKey(var) : QString();
}); });
m_expander.registerVariable("RunConfig:WorkingDir", expander.registerVariable("RunConfig:WorkingDir",
Tr::tr("The run configuration's working directory."), Tr::tr("The run configuration's working directory."),
[this] { [this] {
const auto wdAspect = aspect<WorkingDirectoryAspect>(); const auto wdAspect = aspect<WorkingDirectoryAspect>();
return wdAspect ? wdAspect->workingDirectory().toString() : QString(); return wdAspect ? wdAspect->workingDirectory().toString() : QString();
}); });
m_expander.registerVariable("RunConfig:Name", Tr::tr("The run configuration's name."), expander.registerVariable("RunConfig:Name", Tr::tr("The run configuration's name."),
[this] { return displayName(); }); [this] { return displayName(); });
m_expander.registerFileVariables("RunConfig:Executable", expander.registerFileVariables("RunConfig:Executable",
Tr::tr("The run configuration's executable."), Tr::tr("The run configuration's executable."),
[this] { return commandLine().executable(); }); [this] { return commandLine().executable(); });
@@ -222,7 +221,7 @@ QWidget *RunConfiguration::createConfigurationWidget()
} }
auto widget = form.emerge(); auto widget = form.emerge();
VariableChooser::addSupportForChildWidgets(widget, &m_expander); VariableChooser::addSupportForChildWidgets(widget, macroExpander());
auto detailsWidget = new Utils::DetailsWidget; auto detailsWidget = new Utils::DetailsWidget;
detailsWidget->setState(DetailsWidget::NoSummary); detailsWidget->setState(DetailsWidget::NoSummary);

View File

@@ -203,7 +203,6 @@ private:
CommandLineGetter m_commandLineGetter; CommandLineGetter m_commandLineGetter;
RunnableModifier m_runnableModifier; RunnableModifier m_runnableModifier;
Updater m_updater; Updater m_updater;
Utils::MacroExpander m_expander;
Utils::Store m_pristineState; Utils::Store m_pristineState;
bool m_customized = false; bool m_customized = false;
bool m_usesEmptyBuildKeys = false; bool m_usesEmptyBuildKeys = false;

View File

@@ -320,11 +320,6 @@ ArgumentsAspect::ArgumentsAspect(AspectContainer *container)
addDataExtractor(this, &ArgumentsAspect::arguments, &Data::arguments); addDataExtractor(this, &ArgumentsAspect::arguments, &Data::arguments);
} }
void ArgumentsAspect::setMacroExpander(const MacroExpander *expander)
{
m_macroExpander = expander;
}
/*! /*!
Returns the main value of this aspect. Returns the main value of this aspect.
@@ -332,12 +327,11 @@ void ArgumentsAspect::setMacroExpander(const MacroExpander *expander)
*/ */
QString ArgumentsAspect::arguments() const QString ArgumentsAspect::arguments() const
{ {
QTC_ASSERT(m_macroExpander, return m_arguments);
if (m_currentlyExpanding) if (m_currentlyExpanding)
return m_arguments; return m_arguments;
m_currentlyExpanding = true; m_currentlyExpanding = true;
const QString expanded = m_macroExpander->expandProcessArgs(m_arguments); const QString expanded = macroExpander()->expandProcessArgs(m_arguments);
m_currentlyExpanding = false; m_currentlyExpanding = false;
return expanded; return expanded;
} }
@@ -969,15 +963,9 @@ X11ForwardingAspect::X11ForwardingAspect(AspectContainer *container)
addDataExtractor(this, &X11ForwardingAspect::display, &Data::display); addDataExtractor(this, &X11ForwardingAspect::display, &Data::display);
} }
void X11ForwardingAspect::setMacroExpander(const MacroExpander *expander)
{
m_macroExpander = expander;
}
QString X11ForwardingAspect::display() const QString X11ForwardingAspect::display() const
{ {
QTC_ASSERT(m_macroExpander, return value()); return !isChecked() ? QString() : macroExpander()->expandProcessArgs(value());
return !isChecked() ? QString() : m_macroExpander->expandProcessArgs(value());
} }

View File

@@ -100,7 +100,6 @@ public:
void setArguments(const QString &arguments); void setArguments(const QString &arguments);
void setResetter(const std::function<QString()> &resetter); void setResetter(const std::function<QString()> &resetter);
void resetArguments(); void resetArguments();
void setMacroExpander(const Utils::MacroExpander *macroExpander);
struct Data : BaseAspect::Data struct Data : BaseAspect::Data
{ {
@@ -121,7 +120,6 @@ private:
bool m_multiLine = false; bool m_multiLine = false;
mutable bool m_currentlyExpanding = false; mutable bool m_currentlyExpanding = false;
std::function<QString()> m_resetter; std::function<QString()> m_resetter;
const Utils::MacroExpander *m_macroExpander = nullptr;
}; };
class PROJECTEXPLORER_EXPORT UseLibraryPathsAspect : public Utils::BoolAspect class PROJECTEXPLORER_EXPORT UseLibraryPathsAspect : public Utils::BoolAspect
@@ -268,14 +266,9 @@ class PROJECTEXPLORER_EXPORT X11ForwardingAspect : public Utils::StringAspect
public: public:
X11ForwardingAspect(Utils::AspectContainer *container = nullptr); X11ForwardingAspect(Utils::AspectContainer *container = nullptr);
void setMacroExpander(const Utils::MacroExpander *macroExpander);
struct Data : StringAspect::Data { QString display; }; struct Data : StringAspect::Data { QString display; };
QString display() const; QString display() const;
private:
const Utils::MacroExpander *m_macroExpander;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -119,11 +119,6 @@ public:
environment.setSupportForBuildEnvironment(target); environment.setSupportForBuildEnvironment(target);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
x11Forwarding.setMacroExpander(macroExpander());
x11Forwarding.setVisible(HostOsInfo::isAnyUnixHost()); x11Forwarding.setVisible(HostOsInfo::isAnyUnixHost());
interpreter.setLabelText(Tr::tr("Python:")); interpreter.setLabelText(Tr::tr("Python:"));

View File

@@ -518,9 +518,9 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step)
defaultInstallDirCheckBox->setText(QbsProjectManager::Tr::tr("Use default location")); defaultInstallDirCheckBox->setText(QbsProjectManager::Tr::tr("Use default location"));
auto chooser = new VariableChooser(this); auto chooser = new VariableChooser(this);
chooser->addMacroExpanderProvider([this] { return m_qbsStep->macroExpander(); });
chooser->addSupportedWidget(propertyEdit); chooser->addSupportedWidget(propertyEdit);
chooser->addSupportedWidget(installDirChooser->lineEdit()); chooser->addSupportedWidget(installDirChooser->lineEdit());
chooser->addMacroExpanderProvider([step] { return step->macroExpander(); });
propertyEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorMessage) { propertyEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorMessage) {
return validateProperties(edit, errorMessage); return validateProperties(edit, errorMessage);
}); });

View File

@@ -69,7 +69,6 @@ QMakeStep::QMakeStep(BuildStepList *bsl, Id id)
buildType.addOption(Tr::tr("Debug")); buildType.addOption(Tr::tr("Debug"));
buildType.addOption(Tr::tr("Release")); buildType.addOption(Tr::tr("Release"));
userArguments.setMacroExpander(macroExpander());
userArguments.setSettingsKey(QMAKE_ARGUMENTS_KEY); userArguments.setSettingsKey(QMAKE_ARGUMENTS_KEY);
userArguments.setLabelText(Tr::tr("Additional arguments:")); userArguments.setLabelText(Tr::tr("Additional arguments:"));

View File

@@ -84,7 +84,6 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
qmlViewer.setHistoryCompleter("QmlProjectManager.viewer.history"); qmlViewer.setHistoryCompleter("QmlProjectManager.viewer.history");
arguments.setSettingsKey(Constants::QML_VIEWER_ARGUMENTS_KEY); arguments.setSettingsKey(Constants::QML_VIEWER_ARGUMENTS_KEY);
arguments.setMacroExpander(macroExpander());
setCommandLineGetter([this, target] { setCommandLineGetter([this, target] {
const FilePath qmlRuntime = qmlRuntimeFilePath(); const FilePath qmlRuntime = qmlRuntimeFilePath();
@@ -169,8 +168,6 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
return envModifier(environment); return envModifier(environment);
}); });
x11Forwarding.setMacroExpander(macroExpander());
setRunnableModifier([this](ProcessRunData &r) { setRunnableModifier([this](ProcessRunData &r) {
const QmlBuildSystem *bs = static_cast<QmlBuildSystem *>(activeBuildSystem()); const QmlBuildSystem *bs = static_cast<QmlBuildSystem *>(activeBuildSystem());
r.workingDirectory = bs->targetDirectory(); r.workingDirectory = bs->targetDirectory();

View File

@@ -42,9 +42,6 @@ public:
environment.setDeviceSelector(target, EnvironmentAspect::RunDevice); environment.setDeviceSelector(target, EnvironmentAspect::RunDevice);
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
qtLibraries.setSettingsKey("Qt4ProjectManager.QnxRunConfiguration.QtLibPath"); qtLibraries.setSettingsKey("Qt4ProjectManager.QnxRunConfiguration.QtLibPath");

View File

@@ -51,15 +51,10 @@ RemoteLinuxCustomRunConfiguration::RemoteLinuxCustomRunConfiguration(Target *tar
symbolFile.setSettingsKey("RemoteLinux.CustomRunConfig.LocalExecutable"); symbolFile.setSettingsKey("RemoteLinux.CustomRunConfig.LocalExecutable");
symbolFile.setLabelText(Tr::tr("Local executable:")); symbolFile.setLabelText(Tr::tr("Local executable:"));
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
terminal.setVisible(HostOsInfo::isAnyUnixHost()); terminal.setVisible(HostOsInfo::isAnyUnixHost());
x11Forwarding.setMacroExpander(macroExpander());
setDefaultDisplayName(runConfigDefaultDisplayName()); setDefaultDisplayName(runConfigDefaultDisplayName());
setUsesEmptyBuildKeys(); setUsesEmptyBuildKeys();
} }

View File

@@ -52,15 +52,10 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id)
symbolFile.setLabelText(Tr::tr("Executable on host:")); symbolFile.setLabelText(Tr::tr("Executable on host:"));
arguments.setMacroExpander(macroExpander());
workingDir.setMacroExpander(macroExpander());
workingDir.setEnvironment(&environment); workingDir.setEnvironment(&environment);
terminal.setVisible(HostOsInfo::isAnyUnixHost()); terminal.setVisible(HostOsInfo::isAnyUnixHost());
x11Forwarding.setMacroExpander(macroExpander());
connect(&useLibraryPath, &BaseAspect::changed, connect(&useLibraryPath, &BaseAspect::changed,
&environment, &EnvironmentAspect::environmentChanged); &environment, &EnvironmentAspect::environmentChanged);