RunConfiguration: Avoid unneeded calls to availableCreators()

It has been used twice on each Target::updateDefaultRunConfigurations():
Once to help filter out potentially interesting factories, and then
to actually retrieve the creators from the interesting factories.

The same result can be obtained with less effort and less code.

Change-Id: Ic83423bbbc172c842ec5a55fcd6ad83106e268aa
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2018-02-22 08:51:20 +01:00
parent 39b66f2cb8
commit 38d15ebe2f
3 changed files with 19 additions and 23 deletions

View File

@@ -620,12 +620,9 @@ IRunConfigurationFactory *IRunConfigurationFactory::find(Target *parent, RunConf
});
}
QList<IRunConfigurationFactory *> IRunConfigurationFactory::find(Target *parent)
const QList<IRunConfigurationFactory *> IRunConfigurationFactory::allFactories()
{
return Utils::filtered(g_runConfigurationFactories,
[&parent](IRunConfigurationFactory *factory) {
return factory->canHandle(parent) && !factory->availableCreators(parent).isEmpty();
});
return g_runConfigurationFactories;
}
FixedRunConfigurationFactory::FixedRunConfigurationFactory(const QString &displayName,

View File

@@ -320,7 +320,7 @@ public:
static IRunConfigurationFactory *find(Target *parent, const QVariantMap &map);
static IRunConfigurationFactory *find(Target *parent, RunConfiguration *rc);
static QList<IRunConfigurationFactory *> find(Target *parent);
static const QList<IRunConfigurationFactory *> allFactories();
Core::Id runConfigurationBaseId() const { return m_runConfigBaseId; }

View File

@@ -536,8 +536,22 @@ void Target::updateDefaultDeployConfigurations()
void Target::updateDefaultRunConfigurations()
{
const QList<IRunConfigurationFactory *> rcFactories = IRunConfigurationFactory::find(this);
if (rcFactories.isEmpty()) {
// find all RC ids that can get created:
QList<RunConfigurationCreationInfo> allAvailableFactories;
QList<RunConfigurationCreationInfo> autoCreateFactories;
for (IRunConfigurationFactory *rcFactory : IRunConfigurationFactory::allFactories()) {
if (rcFactory->canHandle(this)) {
const QList<RunConfigurationCreationInfo> creators = rcFactory->availableCreators(this);
for (const RunConfigurationCreationInfo &creator : creators) {
allAvailableFactories.append(creator); // Manual and Auto
if (creator.creationMode == RunConfigurationCreationInfo::AlwaysCreate)
autoCreateFactories.append(creator); // Auto only.
}
}
}
if (allAvailableFactories.isEmpty()) {
qWarning("No run configuration factory found for target id '%s'.", qPrintable(id().toString()));
return;
}
@@ -553,21 +567,6 @@ void Target::updateDefaultRunConfigurations()
[](const RunConfiguration *rc) { return rc->isConfigured(); });
int configuredCount = existingConfigured.count();
// find all RC ids that can get created:
QList<RunConfigurationCreationInfo> allAvailableFactories;
QList<RunConfigurationCreationInfo> autoCreateFactories;
for (IRunConfigurationFactory *rcFactory : rcFactories) {
if (rcFactory->canHandle(this)) {
const QList<RunConfigurationCreationInfo> creators = rcFactory->availableCreators(this);
for (const RunConfigurationCreationInfo &creator : creators) {
allAvailableFactories.append(creator); // Manual and Auto
if (creator.creationMode == RunConfigurationCreationInfo::AlwaysCreate)
autoCreateFactories.append(creator); // Auto only.
}
}
}
// Put outdated RCs into toRemove, do not bother with factories
// that produce already existing RCs
QList<RunConfiguration *> toRemove;