diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index c1cb7ea8948..4fe91547f27 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -31,6 +31,7 @@ #define ALGORITHM_H #include +#include #if QT_VERSION < 0x050000 #ifndef Q_REQUIRED_RESULT @@ -46,6 +47,20 @@ namespace Utils { +////////////////// +// anyOf +///////////////// + +// anyOf taking a member function pointer +template +bool anyOf(const T &container, R (S::*predicate)() const) +{ + static_assert(std::is_convertible::value + || std::is_convertible::value, + "elements of the container must be convertible to the member function pointer's class."); + static_assert(std::is_convertible::value, "return type of predicate needs to be convertible to bool"); + return std::any_of(container.begin(), container.end(), std::mem_fn(predicate)); +} template bool anyOf(const T &container, F predicate) @@ -53,12 +68,18 @@ bool anyOf(const T &container, F predicate) return std::any_of(container.begin(), container.end(), predicate); } +////////////////// +// allOf +///////////////// template bool allOf(const T &container, F predicate) { return std::all_of(container.begin(), container.end(), predicate); } +////////////////// +// erase +///////////////// template void erase(QList &container, F predicate) { @@ -66,6 +87,9 @@ void erase(QList &container, F predicate) container.end()); } +////////////////// +// contains +///////////////// template bool contains(const T &container, F function) { @@ -76,6 +100,9 @@ bool contains(const T &container, F function) return it != end; } +////////////////// +// findOr +///////////////// template typename T::value_type findOr(const T &container, typename T::value_type other, F function) { @@ -89,23 +116,45 @@ typename T::value_type findOr(const T &container, typename T::value_type other, } template -typename T::value_type bestElementOr(const T &container, typename T::value_type other, F function) +typename T::value_type findOrDefault(const T &container, F function) { - typename T::const_iterator end = container.end(); - typename T::const_iterator begin = container.begin(); + return findOr(container, typename T::value_type(), function); +} - typename T::const_iterator it = std::min_element(begin, end, function); - if (it == end) - return other; - return *it; +////////////////// +// transform +///////////////// + +// transform taking a member function pointer +template +Q_REQUIRED_RESULT +auto transform(const QList &container, R (S::*p)() const) -> QList +{ + static_assert(std::is_convertible::value + || std::is_convertible::value, + "elements of container must be convertible to S"); + QList result; + result.reserve(container.size()); + std::transform(container.begin(), container.end(), + std::back_inserter(result), + std::mem_fn(p)); + return result; +} + +namespace { +// needed for msvc 2010, that doesn't have a declval +// can be removed once we stop supporting it +template +T &&declval(); } // Note: add overloads for other container types as needed template Q_REQUIRED_RESULT -auto transform(const QList &container, F function) -> QList +auto transform(const QList &container, F function) + -> QList()))>::type> { - QList result; + QList()))>::type> result; result.reserve(container.size()); std::transform(container.begin(), container.end(), std::back_inserter(result), @@ -113,6 +162,9 @@ auto transform(const QList &container, F function) -> QList inline void sort(Container &c) { diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 3581c067881..01f3444e9e9 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -156,17 +156,14 @@ Utils::AbstractMacroExpander *BuildConfiguration::macroExpander() QList BuildConfiguration::knownStepLists() const { - return Utils::transform(m_stepLists, [](BuildStepList *list) { - return list->id(); - }); + return Utils::transform(m_stepLists, &BuildStepList::id); } BuildStepList *BuildConfiguration::stepList(Core::Id id) const { - foreach (BuildStepList *list, m_stepLists) - if (id == list->id()) - return list; - return 0; + return Utils::findOrDefault(m_stepLists, [id](BuildStepList *list) { + return id == list->id(); + }); } QVariantMap BuildConfiguration::toMap() const diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp index 3b48de0c752..e900602164f 100644 --- a/src/plugins/projectexplorer/buildsteplist.cpp +++ b/src/plugins/projectexplorer/buildsteplist.cpp @@ -37,6 +37,7 @@ #include "target.h" #include +#include using namespace ProjectExplorer; @@ -121,11 +122,9 @@ bool BuildStepList::isEmpty() const bool BuildStepList::contains(Core::Id id) const { - foreach (BuildStep *bs, steps()) { - if (bs->id() == id) - return true; - } - return false; + return Utils::anyOf(steps(), [id](BuildStep *bs){ + return bs->id() == id; + }); } void BuildStepList::cloneSteps(BuildStepList *source) diff --git a/src/plugins/projectexplorer/customtoolchain.cpp b/src/plugins/projectexplorer/customtoolchain.cpp index 033dffa2e4a..7384bf71750 100644 --- a/src/plugins/projectexplorer/customtoolchain.cpp +++ b/src/plugins/projectexplorer/customtoolchain.cpp @@ -38,6 +38,7 @@ #include "projectexplorerconstants.h" #include "toolchainmanager.h" +#include #include #include #include @@ -218,17 +219,14 @@ IOutputParser *CustomToolChain::outputParser() const QStringList CustomToolChain::headerPathsList() const { - QStringList list; - foreach (const HeaderPath &headerPath, m_systemHeaderPaths) - list << headerPath.path(); - return list; + return Utils::transform(m_systemHeaderPaths, &HeaderPath::path); } void CustomToolChain::setHeaderPaths(const QStringList &list) { - m_systemHeaderPaths.clear(); - foreach (const QString &headerPath, list) - m_systemHeaderPaths << HeaderPath(headerPath.trimmed(), HeaderPath::GlobalHeaderPath); + m_systemHeaderPaths = Utils::transform(list, [](const QString &headerPath) { + return HeaderPath(headerPath.trimmed(), HeaderPath::GlobalHeaderPath); + }); } void CustomToolChain::setCompilerCommand(const FileName &path) @@ -272,9 +270,7 @@ const QStringList &CustomToolChain::cxx11Flags() const void CustomToolChain::setMkspecs(const QString &specs) { - m_mkspecs.clear(); - foreach (const QString &spec, specs.split(QLatin1Char(','))) - m_mkspecs << FileName::fromString(spec); + m_mkspecs = Utils::transform(specs.split(QLatin1Char(',')), &FileName::fromString); } QString CustomToolChain::mkspecs() const diff --git a/src/plugins/projectexplorer/deploymentdata.h b/src/plugins/projectexplorer/deploymentdata.h index d70daafb1bd..ae606f56828 100644 --- a/src/plugins/projectexplorer/deploymentdata.h +++ b/src/plugins/projectexplorer/deploymentdata.h @@ -32,6 +32,8 @@ #include "deployablefile.h" #include "projectexplorer_export.h" +#include + #include #include @@ -60,11 +62,9 @@ public: DeployableFile deployableForLocalFile(const QString &localFilePath) const { - foreach (const DeployableFile &d, m_files) { - if (d.localFilePath().toString() == localFilePath) - return d; - } - return DeployableFile(); + return Utils::findOrDefault(m_files, [&localFilePath](const DeployableFile &d) { + return d.localFilePath().toString() == localFilePath; + }); } bool operator==(const DeploymentData &other) const diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 3229e2dafb0..01033a54155 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -368,11 +369,9 @@ IDevice::Ptr DeviceManager::mutableDevice(Core::Id id) const bool DeviceManager::hasDevice(const QString &name) const { - foreach (const IDevice::Ptr &device, d->devices) { - if (device->displayName() == name) - return true; - } - return false; + return Utils::anyOf(d->devices, [&name](const IDevice::Ptr &device) { + return device->displayName() == name; + }); } IDevice::ConstPtr DeviceManager::find(Core::Id id) const diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp index aec30a22900..fbde8115071 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp @@ -119,9 +119,7 @@ void DeviceSettingsWidget::initGui() const QList &factories = ExtensionSystem::PluginManager::getObjects(); - bool hasDeviceFactories = Utils::anyOf(factories, [](IDeviceFactory *factory) { - return factory->canCreate(); - }); + bool hasDeviceFactories = Utils::anyOf(factories, &IDeviceFactory::canCreate); m_ui->addConfigButton->setEnabled(hasDeviceFactories); diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index caea3647337..35cf7cd57cc 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -35,6 +35,7 @@ #include "projectexplorerconstants.h" #include "toolchainmanager.h" +#include #include #include #include @@ -682,9 +683,7 @@ QVariantMap GccToolChain::toMap() const data.insert(QLatin1String(compilerPlatformCodeGenFlagsKeyC), m_platformCodeGenFlags); data.insert(QLatin1String(compilerPlatformLinkerFlagsKeyC), m_platformLinkerFlags); data.insert(QLatin1String(targetAbiKeyC), m_targetAbi.toString()); - QStringList abiList; - foreach (const Abi &a, m_supportedAbis) - abiList.append(a.toString()); + QStringList abiList = Utils::transform(m_supportedAbis, &Abi::toString); data.insert(QLatin1String(supportedAbisKeyC), abiList); return data; } diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index c2062daed99..3c5a70e3901 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -39,6 +39,7 @@ #include #include +#include #include #include @@ -130,12 +131,11 @@ QVariant ToolChainKitInformation::defaultValue(Kit *k) const Abi abi = Abi::hostAbi(); - foreach (ToolChain *tc, tcList) { - if (tc->targetAbi() == abi) - return tc->id(); - } + ToolChain *tc = Utils::findOr(tcList, tcList.first(), [&abi](ToolChain *tc) { + return tc->targetAbi() == abi; + }); - return tcList.at(0)->id(); + return tc->id(); } QList ToolChainKitInformation::validate(const Kit *k) const diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index dcacc55953f..5b2a74da139 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -409,19 +409,16 @@ Kit *KitManager::find(Core::Id id) if (!id.isValid()) return 0; - foreach (Kit *k, kits()) { - if (k->id() == id) - return k; - } - return 0; + return Utils::findOrDefault(kits(), [id](Kit *k) { + return k->id() == id; + }); } Kit *KitManager::find(const KitMatcher &matcher) { - foreach (Kit *k, d->m_kitList) - if (matcher.matches(k)) - return k; - return 0; + return Utils::findOrDefault(d->m_kitList, [&matcher](Kit *k) { + return matcher.matches(k); + }); } Kit *KitManager::defaultKit() @@ -509,10 +506,8 @@ bool KitManager::registerKit(ProjectExplorer::Kit *k) QTC_ASSERT(k->id().isValid(), return false); - foreach (Kit *current, kits()) { - if (k == current) - return false; - } + if (kits().contains(k)) + return false; k->setDisplayName(uniqueKitName(k, k->displayName(), kits())); diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp index e0920fb8ace..cecaf86ef71 100644 --- a/src/plugins/projectexplorer/kitmodel.cpp +++ b/src/plugins/projectexplorer/kitmodel.cpp @@ -34,6 +34,7 @@ #include "kitmanager.h" #include +#include #include #include @@ -253,11 +254,9 @@ KitManagerConfigWidget *KitModel::widget(const QModelIndex &index) bool KitModel::isDirty() const { - foreach (KitNode *n, m_manualRoot->childNodes) { - if (n->widget->isDirty()) - return true; - } - return false; + return Utils::anyOf(m_manualRoot->childNodes, [](KitNode *n) { + return n->widget->isDirty(); + }); } bool KitModel::isDirty(Kit *k) const @@ -371,15 +370,12 @@ QModelIndex KitModel::index(KitNode *node, int column) const KitNode *KitModel::findWorkingCopy(Kit *k) const { - foreach (KitNode *n, m_autoRoot->childNodes) { - if (n->widget->workingCopy() == k) - return n; - } - foreach (KitNode *n, m_manualRoot->childNodes) { - if (n->widget->workingCopy() == k) - return n; - } - return 0; + auto compareWorkingCopy = [&k](KitNode *n){ return n->widget->workingCopy() == k; }; + + KitNode *n = Utils::findOrDefault(m_autoRoot->childNodes, compareWorkingCopy); + if (!n) + n = Utils::findOrDefault(m_manualRoot->childNodes, compareWorkingCopy); + return n; } KitNode *KitModel::createNode(KitNode *parent, Kit *k) diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index 91d47f44b70..2f37a953f85 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -864,12 +864,8 @@ void MiniProjectTargetSelector::doLayout(bool keepSize) onlySummary = true; } else { if (visibleLineCount < 3) { - foreach (Project *p, SessionManager::projects()) { - if (p->needsConfiguration()) { - visibleLineCount = 3; - break; - } - } + if (Utils::anyOf(SessionManager::projects(), &Project::needsConfiguration)) + visibleLineCount = 3; } if (visibleLineCount) summaryLabelHeight = visibleLineCount * QFontMetrics(m_summaryLabel->font()).height() diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index f0c27eb80a0..357d8d34072 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -227,14 +227,14 @@ void Project::setActiveTarget(Target *target) Target *Project::target(Core::Id id) const { - return Utils::findOr(d->m_targets, 0, [&id](Target *target) { + return Utils::findOrDefault(d->m_targets, [&id](Target *target) { return target->id() == id; }); } Target *Project::target(Kit *k) const { - return Utils::findOr(d->m_targets, 0, [&k](Target *target) { + return Utils::findOrDefault(d->m_targets, [&k](Target *target) { return target->kit() == k; }); } @@ -499,7 +499,7 @@ void Project::setup(QList infoList) continue; Target *t = target(k); if (!t) { - t = Utils::findOr(toRegister, 0, [&k](Target *i){ + t = Utils::findOrDefault(toRegister, [&k](Target *i){ return i->kit() == k; }); } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 1f7e655f17c..fa0d1627ae0 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1490,13 +1490,7 @@ QList ProjectExplorerPlugin::openProjects(const QStringList &fileName } updateActions(); - bool switchToProjectsMode = false; - foreach (Project *p, openedPro) { - if (p->needsConfiguration()) { - switchToProjectsMode = true; - break; - } - } + bool switchToProjectsMode = Utils::anyOf(openedPro, &Project::needsConfiguration); if (!openedPro.isEmpty()) { if (switchToProjectsMode) @@ -2260,12 +2254,11 @@ void ProjectExplorerPlugin::runProjectContextMenu() bool ProjectExplorerPlugin::hasBuildSettings(Project *pro) { - foreach (Project *project, SessionManager::projectOrder(pro)) - if (project + return Utils::anyOf(SessionManager::projectOrder(pro), [](Project *project) { + return project && project->activeTarget() - && project->activeTarget()->activeBuildConfiguration()) - return true; - return false; + && project->activeTarget()->activeBuildConfiguration(); + }); } QPair ProjectExplorerPlugin::buildSettingsEnabled(Project *pro) @@ -2352,12 +2345,11 @@ bool ProjectExplorerPlugin::coreAboutToClose() bool ProjectExplorerPlugin::hasDeploySettings(Project *pro) { - foreach (Project *project, SessionManager::projectOrder(pro)) - if (project->activeTarget() + return Utils::anyOf(SessionManager::projectOrder(pro), [](Project *project) { + return project->activeTarget() && project->activeTarget()->activeDeployConfiguration() - && !project->activeTarget()->activeDeployConfiguration()->stepList()->isEmpty()) - return true; - return false; + && !project->activeTarget()->activeDeployConfiguration()->stepList()->isEmpty(); + }); } void ProjectExplorerPlugin::runProject(Project *pro, RunMode mode, const bool forceSkipDeploy) @@ -2539,15 +2531,14 @@ void ProjectExplorerPlugin::updateDeployActions() bool enableDeploySessionAction = true; if (d->m_projectExplorerSettings.buildBeforeDeploy) { - foreach (Project *project, SessionManager::projectOrder(0)) { - if (project - && project->activeTarget() + auto hasDisabledBuildConfiguration = [](Project *project) { + return project && project->activeTarget() && project->activeTarget()->activeBuildConfiguration() - && !project->activeTarget()->activeBuildConfiguration()->isEnabled()) { - enableDeploySessionAction = false; - break; - } - } + && !project->activeTarget()->activeBuildConfiguration()->isEnabled(); + }; + + if (Utils::anyOf(SessionManager::projectOrder(0), hasDisabledBuildConfiguration)) + enableDeploySessionAction = false; } if (!hasProjects || !hasDeploySettings(0) || BuildManager::isBuilding()) enableDeploySessionAction = false; @@ -2885,9 +2876,7 @@ void ProjectExplorerPlugin::addNewFile() QVariantMap map; map.insert(QLatin1String(Constants::PREFERRED_PROJECT_NODE), QVariant::fromValue(d->m_currentNode)); if (d->m_currentProject) { - QList profileIds; - foreach (Target *target, d->m_currentProject->targets()) - profileIds << target->id(); + QList profileIds = Utils::transform(d->m_currentProject->targets(), &Target::id); map.insert(QLatin1String(Constants::PROJECT_KIT_IDS), QVariant::fromValue(profileIds)); } ICore::showNewItemDialog(tr("New File", "Title of dialog"), @@ -2907,9 +2896,7 @@ void ProjectExplorerPlugin::addNewSubproject() QVariantMap map; map.insert(QLatin1String(Constants::PREFERRED_PROJECT_NODE), QVariant::fromValue(d->m_currentNode)); if (d->m_currentProject) { - QList profileIds; - foreach (Target *target, d->m_currentProject->targets()) - profileIds << target->id(); + QList profileIds = Utils::transform(d->m_currentProject->targets(), &Target::id); map.insert(QLatin1String(Constants::PROJECT_KIT_IDS), QVariant::fromValue(profileIds)); } diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index 0d059fed757..f95f1c9b378 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -33,6 +33,8 @@ #include "projectnodes.h" #include "projectwizardpage.h" +#include +#include #include #include @@ -128,9 +130,7 @@ void ProjectFileWizardExtension::firstExtensionPageShown( if (debugExtension) qDebug() << Q_FUNC_INFO << files.size(); - QStringList fileNames; - foreach (const GeneratedFile &f, files) - fileNames.push_back(f.path()); + QStringList fileNames = Utils::transform(files, &GeneratedFile::path); m_context->page->setFiles(fileNames); QStringList filePaths; @@ -140,8 +140,7 @@ void ProjectFileWizardExtension::firstExtensionPageShown( filePaths << generatedProjectFilePath(files); } else { projectAction = ProjectExplorer::AddNewFile; - foreach (const GeneratedFile &gf, files) - filePaths << gf.path(); + filePaths = Utils::transform(files, &GeneratedFile::path); } Node *contextNode = extraValues.value(QLatin1String(Constants::PREFERRED_PROJECT_NODE)).value(); @@ -204,9 +203,7 @@ bool ProjectFileWizardExtension::processProject( } *removeOpenProjectAttribute = true; } else { - QStringList filePaths; - foreach (const GeneratedFile &generatedFile, files) - filePaths << generatedFile.path(); + QStringList filePaths = Utils::transform(files, &GeneratedFile::path); if (!folder->addFiles(filePaths)) { *errorMessage = tr("Failed to add one or more files to project\n\"%1\" (%2)."). arg(folder->path(), filePaths.join(QString(QLatin1Char(',')))); diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index f71e25f9486..7bb245deeae 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -42,6 +42,7 @@ #include #include +#include namespace ProjectExplorer { namespace Internal { @@ -67,20 +68,18 @@ int SessionModel::rowCount(const QModelIndex &) const QStringList pathsToBaseNames(const QStringList &paths) { - QStringList stringList; - foreach (const QString &path, paths) - stringList.append(QFileInfo(path).completeBaseName()); - return stringList; + return Utils::transform(paths, [](const QString &path) { + return QFileInfo(path).completeBaseName(); + }); } QStringList pathsWithTildeHomePath(const QStringList &paths) { - QStringList stringList; - foreach (const QString &path, paths) - stringList.append(Utils::withTildeHomePath(QDir::toNativeSeparators(path))); - return stringList; + return Utils::transform(paths, [](const QString &path) { + return Utils::withTildeHomePath(QDir::toNativeSeparators(path)); + }); } QVariant SessionModel::data(const QModelIndex &index, int role) const diff --git a/src/plugins/projectexplorer/selectablefilesmodel.cpp b/src/plugins/projectexplorer/selectablefilesmodel.cpp index 3c096164920..4d267e6810a 100644 --- a/src/plugins/projectexplorer/selectablefilesmodel.cpp +++ b/src/plugins/projectexplorer/selectablefilesmodel.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -111,27 +112,15 @@ bool SelectableFilesModel::filter(Tree *t) if (m_files.contains(t->fullPath)) return false; - bool showFilterMatch = false; - - //First loop through show file filters and - //if any of them match, cotinue checking. - foreach (const Glob &g, m_showFilesFilter) { - if (g.isMatch(t->name)) { - showFilterMatch = true; - break; - } - } + auto matchesTreeName = [t](const Glob &g) { + return g.isMatch(t->name); + }; //If none of the "show file" filters match just return - if (!showFilterMatch) + if (!Utils::anyOf(m_showFilesFilter, matchesTreeName)) return true; - foreach (const Glob &g, m_hideFilesFilter) { - if (g.isMatch(t->name)) - return true; - } - - return false; + return Utils::anyOf(m_hideFilesFilter, matchesTreeName); } void SelectableFilesModel::buildTree(const QString &baseDir, Tree *tree, QFutureInterface &fi, int symlinkDepth) diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 9ca7f20d84a..36f4c714456 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -44,6 +44,7 @@ #include +#include #include #include @@ -512,11 +513,9 @@ Project *SessionManager::projectForNode(Node *node) Q_ASSERT(rootProjectNode); - foreach (Project *p, d->m_projects) - if (p->rootProjectNode() == rootProjectNode) - return p; - - return 0; + return Utils::findOrDefault(d->m_projects, [rootProjectNode](Project *p) { + return p->rootProjectNode() == rootProjectNode; + }); } QList SessionManager::nodesForFile(const QString &fileName, Project *project) diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index cb228111704..db28f4429dc 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include @@ -218,9 +219,7 @@ void Target::addBuildConfiguration(BuildConfiguration *configuration) // Check that we don't have a configuration with the same displayName QString configurationDisplayName = configuration->displayName(); - QStringList displayNames; - foreach (const BuildConfiguration *bc, d->m_buildConfigurations) - displayNames << bc->displayName(); + QStringList displayNames = Utils::transform(d->m_buildConfigurations, &BuildConfiguration::displayName); configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames); if (configurationDisplayName != configuration->displayName()) { if (configuration->usesDefaultDisplayName()) @@ -302,9 +301,7 @@ void Target::addDeployConfiguration(DeployConfiguration *dc) // Check that we don't have a configuration with the same displayName QString configurationDisplayName = dc->displayName(); - QStringList displayNames; - foreach (const DeployConfiguration *current, d->m_deployConfigurations) - displayNames << current->displayName(); + QStringList displayNames = Utils::transform(d->m_deployConfigurations, &DeployConfiguration::displayName); configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames); dc->setDisplayName(configurationDisplayName); @@ -405,9 +402,7 @@ void Target::addRunConfiguration(RunConfiguration* runConfiguration) // Check that we don't have a configuration with the same displayName QString configurationDisplayName = runConfiguration->displayName(); - QStringList displayNames; - foreach (const RunConfiguration *rc, d->m_runConfigurations) - displayNames << rc->displayName(); + QStringList displayNames = Utils::transform(d->m_runConfigurations, &RunConfiguration::displayName); configurationDisplayName = Project::makeUnique(configurationDisplayName, displayNames); runConfiguration->setDisplayName(configurationDisplayName); @@ -624,13 +619,10 @@ void Target::updateDefaultRunConfigurations() // Create new RCs and put them into newConfigured/newUnconfigured foreach (Core::Id id, autoCreateFactoryIds) { - IRunConfigurationFactory *factory = 0; - foreach (IRunConfigurationFactory *i, rcFactories) { - if (i->canCreate(this, id)) { - factory = i; - break; - } - } + IRunConfigurationFactory *factory = Utils::findOrDefault(rcFactories, + [this, id] (IRunConfigurationFactory *i) { + return i->canCreate(this, id); + }); if (!factory) continue; @@ -687,12 +679,10 @@ void Target::updateDefaultRunConfigurations() RunConfiguration *selected = newConfigured.at(0); // Try to find a runconfiguration that matches the project name. That is a good // candidate for something to run initially. - foreach (RunConfiguration *rc, newConfigured) { - if (rc->displayName() == project()->displayName()) { - selected = rc; - break; - } - } + selected = Utils::findOr(newConfigured, selected, + [this] (RunConfiguration *rc) { + return rc->displayName() == project()->displayName(); + }); setActiveRunConfiguration(selected); } else if (!newUnconfigured.isEmpty()){ setActiveRunConfiguration(newUnconfigured.at(0)); diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp index 228bf62cad4..5099281ab39 100644 --- a/src/plugins/projectexplorer/targetsetuppage.cpp +++ b/src/plugins/projectexplorer/targetsetuppage.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -261,10 +262,7 @@ void TargetSetupPage::setKitSelected(Core::Id id, bool selected) bool TargetSetupPage::isComplete() const { - foreach (TargetSetupWidget *widget, m_widgets) - if (widget->isKitSelected()) - return true; - return false; + return Utils::anyOf(m_widgets, &TargetSetupWidget::isKitSelected); } void TargetSetupPage::setupWidgets() diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index aeb04af22cf..7688521a34c 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -313,11 +314,9 @@ ToolChain *ToolChainManager::findToolChain(const QString &id) if (id.isEmpty()) return 0; - foreach (ToolChain *tc, d->m_toolChains) { - if (tc->id() == id) - return tc; - } - return 0; + return Utils::findOrDefault(d->m_toolChains, [&id](ToolChain *tc) { + return tc->id() == id; + }); } FileName ToolChainManager::defaultDebugger(const Abi &abi) diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index a757b018801..705b7b1f52f 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -39,6 +39,7 @@ #include #include +#include #include #include @@ -245,20 +246,18 @@ ToolChainConfigWidget *ToolChainModel::widget(const QModelIndex &index) bool ToolChainModel::isDirty() const { - foreach (ToolChainNode *n, m_manualRoot->childNodes) { - if (n->changed) - return true; - } - return false; + return Utils::anyOf(m_manualRoot->childNodes, + [](ToolChainNode *n) { + return n->changed; + }); } bool ToolChainModel::isDirty(ToolChain *tc) const { - foreach (ToolChainNode *n, m_manualRoot->childNodes) { - if (n->toolChain == tc && n->changed) - return true; - } - return false; + return Utils::anyOf(m_manualRoot->childNodes, + [tc](ToolChainNode *n) { + return n->toolChain == tc && n->changed; + }); } void ToolChainModel::setDirty() @@ -328,13 +327,7 @@ void ToolChainModel::apply() void ToolChainModel::markForRemoval(ToolChain *tc) { - ToolChainNode *node = 0; - foreach (ToolChainNode *n, m_manualRoot->childNodes) { - if (n->toolChain == tc) { - node = n; - break; - } - } + ToolChainNode *node = findToolChain(m_manualRoot->childNodes, tc); if (node) { emit beginRemoveRows(index(m_manualRoot), m_manualRoot->childNodes.indexOf(node), m_manualRoot->childNodes.indexOf(node)); m_manualRoot->childNodes.removeOne(node); @@ -380,17 +373,23 @@ ToolChainNode *ToolChainModel::createNode(ToolChainNode *parent, ToolChain *tc, return node; } +ToolChainNode *ToolChainModel::findToolChain(const QList &container, ToolChain *tc) +{ + return Utils::findOrDefault(container, [tc] (ToolChainNode *n) { + return n->toolChain == tc; + }); +} + void ToolChainModel::addToolChain(ToolChain *tc) { - QList nodes = m_toAddList; - foreach (ToolChainNode *n, nodes) { - if (n->toolChain == tc) { - m_toAddList.removeOne(n); - // do not delete n: Still used elsewhere! - return; - } + ToolChainNode *n = findToolChain(m_toAddList, tc); + if (n) { + m_toAddList.removeOne(n); + // do not delete n: Still used elsewhere! + return; } + ToolChainNode *parent = m_manualRoot; if (tc->isAutoDetected()) parent = m_autoRoot; @@ -405,13 +404,11 @@ void ToolChainModel::addToolChain(ToolChain *tc) void ToolChainModel::removeToolChain(ToolChain *tc) { - QList nodes = m_toRemoveList; - foreach (ToolChainNode *n, nodes) { - if (n->toolChain == tc) { - m_toRemoveList.removeOne(n); - delete n; - return; - } + ToolChainNode *n = findToolChain(m_toRemoveList, tc); + if (n) { + m_toRemoveList.removeOne(n); + delete n; + return; } ToolChainNode *parent = m_manualRoot; diff --git a/src/plugins/projectexplorer/toolchainoptionspage.h b/src/plugins/projectexplorer/toolchainoptionspage.h index cccff782d78..58fd2082115 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.h +++ b/src/plugins/projectexplorer/toolchainoptionspage.h @@ -98,6 +98,8 @@ private slots: private: QModelIndex index(ToolChainNode *, int column = 0) const; ToolChainNode *createNode(ToolChainNode *parent, ToolChain *tc, bool changed); + static ToolChainNode *findToolChain(const QList &container, ToolChain *tc); + ToolChainNode *m_root; ToolChainNode *m_autoRoot; diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 50505a4c66b..d1180df1349 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -804,6 +804,7 @@ bool QmakePriFileNode::deploysFolder(const QString &folder) const const QChar slash = QLatin1Char('/'); if (!f.endsWith(slash)) f.append(slash); + foreach (const QString &wf, m_watchedFolders) { if (f.startsWith(wf) && (wf.endsWith(slash) @@ -955,9 +956,7 @@ bool QmakePriFileNode::removeSubProjects(const QStringList &proFilePaths) QStringList failedOriginalFiles; changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), proFilePaths, &failedOriginalFiles, RemoveFromProFile); - QStringList simplifiedProFiles; - foreach (const QString &proFile, failedOriginalFiles) - simplifiedProFiles.append(simplifyProFilePath(proFile)); + QStringList simplifiedProFiles = Utils::transform(failedOriginalFiles, &simplifyProFilePath); QStringList failedSimplifiedFiles; changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), simplifiedProFiles, &failedSimplifiedFiles, RemoveFromProFile); diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 37c2840a42e..5c50e785f57 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -264,9 +264,7 @@ static QString fixStringForTags(const QString &string) static QStringList trimStringList(const QStringList &stringlist) { - return Utils::transform(stringlist, [](const QString &string) { - return string.trimmed(); - }); + return Utils::transform(stringlist, &QString::trimmed); } static QString relativeOrInstallPath(const QString &path, const QString &manifestPath, @@ -782,10 +780,9 @@ bool ExamplesListModelFilter::filterAcceptsRow(int sourceRow, const QModelIndex const QStringList tags = sourceModel()->index(sourceRow, 0, sourceParent).data(Tags).toStringList(); if (!m_filterTags.isEmpty()) { - foreach (const QString &tag, m_filterTags) - if (!tags.contains(tag, Qt::CaseInsensitive)) - return false; - return true; + return Utils::allOf(m_filterTags, [tags](const QString &filterTag) { + return tags.contains(filterTag); + }); } if (!m_searchString.isEmpty()) { diff --git a/src/plugins/qtsupport/qtkitconfigwidget.cpp b/src/plugins/qtsupport/qtkitconfigwidget.cpp index 2613e7d439d..129ab7f9539 100644 --- a/src/plugins/qtsupport/qtkitconfigwidget.cpp +++ b/src/plugins/qtsupport/qtkitconfigwidget.cpp @@ -37,6 +37,7 @@ #include #include +#include #include #include @@ -50,9 +51,7 @@ QtKitConfigWidget::QtKitConfigWidget(ProjectExplorer::Kit *k, const ProjectExplo m_combo = new QComboBox; m_combo->addItem(tr("None"), -1); - QList versionIds; - foreach (BaseQtVersion *v, QtVersionManager::versions()) - versionIds.append(v->uniqueId()); + QList versionIds = Utils::transform(QtVersionManager::versions(), &BaseQtVersion::uniqueId); versionsChanged(versionIds, QList(), QList()); m_manageButton = new QPushButton(KitConfigWidget::msgManage()); diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 171ac83ab7c..8a4f514eb59 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -151,9 +151,7 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent) m_manualItem->setFirstColumnSpanned(true); m_manualItem->setFlags(Qt::ItemIsEnabled); - QList additions; - foreach (BaseQtVersion *v, QtVersionManager::versions()) - additions.append(v->uniqueId()); + QList additions = transform(QtVersionManager::versions(), &BaseQtVersion::uniqueId); updateQtVersions(additions, QList(), QList()); diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 17c0bdbbeed..3496d61ba02 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -641,13 +641,9 @@ FileName QtVersionManager::findQMakeBinaryFromMakefile(const QString &makefile) BaseQtVersion *QtVersionManager::qtVersionForQMakeBinary(const FileName &qmakePath) { - foreach (BaseQtVersion *version, versions()) { - if (version->qmakeCommand() == qmakePath) { - return version; - break; - } - } - return 0; + return Utils::findOrDefault(versions(), [&qmakePath](BaseQtVersion *v) { + return v->qmakeCommand() == qmakePath; + }); } void dumpQMakeAssignments(const QList &list) diff --git a/src/plugins/qtsupport/uicodemodelsupport.cpp b/src/plugins/qtsupport/uicodemodelsupport.cpp index 134d50cc840..5830dde104c 100644 --- a/src/plugins/qtsupport/uicodemodelsupport.cpp +++ b/src/plugins/qtsupport/uicodemodelsupport.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -333,11 +334,9 @@ UiCodeModelManager::~UiCodeModelManager() static UiCodeModelSupport *findUiFile(const QList &range, const QString &uiFile) { - foreach (UiCodeModelSupport *support, range) { - if (support->uiFileName() == uiFile) - return support; - } - return 0; + return Utils::findOrDefault(range, [uiFile](UiCodeModelSupport *support) { + return support->uiFileName() == uiFile; + }); } void UiCodeModelManager::update(ProjectExplorer::Project *project, QHash uiHeaders)