aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-01-31 10:18:24 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-02-21 17:25:16 +0000
commitb1b58a735a8d6f8f9fb586a877c145326f4b1628 (patch)
treec4b4c37e3469df8a355d82bf1b1c882d569a5c2a /src/lib
parent1c65b79eb3da939de372b10b603729c4621caba8 (diff)
Remove all usages of Q_FOREACH from the library
This will make it easier to experiment with exchanging Qt containers for STL ones, for instance. Change-Id: Ie591fa54b5241ad4841b1ebcfb78b72932cd2b38 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/corelib/api/languageinfo.cpp5
-rw-r--r--src/lib/corelib/api/project.cpp103
-rw-r--r--src/lib/corelib/api/projectdata.cpp17
-rw-r--r--src/lib/corelib/api/projectfileupdater.cpp7
-rw-r--r--src/lib/corelib/api/runenvironment.cpp6
-rw-r--r--src/lib/corelib/buildgraph/artifact.cpp3
-rw-r--r--src/lib/corelib/buildgraph/artifactcleaner.cpp2
-rw-r--r--src/lib/corelib/buildgraph/artifactvisitor.cpp5
-rw-r--r--src/lib/corelib/buildgraph/buildgraph.cpp29
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.cpp79
-rw-r--r--src/lib/corelib/buildgraph/buildgraphnode.cpp7
-rw-r--r--src/lib/corelib/buildgraph/buildgraphnode.h2
-rw-r--r--src/lib/corelib/buildgraph/cycledetector.cpp5
-rw-r--r--src/lib/corelib/buildgraph/emptydirectoriesremover.cpp4
-rw-r--r--src/lib/corelib/buildgraph/executor.cpp119
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.cpp25
-rw-r--r--src/lib/corelib/buildgraph/nodetreedumper.cpp4
-rw-r--r--src/lib/corelib/buildgraph/processcommandexecutor.cpp2
-rw-r--r--src/lib/corelib/buildgraph/productbuilddata.cpp4
-rw-r--r--src/lib/corelib/buildgraph/productinstaller.cpp5
-rw-r--r--src/lib/corelib/buildgraph/projectbuilddata.cpp26
-rw-r--r--src/lib/corelib/buildgraph/qtmocscanner.cpp4
-rw-r--r--src/lib/corelib/buildgraph/rulecommands.cpp4
-rw-r--r--src/lib/corelib/buildgraph/rulegraph.cpp26
-rw-r--r--src/lib/corelib/buildgraph/rulenode.cpp9
-rw-r--r--src/lib/corelib/buildgraph/rulesapplicator.cpp32
-rw-r--r--src/lib/corelib/buildgraph/rulesapplicator.h2
-rw-r--r--src/lib/corelib/buildgraph/timestampsupdater.cpp4
-rw-r--r--src/lib/corelib/buildgraph/transformer.cpp11
-rw-r--r--src/lib/corelib/jsextensions/environmentextension.cpp2
-rw-r--r--src/lib/corelib/jsextensions/jsextensions.cpp2
-rw-r--r--src/lib/corelib/language/astimportshandler.cpp6
-rw-r--r--src/lib/corelib/language/filetags.cpp4
-rw-r--r--src/lib/corelib/language/identifiersearch.cpp4
-rw-r--r--src/lib/corelib/language/item.cpp9
-rw-r--r--src/lib/corelib/language/itemreaderastvisitor.cpp2
-rw-r--r--src/lib/corelib/language/itemreadervisitorstate.cpp4
-rw-r--r--src/lib/corelib/language/language.cpp56
-rw-r--r--src/lib/corelib/language/loader.cpp2
-rw-r--r--src/lib/corelib/language/moduleloader.cpp140
-rw-r--r--src/lib/corelib/language/modulemerger.cpp13
-rw-r--r--src/lib/corelib/language/projectresolver.cpp72
-rw-r--r--src/lib/corelib/language/scriptengine.cpp11
-rw-r--r--src/lib/corelib/language/value.cpp3
-rw-r--r--src/lib/corelib/logging/logger.cpp4
-rw-r--r--src/lib/corelib/tools/error.cpp3
-rw-r--r--src/lib/corelib/tools/fileinfo.cpp10
-rw-r--r--src/lib/corelib/tools/jsliterals.cpp2
-rw-r--r--src/lib/corelib/tools/msvcinfo.cpp4
-rw-r--r--src/lib/corelib/tools/projectgeneratormanager.cpp6
-rw-r--r--src/lib/corelib/tools/qttools.cpp2
-rw-r--r--src/lib/corelib/tools/scannerpluginmanager.cpp5
-rw-r--r--src/lib/corelib/tools/scripttools.h2
-rw-r--r--src/lib/corelib/tools/settingscreator.cpp4
-rw-r--r--src/lib/corelib/tools/settingsmodel.cpp13
-rw-r--r--src/lib/corelib/tools/setupprojectparameters.cpp2
-rw-r--r--src/lib/corelib/tools/vsenvironmentdetector.cpp9
57 files changed, 486 insertions, 461 deletions
diff --git a/src/lib/corelib/api/languageinfo.cpp b/src/lib/corelib/api/languageinfo.cpp
index 4ba3c6c01..33f128b9f 100644
--- a/src/lib/corelib/api/languageinfo.cpp
+++ b/src/lib/corelib/api/languageinfo.cpp
@@ -40,6 +40,7 @@
#include "languageinfo.h"
#include <language/builtindeclarations.h>
+#include <tools/qttools.h>
#include <tools/version.h>
#include <QtCore/qstringlist.h>
@@ -64,7 +65,7 @@ QByteArray LanguageInfo::qmlTypeInfo()
// Individual Components:
auto typeNames = builtins.allTypeNames();
typeNames.sort();
- foreach (const QString &typeName, typeNames) {
+ for (const QString &typeName : qAsConst(typeNames)) {
QByteArray utf8TypeName = typeName.toUtf8();
result.append(" Component {\n");
result.append(QByteArray(" name: \"") + utf8TypeName + QByteArray("\"\n"));
@@ -84,7 +85,7 @@ QByteArray LanguageInfo::qmlTypeInfo()
(const Internal::PropertyDeclaration &a, const Internal::PropertyDeclaration &b) {
return a.name() < b.name();
});
- foreach (const Internal::PropertyDeclaration &property, properties) {
+ for (const Internal::PropertyDeclaration &property : qAsConst(properties)) {
result.append(" Property { name: \"");
result.append(property.name().toUtf8());
result.append("\"; ");
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index b1d626364..b83ea7411 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -75,6 +75,7 @@
#include <tools/scripttools.h>
#include <tools/setupprojectparameters.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qmutex.h>
@@ -99,7 +100,7 @@ static void loadPlugins(const QStringList &_pluginPaths, const Logger &logger)
return;
QStringList pluginPaths;
- foreach (const QString &pluginPath, _pluginPaths) {
+ for (const QString &pluginPath : _pluginPaths) {
if (!FileInfo::exists(pluginPath)) {
#ifndef QBS_STATIC_LIB
logger.qbsWarning() << Tr::tr("Plugin path '%1' does not exist.")
@@ -134,7 +135,7 @@ static void addDependencies(QList<ResolvedProductPtr> &products)
{
for (int i = 0; i < products.count(); ++i) {
const ResolvedProductPtr &product = products.at(i);
- foreach (const ResolvedProductPtr &dependency, product->dependencies) {
+ for (const ResolvedProductPtr &dependency : qAsConst(product->dependencies)) {
if (!products.contains(dependency))
products << dependency;
}
@@ -176,7 +177,7 @@ InstallJob *ProjectPrivate::installProducts(const QList<ResolvedProductPtr> &pro
QList<ResolvedProductPtr> ProjectPrivate::internalProducts(const QList<ProductData> &products) const
{
QList<ResolvedProductPtr> internalProducts;
- foreach (const ProductData &product, products) {
+ for (const ProductData &product : products) {
if (product.isEnabled())
internalProducts << internalProduct(product);
}
@@ -187,11 +188,11 @@ static QList<ResolvedProductPtr> enabledInternalProducts(const ResolvedProjectCo
bool includingNonDefault)
{
QList<ResolvedProductPtr> products;
- foreach (const ResolvedProductPtr &p, project->products) {
+ for (const ResolvedProductPtr &p : qAsConst(project->products)) {
if (p->enabled && (includingNonDefault || p->builtByDefault()))
products << p;
}
- foreach (const ResolvedProjectConstPtr &subProject, project->subProjects)
+ for (const ResolvedProjectConstPtr &subProject : qAsConst(project->subProjects))
products << enabledInternalProducts(subProject, includingNonDefault);
return products;
}
@@ -204,13 +205,13 @@ QList<ResolvedProductPtr> ProjectPrivate::allEnabledInternalProducts(bool includ
static ResolvedProductPtr internalProductForProject(const ResolvedProjectConstPtr &project,
const ProductData &product)
{
- foreach (const ResolvedProductPtr &resolvedProduct, project->products) {
+ for (const ResolvedProductPtr &resolvedProduct : qAsConst(project->products)) {
if (product.name() == resolvedProduct->name
&& product.profile() == resolvedProduct->profile) {
return resolvedProduct;
}
}
- foreach (const ResolvedProjectConstPtr &subProject, project->subProjects) {
+ for (const ResolvedProjectConstPtr &subProject : qAsConst(project->subProjects)) {
const ResolvedProductPtr &p = internalProductForProject(subProject, product);
if (p)
return p;
@@ -225,7 +226,7 @@ ResolvedProductPtr ProjectPrivate::internalProduct(const ProductData &product) c
ProductData ProjectPrivate::findProductData(const ProductData &product) const
{
- foreach (const ProductData &p, m_projectData.allProducts()) {
+ for (const ProductData &p : m_projectData.allProducts()) {
if (p.name() == product.name() && p.profile() == product.profile())
return p;
}
@@ -235,7 +236,7 @@ ProductData ProjectPrivate::findProductData(const ProductData &product) const
QList<ProductData> ProjectPrivate::findProductsByName(const QString &name) const
{
QList<ProductData> list;
- foreach (const ProductData &p, m_projectData.allProducts()) {
+ for (const ProductData &p : m_projectData.allProducts()) {
if (p.name() == name)
list << p;
}
@@ -244,7 +245,7 @@ QList<ProductData> ProjectPrivate::findProductsByName(const QString &name) const
GroupData ProjectPrivate::findGroupData(const ProductData &product, const QString &groupName) const
{
- foreach (const GroupData &g, product.groups()) {
+ for (const GroupData &g : product.groups()) {
if (g.name() == groupName)
return g;
}
@@ -258,13 +259,13 @@ GroupData ProjectPrivate::createGroupDataFromGroup(const GroupPtr &resolvedGroup
group.d->name = resolvedGroup->name;
group.d->prefix = resolvedGroup->prefix;
group.d->location = resolvedGroup->location;
- foreach (const SourceArtifactConstPtr &sa, resolvedGroup->files) {
+ for (const SourceArtifactConstPtr &sa : qAsConst(resolvedGroup->files)) {
ArtifactData artifact = createApiSourceArtifact(sa);
setupInstallData(artifact, product);
group.d->sourceArtifacts << artifact;
}
if (resolvedGroup->wildcards) {
- foreach (const SourceArtifactConstPtr &sa, resolvedGroup->wildcards->files) {
+ for (const SourceArtifactConstPtr &sa : qAsConst(resolvedGroup->wildcards->files)) {
ArtifactData artifact = createApiSourceArtifact(sa);
setupInstallData(artifact, product);
group.d->sourceArtifactsFromWildcards << artifact;
@@ -323,7 +324,7 @@ void ProjectPrivate::addGroup(const ProductData &product, const QString &groupNa
const QList<ResolvedProductPtr> resolvedProducts = internalProducts(products);
QBS_CHECK(products.count() == resolvedProducts.count());
- foreach (const GroupPtr &resolvedGroup, resolvedProducts.first()->groups) {
+ for (const GroupPtr &resolvedGroup : qAsConst(resolvedProducts.first()->groups)) {
if (resolvedGroup->name == groupName) {
throw ErrorInfo(Tr::tr("Group '%1' already exists in product '%2'.")
.arg(groupName, product.name()), resolvedGroup->location);
@@ -367,8 +368,8 @@ ProjectPrivate::GroupUpdateContext ProjectPrivate::getGroupContext(const Product
context.resolvedProducts = internalProducts(context.products);
const QString groupName = group.isValid() ? group.name() : product.name();
- foreach (const ResolvedProductPtr &p, context.resolvedProducts) {
- foreach (const GroupPtr &g, p->groups) {
+ for (const ResolvedProductPtr &p : qAsConst(context.resolvedProducts)) {
+ for (const GroupPtr &g : qAsConst(p->groups)) {
if (g->name == groupName) {
context.resolvedGroups << g;
break;
@@ -377,7 +378,7 @@ ProjectPrivate::GroupUpdateContext ProjectPrivate::getGroupContext(const Product
}
if (context.resolvedGroups.isEmpty())
throw ErrorInfo(Tr::tr("Group '%1' does not exist.").arg(groupName));
- foreach (const ProductData &p, context.products) {
+ for (const ProductData &p : qAsConst(context.products)) {
const GroupData &g = findGroupData(p, groupName);
QBS_CHECK(p.isValid());
context.groups << g;
@@ -392,7 +393,7 @@ static bool matchesWildcard(const QString &filePath, const GroupConstPtr &group)
{
if (!group->wildcards)
return false;
- foreach (const QString &pattern, group->wildcards->patterns) {
+ for (const QString &pattern : qAsConst(group->wildcards->patterns)) {
QString fullPattern;
if (QFileInfo(group->prefix).isAbsolute()) {
fullPattern = group->prefix;
@@ -431,7 +432,7 @@ ProjectPrivate::FileListUpdateContext ProjectPrivate::getFileListContext(const P
QString baseDirPath = QFileInfo(product.location().filePath()).dir().absolutePath()
+ QLatin1Char('/') + prefix;
QDir baseDir(baseDirPath);
- foreach (const QString &filePath, filePaths) {
+ for (const QString &filePath : filePaths) {
const QString absPath = QDir::cleanPath(FileInfo::resolvePath(baseDirPath, filePath));
if (filesContext.absoluteFilePaths.contains(absPath))
throw ErrorInfo(Tr::tr("File '%1' appears more than once.").arg(absPath));
@@ -465,9 +466,9 @@ void ProjectPrivate::addFiles(const ProductData &product, const GroupData &group
// We do not check for entries in other groups, because such doublettes might be legitimate
// due to conditions.
- foreach (const GroupPtr &group, groupContext.resolvedGroups) {
- foreach (const QString &filePath, filesContext.absoluteFilePaths) {
- foreach (const SourceArtifactConstPtr &sa, group->files) {
+ for (const GroupPtr &group : qAsConst(groupContext.resolvedGroups)) {
+ for (const QString &filePath : qAsConst(filesContext.absoluteFilePaths)) {
+ for (const SourceArtifactConstPtr &sa : qAsConst(group->files)) {
if (sa->absoluteFilePath == filePath) {
throw ErrorInfo(Tr::tr("File '%1' already exists in group '%2'.")
.arg(filePath, group->name));
@@ -489,26 +490,26 @@ void ProjectPrivate::addFiles(const ProductData &product, const GroupData &group
for (int i = 0; i < groupContext.resolvedGroups.count(); ++i) {
const ResolvedProductPtr &resolvedProduct = groupContext.resolvedProducts.at(i);
const GroupPtr &resolvedGroup = groupContext.resolvedGroups.at(i);
- foreach (const QString &file, filesContext.absoluteFilePaths) {
+ for (const QString &file : qAsConst(filesContext.absoluteFilePaths)) {
const SourceArtifactPtr sa = createSourceArtifact(file, resolvedProduct, resolvedGroup,
false, logger);
addedSourceArtifacts.insert(file, qMakePair(sa, resolvedProduct));
}
- foreach (const QString &file, filesContext.absoluteFilePathsFromWildcards) {
+ for (const QString &file : qAsConst(filesContext.absoluteFilePathsFromWildcards)) {
QBS_CHECK(resolvedGroup->wildcards);
const SourceArtifactPtr sa = createSourceArtifact(file, resolvedProduct, resolvedGroup,
true, logger);
addedSourceArtifacts.insert(file, qMakePair(sa, resolvedProduct));
}
if (resolvedProduct->enabled) {
- foreach (const auto &pair, addedSourceArtifacts)
+ for (const auto &pair : qAsConst(addedSourceArtifacts))
createArtifact(resolvedProduct, pair.first, logger);
}
}
doSanityChecks(internalProject, logger);
QList<ArtifactData> sourceArtifacts;
QList<ArtifactData> sourceArtifactsFromWildcards;
- foreach (const QString &fp, filesContext.absoluteFilePaths) {
+ for (const QString &fp : qAsConst(filesContext.absoluteFilePaths)) {
const auto pair = addedSourceArtifacts.value(fp);
const SourceArtifactConstPtr sa = pair.first;
QBS_CHECK(sa);
@@ -516,7 +517,7 @@ void ProjectPrivate::addFiles(const ProductData &product, const GroupData &group
setupInstallData(artifactData, pair.second);
sourceArtifacts << artifactData;
}
- foreach (const QString &fp, filesContext.absoluteFilePathsFromWildcards) {
+ for (const QString &fp : qAsConst(filesContext.absoluteFilePathsFromWildcards)) {
const auto pair = addedSourceArtifacts.value(fp);
const SourceArtifactConstPtr sa = pair.first;
QBS_CHECK(sa);
@@ -524,7 +525,7 @@ void ProjectPrivate::addFiles(const ProductData &product, const GroupData &group
setupInstallData(artifactData, pair.second);
sourceArtifactsFromWildcards << artifactData;
}
- foreach (const GroupData &g, groupContext.groups) {
+ for (const GroupData &g : qAsConst(groupContext.groups)) {
g.d->sourceArtifacts << sourceArtifacts;
qSort(g.d->sourceArtifacts);
g.d->sourceArtifactsFromWildcards << sourceArtifactsFromWildcards;
@@ -545,7 +546,7 @@ void ProjectPrivate::removeFiles(const ProductData &product, const GroupData &gr
}
QStringList filesNotFound = filesContext.absoluteFilePaths;
QList<SourceArtifactPtr> sourceArtifacts;
- foreach (const SourceArtifactPtr &sa, groupContext.resolvedGroups.first()->files) {
+ for (const SourceArtifactPtr &sa : qAsConst(groupContext.resolvedGroups.first()->files)) {
if (filesNotFound.removeOne(sa->absoluteFilePath))
sourceArtifacts << sa;
}
@@ -561,7 +562,7 @@ void ProjectPrivate::removeFiles(const ProductData &product, const GroupData &gr
for (int i = 0; i < groupContext.resolvedProducts.count(); ++i) {
removeFilesFromBuildGraph(groupContext.resolvedProducts.at(i), sourceArtifacts);
- foreach (const SourceArtifactPtr &sa, sourceArtifacts)
+ for (const SourceArtifactPtr &sa : qAsConst(sourceArtifacts))
groupContext.resolvedGroups.at(i)->files.removeOne(sa);
}
doSanityChecks(internalProject, logger);
@@ -569,7 +570,7 @@ void ProjectPrivate::removeFiles(const ProductData &product, const GroupData &gr
m_projectData.d.detach();
updateInternalCodeLocations(internalProject, remover.itemPosition(), remover.lineOffset());
updateExternalCodeLocations(m_projectData, remover.itemPosition(), remover.lineOffset());
- foreach (const GroupData &g, groupContext.groups) {
+ for (const GroupData &g : qAsConst(groupContext.groups)) {
for (int i = g.d->sourceArtifacts.count() - 1; i >= 0; --i) {
if (filesContext.absoluteFilePaths.contains(g.d->sourceArtifacts.at(i).filePath()))
g.d->sourceArtifacts.removeAt(i);
@@ -610,7 +611,7 @@ void ProjectPrivate::removeFilesFromBuildGraph(const ResolvedProductConstPtr &pr
return;
QBS_CHECK(internalProject->buildData);
ArtifactSet allRemovedArtifacts;
- foreach (const SourceArtifactPtr &sa, files) {
+ for (const SourceArtifactPtr &sa : files) {
ArtifactSet removedArtifacts;
Artifact * const artifact = lookupArtifact(product, sa->absoluteFilePath);
if (artifact) { // Can be null if the executor has not yet applied the respective rule.
@@ -640,26 +641,26 @@ void ProjectPrivate::updateInternalCodeLocations(const ResolvedProjectPtr &proje
if (lineOffset == 0)
return;
updateLocationIfNecessary(project->location, changeLocation, lineOffset);
- foreach (const ResolvedProjectPtr &subProject, project->subProjects)
+ for (const ResolvedProjectPtr &subProject : qAsConst(project->subProjects))
updateInternalCodeLocations(subProject, changeLocation, lineOffset);
- foreach (const ResolvedProductPtr &product, project->products) {
+ for (const ResolvedProductPtr &product : qAsConst(project->products)) {
updateLocationIfNecessary(product->location, changeLocation, lineOffset);
- foreach (const GroupPtr &group, product->groups)
+ for (const GroupPtr &group : qAsConst(product->groups))
updateLocationIfNecessary(group->location, changeLocation, lineOffset);
- foreach (const RulePtr &rule, product->rules) {
+ for (const RulePtr &rule : qAsConst(product->rules)) {
updateLocationIfNecessary(rule->prepareScript->location, changeLocation, lineOffset);
- foreach (const RuleArtifactPtr &artifact, rule->artifacts) {
+ for (const RuleArtifactPtr &artifact : qAsConst(rule->artifacts)) {
for (int i = 0; i < artifact->bindings.count(); ++i) {
updateLocationIfNecessary(artifact->bindings[i].location, changeLocation,
lineOffset);
}
}
}
- foreach (const ResolvedScannerConstPtr &scanner, product->scanners) {
+ for (const ResolvedScannerConstPtr &scanner : qAsConst(product->scanners)) {
updateLocationIfNecessary(scanner->searchPathsScript->location, changeLocation, lineOffset);
updateLocationIfNecessary(scanner->scanScript->location, changeLocation, lineOffset);
}
- foreach (const ResolvedModuleConstPtr &module, product->modules) {
+ for (const ResolvedModuleConstPtr &module : qAsConst(product->modules)) {
updateLocationIfNecessary(module->setupBuildEnvironmentScript->location,
changeLocation, lineOffset);
updateLocationIfNecessary(module->setupRunEnvironmentScript->location,
@@ -674,11 +675,11 @@ void ProjectPrivate::updateExternalCodeLocations(const ProjectData &project,
if (lineOffset == 0)
return;
updateLocationIfNecessary(project.d->location, changeLocation, lineOffset);
- foreach (const ProjectData &subProject, project.subProjects())
+ for (const ProjectData &subProject : project.subProjects())
updateExternalCodeLocations(subProject, changeLocation, lineOffset);
- foreach (const ProductData &product, project.products()) {
+ for (const ProductData &product : project.products()) {
updateLocationIfNecessary(product.d->location, changeLocation, lineOffset);
- foreach (const GroupData &group, product.groups())
+ for (const GroupData &group : product.groups())
updateLocationIfNecessary(group.d->location, changeLocation, lineOffset);
}
}
@@ -704,14 +705,14 @@ RuleCommandList ProjectPrivate::ruleCommands(const ProductData &product,
QBS_CHECK(resolvedProduct->buildData);
const ArtifactSet &outputArtifacts = resolvedProduct->buildData->artifactsByFileTag
.value(FileTag(outputFileTag.toLocal8Bit()));
- foreach (const Artifact * const outputArtifact, outputArtifacts) {
+ for (const Artifact * const outputArtifact : qAsConst(outputArtifacts)) {
const TransformerConstPtr transformer = outputArtifact->transformer;
if (!transformer)
continue;
- foreach (const Artifact * const inputArtifact, transformer->inputs) {
+ for (const Artifact * const inputArtifact : qAsConst(transformer->inputs)) {
if (inputArtifact->filePath() == inputFilePath) {
RuleCommandList list;
- foreach (const AbstractCommandPtr &internalCommand, transformer->commands) {
+ for (const AbstractCommandPtr &internalCommand : qAsConst(transformer->commands)) {
RuleCommand externalCommand;
externalCommand.d->description = internalCommand->description();
externalCommand.d->extendedDescription = internalCommand->extendedDescription();
@@ -756,7 +757,7 @@ void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
projectData.d->name = internalProject->name;
projectData.d->location = internalProject->location;
projectData.d->enabled = internalProject->enabled;
- foreach (const ResolvedProductConstPtr &resolvedProduct, internalProject->products) {
+ for (const ResolvedProductConstPtr &resolvedProduct : qAsConst(internalProject->products)) {
ProductData product;
product.d->type = resolvedProduct->fileTags.toStringList();
product.d->name = resolvedProduct->name;
@@ -770,13 +771,12 @@ void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
product.d->isRunnable = productIsRunnable(resolvedProduct);
product.d->properties = resolvedProduct->productProperties;
product.d->moduleProperties.d->m_map = resolvedProduct->moduleProperties;
- foreach (const GroupPtr &resolvedGroup, resolvedProduct->groups)
+ for (const GroupPtr &resolvedGroup : qAsConst(resolvedProduct->groups))
product.d->groups << createGroupDataFromGroup(resolvedGroup, resolvedProduct);
if (resolvedProduct->enabled) {
QBS_CHECK(resolvedProduct->buildData);
const ArtifactSet targetArtifacts = resolvedProduct->targetArtifacts();
- foreach (Artifact * const a,
- filterByType<Artifact>(resolvedProduct->buildData->nodes)) {
+ for (Artifact * const a : filterByType<Artifact>(resolvedProduct->buildData->nodes)) {
if (a->artifactType != Artifact::Generated)
continue;
ArtifactData ta;
@@ -802,8 +802,10 @@ void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
product.d->generatedArtifacts << ta;
}
}
- foreach (const ResolvedProductPtr &resolvedDependentProduct, resolvedProduct->dependencies)
+ for (const ResolvedProductPtr &resolvedDependentProduct
+ : qAsConst(resolvedProduct->dependencies)) {
product.d->dependencies << resolvedDependentProduct->name;
+ }
qSort(product.d->type);
qSort(product.d->groups);
qSort(product.d->generatedArtifacts);
@@ -811,7 +813,8 @@ void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
product.d->isValid = true;
projectData.d->products << product;
}
- foreach (const ResolvedProjectConstPtr &internalSubProject, internalProject->subProjects) {
+ for (const ResolvedProjectConstPtr &internalSubProject
+ : qAsConst(internalProject->subProjects)) {
if (!internalSubProject->enabled)
continue;
ProjectData subProject;
diff --git a/src/lib/corelib/api/projectdata.cpp b/src/lib/corelib/api/projectdata.cpp
index 6377b70ed..961ce075c 100644
--- a/src/lib/corelib/api/projectdata.cpp
+++ b/src/lib/corelib/api/projectdata.cpp
@@ -44,6 +44,7 @@
#include <tools/fileinfo.h>
#include <tools/jsliterals.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
@@ -516,13 +517,13 @@ QList<ArtifactData> ProductData::targetArtifacts() const
QList<ArtifactData> ProductData::installableArtifacts() const
{
QList<ArtifactData> artifacts;
- foreach (const GroupData &g, groups()) {
- foreach (const ArtifactData &a, g.allSourceArtifacts()) {
+ for (const GroupData &g : groups()) {
+ for (const ArtifactData &a : g.allSourceArtifacts()) {
if (a.installData().isInstallable())
artifacts << a;
}
}
- foreach (const ArtifactData &a, targetArtifacts()) {
+ for (const ArtifactData &a : targetArtifacts()) {
if (a.installData().isInstallable())
artifacts << a;
}
@@ -536,7 +537,7 @@ QList<ArtifactData> ProductData::installableArtifacts() const
QString ProductData::targetExecutable() const
{
QBS_ASSERT(isValid(), return QString());
- foreach (const ArtifactData &ta, targetArtifacts()) {
+ for (const ArtifactData &ta : targetArtifacts()) {
if (ta.isExecutable()) {
if (ta.installData().isInstallable())
return ta.installData().localInstallFilePath();
@@ -717,7 +718,7 @@ QList<ProjectData> ProjectData::subProjects() const
QList<ProductData> ProjectData::allProducts() const
{
QList<ProductData> productList = products();
- foreach (const ProjectData &pd, subProjects())
+ for (const ProjectData &pd : subProjects())
productList << pd.allProducts();
return productList;
}
@@ -728,7 +729,7 @@ QList<ProductData> ProjectData::allProducts() const
QList<ArtifactData> ProjectData::installableArtifacts() const
{
QList<ArtifactData> artifacts;
- foreach (const ProductData &p, allProducts())
+ for (const ProductData &p : allProducts())
artifacts << p.installableArtifacts();
return artifacts;
}
@@ -819,7 +820,7 @@ QStringList PropertyMap::getModulePropertiesAsStringList(const QString &moduleNa
{
const QVariantList &vl = d->m_map->moduleProperty(moduleName, propertyName).toList();
QStringList sl;
- foreach (const QVariant &v, vl) {
+ for (const QVariant &v : vl) {
QBS_ASSERT(v.canConvert<QString>(), continue);
sl << v.toString();
}
@@ -840,7 +841,7 @@ static QString mapToString(const QVariantMap &map, const QString &prefix)
QStringList keys(map.keys());
qSort(keys);
QString stringRep;
- foreach (const QString &key, keys) {
+ for (const QString &key : qAsConst(keys)) {
const QVariant &val = map.value(key);
if (val.type() == QVariant::Map) {
stringRep += mapToString(val.value<QVariantMap>(), prefix + key + QLatin1Char('.'));
diff --git a/src/lib/corelib/api/projectfileupdater.cpp b/src/lib/corelib/api/projectfileupdater.cpp
index 6ac3c60dd..942ab0efa 100644
--- a/src/lib/corelib/api/projectfileupdater.cpp
+++ b/src/lib/corelib/api/projectfileupdater.cpp
@@ -52,6 +52,7 @@
#include <tools/hostosinfo.h>
#include <tools/jsliterals.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qfile.h>
@@ -178,7 +179,7 @@ void ProjectFileUpdater::apply()
if (!parserMessages.isEmpty()) {
ErrorInfo errorInfo;
errorInfo.append(Tr::tr("Failure parsing project file."));
- foreach (const DiagnosticMessage &msg, parserMessages)
+ for (const DiagnosticMessage &msg : qAsConst(parserMessages))
errorInfo.append(msg.message, toCodeLocation(file.fileName(), msg.loc));
throw errorInfo;
}
@@ -288,7 +289,7 @@ static QString &addToFilesRepr(QString &filesRepr, const QString &fileRepr, int
static QString &addToFilesRepr(QString &filesRepr, const QStringList &filePaths, int indentation)
{
- foreach (const QString &f, filePaths)
+ for (const QString &f : filePaths)
addToFilesRepr(filesRepr, toJSLiteral(f), indentation);
return filesRepr;
}
@@ -468,7 +469,7 @@ void ProjectFileFilesRemover::doApply(QString &fileContent, UiProgram *ast)
.arg(filesToRemove.join(QLatin1String(", "))), bindingLocation);
}
QString filesString = QLatin1String("[\n");
- foreach (const QString &file, newFilesList) {
+ for (const QString &file : qAsConst(newFilesList)) {
filesString += QString(arrayElemIndentation, QLatin1Char(' '));
filesString += QString::fromLatin1("\"%1\",\n").arg(file);
}
diff --git a/src/lib/corelib/api/runenvironment.cpp b/src/lib/corelib/api/runenvironment.cpp
index 0be54558e..02985bc16 100644
--- a/src/lib/corelib/api/runenvironment.cpp
+++ b/src/lib/corelib/api/runenvironment.cpp
@@ -155,7 +155,7 @@ int RunEnvironment::doRunShell()
#if defined(Q_OS_LINUX)
clearenv();
#endif
- foreach (const QString &key, environment.keys())
+ for (const QString &key : environment.keys())
qputenv(key.toLocal8Bit().constData(), environment.value(key).toLocal8Bit());
QString command;
QScopedPointer<QTemporaryFile> envFile;
@@ -197,9 +197,9 @@ static QString findExecutable(const QStringList &fileNames)
const QStringList path = QString::fromLocal8Bit(qgetenv("PATH"))
.split(HostOsInfo::pathListSeparator(), QString::SkipEmptyParts);
- foreach (const QString &fileName, fileNames) {
+ for (const QString &fileName : fileNames) {
const QString exeFileName = HostOsInfo::appendExecutableSuffix(fileName);
- foreach (const QString &ppath, path) {
+ for (const QString &ppath : path) {
const QString fullPath = ppath + QLatin1Char('/') + exeFileName;
QFileInfo fi(fullPath);
if (fi.exists() && fi.isFile() && fi.isExecutable())
diff --git a/src/lib/corelib/buildgraph/artifact.cpp b/src/lib/corelib/buildgraph/artifact.cpp
index abe6fca84..c44a1b130 100644
--- a/src/lib/corelib/buildgraph/artifact.cpp
+++ b/src/lib/corelib/buildgraph/artifact.cpp
@@ -46,6 +46,7 @@
#include <language/propertymapinternal.h>
#include <tools/fileinfo.h>
#include <tools/persistence.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -94,7 +95,7 @@ void Artifact::setFileTags(const FileTags &newFileTags)
m_fileTags = newFileTags;
return;
}
- foreach (const FileTag &t, m_fileTags)
+ for (const FileTag &t : qAsConst(m_fileTags))
removeArtifactFromSetByFileTag(this, t, product->buildData->artifactsByFileTag);
m_fileTags = newFileTags;
addArtifactToSet(this, product->buildData->artifactsByFileTag);
diff --git a/src/lib/corelib/buildgraph/artifactcleaner.cpp b/src/lib/corelib/buildgraph/artifactcleaner.cpp
index 22efa2ab2..b35120c55 100644
--- a/src/lib/corelib/buildgraph/artifactcleaner.cpp
+++ b/src/lib/corelib/buildgraph/artifactcleaner.cpp
@@ -166,7 +166,7 @@ void ArtifactCleaner::cleanup(const TopLevelProjectPtr &project,
m_observer->initialize(Tr::tr("Cleaning up%1").arg(configString), products.count() + 1);
Set<QString> directories;
- foreach (const ResolvedProductPtr &product, products) {
+ for (const ResolvedProductPtr &product : products) {
CleanupVisitor visitor(options, m_observer, m_logger);
visitor.visitProduct(product);
directories.unite(visitor.directories());
diff --git a/src/lib/corelib/buildgraph/artifactvisitor.cpp b/src/lib/corelib/buildgraph/artifactvisitor.cpp
index dcd4454e6..5e74938fe 100644
--- a/src/lib/corelib/buildgraph/artifactvisitor.cpp
+++ b/src/lib/corelib/buildgraph/artifactvisitor.cpp
@@ -42,6 +42,7 @@
#include "productbuilddata.h"
#include <language/language.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -54,13 +55,13 @@ void ArtifactVisitor::visitProduct(const ResolvedProductConstPtr &product)
{
if (!product->buildData)
return;
- foreach (BuildGraphNode *node, product->buildData->nodes)
+ for (BuildGraphNode *node : qAsConst(product->buildData->nodes))
node->accept(this);
}
void ArtifactVisitor::visitProject(const ResolvedProjectConstPtr &project)
{
- foreach (const ResolvedProductConstPtr &product, project->allProducts())
+ for (const ResolvedProductConstPtr &product : project->allProducts())
visitProduct(product);
}
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp
index 85491a3d3..c8c46c946 100644
--- a/src/lib/corelib/buildgraph/buildgraph.cpp
+++ b/src/lib/corelib/buildgraph/buildgraph.cpp
@@ -57,6 +57,7 @@
#include <tools/fileinfo.h>
#include <tools/scripttools.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
@@ -114,12 +115,12 @@ private:
[](const ResolvedProductPtr &p1, const ResolvedProductPtr &p2) {
return p1->name < p2->name;
});
- foreach (const ResolvedProductPtr &dependency, productDeps) {
+ for (const ResolvedProductPtr &dependency : qAsConst(productDeps)) {
QScriptValue obj = engine->newObject();
setupProductScriptValue(static_cast<ScriptEngine *>(engine), obj, dependency, 0);
result.setProperty(idx++, obj);
}
- foreach (const ResolvedModuleConstPtr &dependency, product->modules) {
+ for (const ResolvedModuleConstPtr &dependency : qAsConst(product->modules)) {
QScriptValue obj = engine->newObject();
setupModuleScriptValue(static_cast<ScriptEngine *>(engine), obj,
product->moduleProperties->value(), dependency->name);
@@ -298,7 +299,7 @@ static bool existsPath(BuildGraphNode *u, BuildGraphNode *v)
static QStringList toStringList(const QList<BuildGraphNode *> &path)
{
QStringList lst;
- foreach (BuildGraphNode *node, path)
+ for (BuildGraphNode *node : path)
lst << node->toString();
return lst;
}
@@ -448,18 +449,18 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product,
QBS_CHECK(!!product->enabled == !!buildData);
if (!product->enabled)
return;
- foreach (BuildGraphNode * const node, buildData->roots) {
+ for (BuildGraphNode * const node : qAsConst(buildData->roots)) {
if (logger.traceEnabled())
logger.qbsTrace() << "Checking root node '" << node->toString() << "'.";
QBS_CHECK(buildData->nodes.contains(node));
}
Set<QString> filePaths;
- foreach (BuildGraphNode * const node, buildData->nodes) {
+ for (BuildGraphNode * const node : qAsConst(buildData->nodes)) {
logger.qbsTrace() << "Sanity checking node '" << node->toString() << "'";
QBS_CHECK(node->product == product);
- foreach (const BuildGraphNode * const parent, node->parents)
+ for (const BuildGraphNode * const parent : qAsConst(node->parents))
QBS_CHECK(parent->children.contains(node));
- foreach (BuildGraphNode * const child, node->children) {
+ for (BuildGraphNode * const child : qAsConst(node->children)) {
QBS_CHECK(child->parents.contains(node));
QBS_CHECK(!child->product.isNull());
QBS_CHECK(!child->product->buildData.isNull());
@@ -474,7 +475,7 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product,
QBS_CHECK(!filePaths.contains(artifact->filePath()));
filePaths << artifact->filePath();
- foreach (Artifact * const child, artifact->childrenAddedByScanner)
+ for (Artifact * const child : qAsConst(artifact->childrenAddedByScanner))
QBS_CHECK(artifact->children.contains(child));
const TransformerConstPtr transformer = artifact->transformer;
if (artifact->artifactType == Artifact::SourceFile)
@@ -485,7 +486,7 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product,
logger.qbsTrace() << "The transformer has " << transformer->outputs.count()
<< " outputs.";
ArtifactSet transformerOutputChildren;
- foreach (const Artifact * const output, transformer->outputs) {
+ for (const Artifact * const output : qAsConst(transformer->outputs)) {
QBS_CHECK(output->transformer == transformer);
transformerOutputChildren.unite(ArtifactSet::filtered(output->children));
Set<QString> childFilePaths;
@@ -499,14 +500,14 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product,
}
if (logger.traceEnabled()) {
logger.qbsTrace() << "The transformer output children are:";
- foreach (const Artifact * const a, transformerOutputChildren)
+ for (const Artifact * const a : qAsConst(transformerOutputChildren))
logger.qbsTrace() << "\t" << a->fileName();
logger.qbsTrace() << "The transformer inputs are:";
- foreach (const Artifact * const a, transformer->inputs)
+ for (const Artifact * const a : qAsConst(transformer->inputs))
logger.qbsTrace() << "\t" << a->fileName();
}
QBS_CHECK(transformer->inputs.count() <= transformerOutputChildren.count());
- foreach (Artifact * const transformerInput, transformer->inputs)
+ for (Artifact * const transformerInput : qAsConst(transformer->inputs))
QBS_CHECK(transformerOutputChildren.contains(transformerInput));
}
}
@@ -516,10 +517,10 @@ static void doSanityChecks(const ResolvedProjectPtr &project,
const Logger &logger)
{
logger.qbsDebug() << "Sanity checking project '" << project->name << "'";
- foreach (const ResolvedProjectPtr &subProject, project->subProjects)
+ for (const ResolvedProjectPtr &subProject : qAsConst(project->subProjects))
doSanityChecks(subProject, allProducts, productNames, logger);
- foreach (const ResolvedProductConstPtr &product, project->products) {
+ for (const ResolvedProductConstPtr &product : qAsConst(project->products)) {
QBS_CHECK(product->project == project);
QBS_CHECK(product->topLevelProject() == project->topLevelProject());
doSanityChecksForProduct(product, allProducts, logger);
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp
index e56373447..936a1c7cf 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp
@@ -57,6 +57,7 @@
#include <tools/persistence.h>
#include <tools/profiling.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qfileinfo.h>
@@ -78,17 +79,17 @@ BuildGraphLoader::~BuildGraphLoader()
static void restoreBackPointers(const ResolvedProjectPtr &project)
{
- foreach (const ResolvedProductPtr &product, project->products) {
+ for (const ResolvedProductPtr &product : qAsConst(project->products)) {
product->project = project;
if (!product->buildData)
continue;
- foreach (BuildGraphNode * const n, product->buildData->nodes) {
+ for (BuildGraphNode * const n : qAsConst(product->buildData->nodes)) {
if (Artifact *a = dynamic_cast<Artifact *>(n))
project->topLevelProject()->buildData->insertIntoLookupTable(a);
}
}
- foreach (const ResolvedProjectPtr &subProject, project->subProjects) {
+ for (const ResolvedProjectPtr &subProject : qAsConst(project->subProjects)) {
subProject->parentProject = project;
restoreBackPointers(subProject);
}
@@ -113,7 +114,7 @@ BuildGraphLoadResult BuildGraphLoader::load(const TopLevelProjectPtr &existingPr
if (!m_result.loadedProject)
return m_result;
if (parameters.restoreBehavior() == SetupProjectParameters::RestoreOnly) {
- foreach (const ErrorInfo &e, m_result.loadedProject->warningsEncountered)
+ for (const ErrorInfo &e : qAsConst(m_result.loadedProject->warningsEncountered))
m_logger.printWarning(e);
return m_result;
}
@@ -198,7 +199,7 @@ static bool checkProductForChangedDependency(QList<ResolvedProductPtr> &changedP
return false;
if (changedProducts.contains(product))
return true;
- foreach (const ResolvedProductPtr &dep, product->dependencies) {
+ for (const ResolvedProductPtr &dep : qAsConst(product->dependencies)) {
if (checkProductForChangedDependency(changedProducts, seenProducts, dep)) {
changedProducts << product;
return true;
@@ -216,7 +217,7 @@ static void makeChangedProductsListComplete(QList<ResolvedProductPtr> &changedPr
const QList<ResolvedProductPtr> &allRestoredProducts)
{
Set<ResolvedProductPtr> seenProducts;
- foreach (const ResolvedProductPtr &p, allRestoredProducts)
+ for (const ResolvedProductPtr &p : allRestoredProducts)
checkProductForChangedDependency(changedProducts, seenProducts, p);
}
@@ -251,7 +252,7 @@ void BuildGraphLoader::trackProjectChanges()
}
if (!reResolvingNecessary) {
- foreach (const ErrorInfo &e, restoredProject->warningsEncountered)
+ for (const ErrorInfo &e : qAsConst(restoredProject->warningsEncountered))
m_logger.printWarning(e);
return;
}
@@ -262,7 +263,7 @@ void BuildGraphLoader::trackProjectChanges()
ldr.setProgressObserver(m_evalContext->observer());
ldr.setOldProjectProbes(restoredProject->probes);
QHash<QString, QList<ProbeConstPtr>> restoredProbes;
- foreach (const auto restoredProduct, allRestoredProducts)
+ for (const auto &restoredProduct : qAsConst(allRestoredProducts))
restoredProbes.insert(restoredProduct->uniqueName(), restoredProduct->probes);
ldr.setOldProductProbes(restoredProbes);
m_result.newlyResolvedProject = ldr.loadProject(m_parameters);
@@ -270,7 +271,7 @@ void BuildGraphLoader::trackProjectChanges()
QMap<QString, ResolvedProductPtr> freshProductsByName;
QList<ResolvedProductPtr> allNewlyResolvedProducts
= m_result.newlyResolvedProject->allProducts();
- foreach (const ResolvedProductPtr &cp, allNewlyResolvedProducts)
+ for (const ResolvedProductPtr &cp : qAsConst(allNewlyResolvedProducts))
freshProductsByName.insert(cp->uniqueName(), cp);
checkAllProductsForChanges(allRestoredProducts, freshProductsByName, changedProducts);
@@ -280,7 +281,7 @@ void BuildGraphLoader::trackProjectChanges()
if (!changedProducts.isEmpty()) {
oldBuildData = QSharedPointer<ProjectBuildData>(
new ProjectBuildData(restoredProject->buildData.data()));
- foreach (const ResolvedProductConstPtr &product, allRestoredProducts) {
+ for (const ResolvedProductConstPtr &product : qAsConst(allRestoredProducts)) {
if (!product->buildData)
continue;
@@ -299,7 +300,7 @@ void BuildGraphLoader::trackProjectChanges()
// mean that artifacts will have to get rebuilt; whether this is necesessary will be decided
// an a per-artifact basis by the Executor on the next build.
QHash<QString, AllRescuableArtifactData> rescuableArtifactData;
- foreach (const ResolvedProductPtr &product, changedProducts) {
+ for (const ResolvedProductPtr &product : qAsConst(changedProducts)) {
ResolvedProductPtr freshProduct = freshProductsByName.value(product->uniqueName());
if (!freshProduct)
continue;
@@ -323,7 +324,7 @@ void BuildGraphLoader::trackProjectChanges()
if (newlyResolvedProduct->enabled)
newlyResolvedProduct->buildData.swap(restoredProduct->buildData);
if (newlyResolvedProduct->buildData) {
- foreach (BuildGraphNode *node, newlyResolvedProduct->buildData->nodes)
+ for (BuildGraphNode *node : qAsConst(newlyResolvedProduct->buildData->nodes))
node->product = newlyResolvedProduct;
}
@@ -338,7 +339,7 @@ void BuildGraphLoader::trackProjectChanges()
}
// Products still left in the list do not exist anymore.
- foreach (const ResolvedProductPtr &removedProduct, allRestoredProducts) {
+ for (const ResolvedProductPtr &removedProduct : qAsConst(allRestoredProducts)) {
changedProducts.removeOne(removedProduct);
onProductRemoved(removedProduct, m_result.newlyResolvedProject->buildData.data());
}
@@ -351,7 +352,7 @@ void BuildGraphLoader::trackProjectChanges()
allNewlyResolvedProducts);
}
- foreach (const ResolvedProductConstPtr &changedProduct, changedProducts) {
+ for (const ResolvedProductConstPtr &changedProduct : qAsConst(changedProducts)) {
rescueOldBuildData(changedProduct, freshProductsByName.value(changedProduct->uniqueName()),
childLists, rescuableArtifactData.value(changedProduct->uniqueName()));
}
@@ -359,7 +360,7 @@ void BuildGraphLoader::trackProjectChanges()
EmptyDirectoriesRemover(m_result.newlyResolvedProject.data(), m_logger)
.removeEmptyParentDirectories(m_artifactsRemovedFromDisk);
- foreach (FileResourceBase * const f, m_objectsToDelete) {
+ for (FileResourceBase * const f : qAsConst(m_objectsToDelete)) {
Artifact * const a = dynamic_cast<Artifact *>(f);
if (a)
a->product.clear(); // To help with the sanity checks.
@@ -377,7 +378,7 @@ bool BuildGraphLoader::probeExecutionForced(
if (!restoredProject->probes.isEmpty())
return true;
- foreach (const auto &p, restoredProducts) {
+ for (const auto &p : qAsConst(restoredProducts)) {
if (!p->probes.isEmpty())
return true;
}
@@ -469,7 +470,7 @@ bool BuildGraphLoader::hasProductFileChanged(const QList<ResolvedProductPtr> &re
QList<ResolvedProductPtr> &changedProducts)
{
bool hasChanged = false;
- foreach (const ResolvedProductPtr &product, restoredProducts) {
+ for (const ResolvedProductPtr &product : restoredProducts) {
const QString filePath = product->location.filePath();
const FileInfo pfi(filePath);
remainingBuildSystemFiles.remove(filePath);
@@ -498,7 +499,7 @@ bool BuildGraphLoader::hasProductFileChanged(const QList<ResolvedProductPtr> &re
AccumulatingTimer wildcardTimer(m_parameters.logElapsedTime()
? &m_wildcardExpansionEffort : nullptr);
- foreach (const GroupPtr &group, product->groups) {
+ for (const GroupPtr &group : qAsConst(product->groups)) {
if (!group->wildcards)
continue;
const bool reExpansionRequired = std::any_of(
@@ -513,8 +514,10 @@ bool BuildGraphLoader::hasProductFileChanged(const QList<ResolvedProductPtr> &re
FileInfo::path(group->location.filePath()),
product->topLevelProject()->buildDirectory);
Set<QString> wcFiles;
- foreach (const SourceArtifactConstPtr &sourceArtifact, group->wildcards->files)
+ for (const SourceArtifactConstPtr &sourceArtifact
+ : qAsConst(group->wildcards->files)) {
wcFiles += sourceArtifact->absoluteFilePath;
+ }
if (files == wcFiles)
continue;
hasChanged = true;
@@ -530,7 +533,7 @@ bool BuildGraphLoader::hasProductFileChanged(const QList<ResolvedProductPtr> &re
bool BuildGraphLoader::hasBuildSystemFileChanged(const Set<QString> &buildSystemFiles,
const FileTime &referenceTime)
{
- foreach (const QString &file, buildSystemFiles) {
+ for (const QString &file : buildSystemFiles) {
const FileInfo fi(file);
if (!fi.exists() || referenceTime < fi.lastModified()) {
m_logger.qbsDebug() << "A qbs or js file changed, must re-resolve project.";
@@ -544,7 +547,7 @@ void BuildGraphLoader::checkAllProductsForChanges(const QList<ResolvedProductPtr
const QMap<QString, ResolvedProductPtr> &newlyResolvedProductsByName,
QList<ResolvedProductPtr> &changedProducts)
{
- foreach (const ResolvedProductPtr &restoredProduct, restoredProducts) {
+ for (const ResolvedProductPtr &restoredProduct : restoredProducts) {
const ResolvedProductPtr newlyResolvedProduct
= newlyResolvedProductsByName.value(restoredProduct->uniqueName());
if (!newlyResolvedProduct)
@@ -582,9 +585,9 @@ static bool dependenciesAreEqual(const ResolvedProductConstPtr &p1,
return false;
Set<QString> names1;
Set<QString> names2;
- foreach (const ResolvedProductConstPtr &dep, p1->dependencies)
+ for (const ResolvedProductConstPtr &dep : qAsConst(p1->dependencies))
names1 << dep->uniqueName();
- foreach (const ResolvedProductConstPtr &dep, p2->dependencies)
+ for (const ResolvedProductConstPtr &dep : qAsConst(p2->dependencies))
names2 << dep->uniqueName();
return names1 == names2;
}
@@ -603,7 +606,7 @@ bool BuildGraphLoader::checkProductForChanges(const ResolvedProductPtr &restored
if (!dependenciesAreEqual(restoredProduct, newlyResolvedProduct))
return true;
const FileTime referenceTime = restoredProduct->topLevelProject()->lastResolveTime;
- foreach (const RuleConstPtr &rule, newlyResolvedProduct->rules) {
+ for (const RuleConstPtr &rule : qAsConst(newlyResolvedProduct->rules)) {
if (!isPrepareScriptUpToDate(rule->prepareScript, referenceTime))
return true;
}
@@ -618,7 +621,7 @@ bool BuildGraphLoader::checkProductForInstallInfoChanges(const ResolvedProductPt
const QStringList specialProperties = QStringList() << QLatin1String("install")
<< QLatin1String("installDir") << QLatin1String("installPrefix")
<< QLatin1String("installRoot");
- foreach (const QString &key, specialProperties) {
+ for (const QString &key : specialProperties) {
if (restoredProduct->moduleProperties->qbsPropertyValue(key)
!= newlyResolvedProduct->moduleProperties->qbsPropertyValue(key)) {
m_logger.qbsDebug() << "Product property 'qbs." << key << "' changed.";
@@ -683,7 +686,7 @@ void BuildGraphLoader::onProductRemoved(const ResolvedProductPtr &product,
product->project->products.removeOne(product);
if (product->buildData) {
- foreach (BuildGraphNode * const node, product->buildData->nodes) {
+ for (BuildGraphNode * const node : qAsConst(product->buildData->nodes)) {
if (node->type() == BuildGraphNode::ArtifactNodeType) {
Artifact * const artifact = static_cast<Artifact *>(node);
projectBuildData->removeArtifact(artifact, m_logger, removeArtifactsFromDisk,
@@ -691,10 +694,10 @@ void BuildGraphLoader::onProductRemoved(const ResolvedProductPtr &product,
if (removeArtifactsFromDisk && artifact->artifactType == Artifact::Generated)
m_artifactsRemovedFromDisk << artifact->filePath();
} else {
- foreach (BuildGraphNode * const parent, node->parents)
+ for (BuildGraphNode * const parent : qAsConst(node->parents))
parent->children.remove(node);
node->parents.clear();
- foreach (BuildGraphNode * const child, node->children)
+ for (BuildGraphNode * const child : qAsConst(node->children))
child->parents.remove(node);
node->children.clear();
}
@@ -707,7 +710,7 @@ static SourceArtifactConstPtr findSourceArtifact(const ResolvedProductConstPtr &
{
SourceArtifactConstPtr &artifact = artifactMap[artifactFilePath];
if (!artifact) {
- foreach (const SourceArtifactConstPtr &a, product->allFiles()) {
+ for (const SourceArtifactConstPtr &a : product->allFiles()) {
if (a->absoluteFilePath == artifactFilePath) {
artifact = a;
break;
@@ -744,7 +747,7 @@ bool BuildGraphLoader::checkForPropertyChanges(const TransformerPtr &restoredTra
const ResolvedProductPtr &freshProduct)
{
// This check must come first, as it can prevent build data rescuing.
- foreach (const Property &property, restoredTrafo->propertiesRequestedInCommands) {
+ for (const Property &property : qAsConst(restoredTrafo->propertiesRequestedInCommands)) {
if (checkForPropertyChange(property, propertyMapByKind(freshProduct, property.kind))) {
invalidateTransformer(restoredTrafo);
return true;
@@ -758,7 +761,7 @@ bool BuildGraphLoader::checkForPropertyChanges(const TransformerPtr &restoredTra
= findSourceArtifact(freshProduct, it.key(), artifactMap);
if (!artifact)
continue;
- foreach (const Property &property, it.value()) {
+ for (const Property &property : qAsConst(it.value())) {
if (checkForPropertyChange(property, artifact->properties->value())) {
invalidateTransformer(restoredTrafo);
return true;
@@ -766,7 +769,7 @@ bool BuildGraphLoader::checkForPropertyChanges(const TransformerPtr &restoredTra
}
}
- foreach (const Property &property, restoredTrafo->propertiesRequestedInPrepareScript) {
+ for (const Property &property : qAsConst(restoredTrafo->propertiesRequestedInPrepareScript)) {
if (checkForPropertyChange(property, propertyMapByKind(freshProduct, property.kind)))
return true;
}
@@ -774,11 +777,11 @@ bool BuildGraphLoader::checkForPropertyChanges(const TransformerPtr &restoredTra
for (QHash<QString, PropertySet>::ConstIterator it =
restoredTrafo->propertiesRequestedFromArtifactInPrepareScript.constBegin();
it != restoredTrafo->propertiesRequestedFromArtifactInPrepareScript.constEnd(); ++it) {
- const SourceArtifactConstPtr artifact
+ const SourceArtifactConstPtr &artifact
= findSourceArtifact(freshProduct, it.key(), artifactMap);
if (!artifact)
continue;
- foreach (const Property &property, it.value()) {
+ for (const Property &property : qAsConst(it.value())) {
if (checkForPropertyChange(property, artifact->properties->value()))
return true;
}
@@ -818,7 +821,7 @@ void BuildGraphLoader::replaceFileDependencyWithArtifact(const ResolvedProductPt
<< QString::fromLatin1("[BG] replace file dependency '%1' with artifact of type '%2'")
.arg(filedep->filePath()).arg(artifact->artifactType);
}
- foreach (const ResolvedProductPtr &product, fileDepProduct->topLevelProject()->allProducts()) {
+ for (const ResolvedProductPtr &product : fileDepProduct->topLevelProject()->allProducts()) {
if (!product->buildData)
continue;
for (Artifact *artifactInProduct : filterByType<Artifact>(product->buildData->nodes)) {
@@ -851,8 +854,8 @@ bool BuildGraphLoader::isConfigCompatible()
bool BuildGraphLoader::isPrepareScriptUpToDate(const ScriptFunctionConstPtr &script,
const FileTime &referenceTime)
{
- foreach (const JsImport &jsImport, script->fileContext->jsImports()) {
- foreach (const QString &filePath, jsImport.filePaths) {
+ for (const JsImport &jsImport : script->fileContext->jsImports()) {
+ for (const QString &filePath : qAsConst(jsImport.filePaths)) {
if (FileInfo(filePath).lastModified() > referenceTime) {
m_logger.qbsDebug() << "Change in import '" << filePath
<< "' potentially influences prepare script, marking as out of date";
@@ -899,7 +902,7 @@ void BuildGraphLoader::rescueOldBuildData(const ResolvedProductConstPtr &restore
rad.propertiesRequestedFromArtifactInCommands
= oldArtifact->transformer->propertiesRequestedFromArtifactInCommands;
const ChildrenInfo &childrenInfo = childLists.value(oldArtifact);
- foreach (Artifact * const child, childrenInfo.children) {
+ for (Artifact * const child : qAsConst(childrenInfo.children)) {
rad.children << RescuableArtifactData::ChildData(child->product->name,
child->product->profile, child->filePath(),
childrenInfo.childrenAddedByScanner.contains(child));
diff --git a/src/lib/corelib/buildgraph/buildgraphnode.cpp b/src/lib/corelib/buildgraph/buildgraphnode.cpp
index e0e88abd8..dee0245e6 100644
--- a/src/lib/corelib/buildgraph/buildgraphnode.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphnode.cpp
@@ -45,6 +45,7 @@
#include <logging/translator.h>
#include <tools/error.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -55,9 +56,9 @@ BuildGraphNode::BuildGraphNode() : buildState(Untouched)
BuildGraphNode::~BuildGraphNode()
{
- foreach (BuildGraphNode *p, parents)
+ for (BuildGraphNode *p : qAsConst(parents))
p->children.remove(this);
- foreach (BuildGraphNode *c, children)
+ for (BuildGraphNode *c : qAsConst(children))
c->parents.remove(this);
}
@@ -68,7 +69,7 @@ void BuildGraphNode::onChildDisconnected(BuildGraphNode *child)
void BuildGraphNode::acceptChildren(BuildGraphVisitor *visitor)
{
- foreach (BuildGraphNode *child, children)
+ for (BuildGraphNode *child : qAsConst(children))
child->accept(visitor);
}
diff --git a/src/lib/corelib/buildgraph/buildgraphnode.h b/src/lib/corelib/buildgraph/buildgraphnode.h
index 7c7f37bb3..a942c208c 100644
--- a/src/lib/corelib/buildgraph/buildgraphnode.h
+++ b/src/lib/corelib/buildgraph/buildgraphnode.h
@@ -81,6 +81,8 @@ public:
virtual QString toString() const = 0;
virtual void onChildDisconnected(BuildGraphNode *child);
+ bool isBuilt() const { return buildState == Built; }
+
protected:
explicit BuildGraphNode();
void acceptChildren(BuildGraphVisitor *visitor);
diff --git a/src/lib/corelib/buildgraph/cycledetector.cpp b/src/lib/corelib/buildgraph/cycledetector.cpp
index 9ef1daabe..b574a049d 100644
--- a/src/lib/corelib/buildgraph/cycledetector.cpp
+++ b/src/lib/corelib/buildgraph/cycledetector.cpp
@@ -46,6 +46,7 @@
#include <language/language.h>
#include <logging/translator.h>
#include <tools/error.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -79,7 +80,7 @@ bool CycleDetector::visitNode(BuildGraphNode *node)
{
if (Q_UNLIKELY(m_nodesInCurrentPath.contains(node))) {
ErrorInfo error(Tr::tr("Cycle in build graph detected."));
- foreach (const BuildGraphNode * const n, cycle(node))
+ for (const BuildGraphNode * const n : cycle(node))
error.append(n->toString());
throw error;
}
@@ -89,7 +90,7 @@ bool CycleDetector::visitNode(BuildGraphNode *node)
m_nodesInCurrentPath += node;
m_parent = node;
- foreach (BuildGraphNode * const child, node->children)
+ for (BuildGraphNode * const child : qAsConst(node->children))
child->accept(this);
m_nodesInCurrentPath -= node;
m_allNodes += node;
diff --git a/src/lib/corelib/buildgraph/emptydirectoriesremover.cpp b/src/lib/corelib/buildgraph/emptydirectoriesremover.cpp
index fc62953bc..13f5adaa5 100644
--- a/src/lib/corelib/buildgraph/emptydirectoriesremover.cpp
+++ b/src/lib/corelib/buildgraph/emptydirectoriesremover.cpp
@@ -58,7 +58,7 @@ void EmptyDirectoriesRemover::removeEmptyParentDirectories(const QStringList &ar
{
m_dirsToRemove.clear();
m_handledDirs.clear();
- foreach (const QString &filePath, artifactFilePaths)
+ for (const QString &filePath : artifactFilePaths)
insertSorted(QFileInfo(filePath).absolutePath());
while (!m_dirsToRemove.isEmpty())
removeDirIfEmpty();
@@ -67,7 +67,7 @@ void EmptyDirectoriesRemover::removeEmptyParentDirectories(const QStringList &ar
void EmptyDirectoriesRemover::removeEmptyParentDirectories(const ArtifactSet &artifacts)
{
QStringList filePaths;
- foreach (const Artifact * const a, artifacts) {
+ for (const Artifact * const a : artifacts) {
if (a->artifactType == Artifact::Generated)
filePaths << a->filePath();
}
diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp
index 1b2b04d22..4f21274af 100644
--- a/src/lib/corelib/buildgraph/executor.cpp
+++ b/src/lib/corelib/buildgraph/executor.cpp
@@ -61,6 +61,7 @@
#include <tools/profiling.h>
#include <tools/progressobserver.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qpair.h>
@@ -68,6 +69,7 @@
#include <algorithm>
#include <climits>
+#include <iterator>
namespace qbs {
namespace Internal {
@@ -97,9 +99,9 @@ Executor::Executor(const Logger &logger, QObject *parent)
Executor::~Executor()
{
// jobs must be destroyed before deleting the shared scan result cache
- foreach (ExecutorJob *job, m_availableJobs)
+ for (ExecutorJob *job : qAsConst(m_availableJobs))
delete job;
- foreach (ExecutorJob *job, m_processingJobs.keys())
+ for (ExecutorJob *job : m_processingJobs.keys())
delete job;
delete m_inputArtifactScanContext;
delete m_productInstaller;
@@ -119,7 +121,7 @@ FileTime Executor::recursiveFileTime(const QString &filePath) const
return newest;
const QStringList dirContents = QDir(filePath)
.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
- foreach (const QString &curFileName, dirContents) {
+ for (const QString &curFileName : dirContents) {
const FileTime ft = recursiveFileTime(filePath + QLatin1Char('/') + curFileName);
if (ft > newest)
newest = ft;
@@ -176,15 +178,15 @@ public:
void apply()
{
- QList<ResolvedProductPtr> allProducts = m_topLevelProject->allProducts();
+ const QList<ResolvedProductPtr> &allProducts = m_topLevelProject->allProducts();
Set<ResolvedProductPtr> allDependencies;
- foreach (const ResolvedProductPtr &product, allProducts)
+ for (const ResolvedProductPtr &product : allProducts)
allDependencies += product->dependencies;
- Set<ResolvedProductPtr> rootProducts
+ const Set<ResolvedProductPtr> rootProducts
= Set<ResolvedProductPtr>::fromList(allProducts) - allDependencies;
m_priority = UINT_MAX;
m_seenProducts.clear();
- foreach (const ResolvedProductPtr &rootProduct, rootProducts)
+ for (const ResolvedProductPtr &rootProduct : rootProducts)
traverse(rootProduct);
}
@@ -193,7 +195,7 @@ private:
{
if (!m_seenProducts.insert(product).second)
return;
- foreach (const ResolvedProductPtr &dependency, product->dependencies)
+ for (const ResolvedProductPtr &dependency : qAsConst(product->dependencies))
traverse(dependency);
if (!product->buildData)
return;
@@ -293,7 +295,7 @@ void Executor::initLeaves()
void Executor::updateLeaves(const NodeSet &nodes)
{
NodeSet seenNodes;
- foreach (BuildGraphNode * const node, nodes)
+ for (BuildGraphNode * const node : nodes)
updateLeaves(node, seenNodes);
}
@@ -312,7 +314,7 @@ void Executor::updateLeaves(BuildGraphNode *node, NodeSet &seenNodes)
}
bool isLeaf = true;
- foreach (BuildGraphNode *child, node->children) {
+ for (BuildGraphNode *child : qAsConst(node->children)) {
if (child->buildState != BuildGraphNode::Built) {
isLeaf = false;
updateLeaves(child, seenNodes);
@@ -394,7 +396,7 @@ bool Executor::isUpToDate(Artifact *artifact) const
return false;
}
- foreach (FileDependency *fileDependency, artifact->fileDependencies) {
+ for (FileDependency *fileDependency : qAsConst(artifact->fileDependencies)) {
if (!fileDependency->timestamp().isValid()) {
FileInfo fi(fileDependency->filePath());
fileDependency->setTimestamp(fi.lastModified());
@@ -423,7 +425,7 @@ bool Executor::mustExecuteTransformer(const TransformerPtr &transformer) const
if (transformer->alwaysRun)
return true;
bool hasAlwaysUpdatedArtifacts = false;
- foreach (Artifact *artifact, transformer->outputs) {
+ for (Artifact *artifact : qAsConst(transformer->outputs)) {
if (artifact->alwaysUpdated)
hasAlwaysUpdatedArtifacts = true;
else if (!m_buildOptions.forceTimestampCheck())
@@ -477,7 +479,7 @@ void Executor::executeRuleNode(RuleNode *ruleNode)
QBS_CHECK(!m_evalContext->engine()->isActive());
ArtifactSet changedInputArtifacts;
if (ruleNode->rule()->isDynamic()) {
- foreach (Artifact *artifact, m_changedSourceArtifacts) {
+ for (Artifact * const artifact : qAsConst(m_changedSourceArtifacts)) {
if (artifact->product != ruleNode->product)
continue;
if (ruleNode->rule()->acceptsAsInput(artifact))
@@ -514,12 +516,12 @@ void Executor::executeRuleNode(RuleNode *ruleNode)
const WeakPointer<ResolvedProduct> &product = ruleNode->product;
Set<RuleNode *> parentRules;
if (!result.createdNodes.isEmpty()) {
- foreach (BuildGraphNode *parent, ruleNode->parents) {
+ for (BuildGraphNode *parent : qAsConst(ruleNode->parents)) {
if (RuleNode *parentRule = dynamic_cast<RuleNode *>(parent))
parentRules += parentRule;
}
}
- foreach (BuildGraphNode *node, result.createdNodes) {
+ for (BuildGraphNode *node : qAsConst(result.createdNodes)) {
if (m_doDebug)
m_logger.qbsDebug() << "[EXEC] rule created " << node->toString();
loggedConnect(node, ruleNode, m_logger);
@@ -529,10 +531,10 @@ void Executor::executeRuleNode(RuleNode *ruleNode)
if (outputArtifact->fileTags().intersects(product->fileTags))
product->buildData->roots += outputArtifact;
- foreach (Artifact *inputArtifact, outputArtifact->transformer->inputs)
+ for (Artifact *inputArtifact : qAsConst(outputArtifact->transformer->inputs))
loggedConnect(ruleNode, inputArtifact, m_logger);
- foreach (RuleNode *parentRule, parentRules)
+ for (RuleNode *parentRule : qAsConst(parentRules))
loggedConnect(parentRule, outputArtifact, m_logger);
}
updateLeaves(result.createdNodes);
@@ -555,7 +557,7 @@ void Executor::finishJob(ExecutorJob *job, bool success)
m_availableJobs.append(job);
if (success) {
m_project->buildData->isDirty = true;
- foreach (Artifact *artifact, transformer->outputs) {
+ for (Artifact * const artifact : qAsConst(transformer->outputs)) {
if (artifact->alwaysUpdated) {
artifact->setTimestamp(FileTime::currentTime());
if (m_buildOptions.forceOutputCheck()
@@ -606,16 +608,14 @@ void Executor::finishJob(ExecutorJob *job, bool success)
static bool allChildrenBuilt(BuildGraphNode *node)
{
- foreach (BuildGraphNode *child, node->children)
- if (child->buildState != BuildGraphNode::Built)
- return false;
- return true;
+ return std::all_of(node->children.cbegin(), node->children.cend(),
+ std::mem_fn(&BuildGraphNode::isBuilt));
}
void Executor::finishNode(BuildGraphNode *leaf)
{
leaf->buildState = BuildGraphNode::Built;
- foreach (BuildGraphNode *parent, leaf->parents) {
+ for (BuildGraphNode * const parent : qAsConst(leaf->parents)) {
if (parent->buildState != BuildGraphNode::Buildable) {
if (m_doTrace) {
m_logger.qbsTrace() << "[EXEC] parent " << parent->toString()
@@ -658,12 +658,8 @@ bool Executor::transformerHasMatchingOutputTags(const TransformerConstPtr &trans
if (m_activeFileTags.isEmpty())
return true; // No filtering requested.
- foreach (Artifact * const output, transformer->outputs) {
- if (artifactHasMatchingOutputTags(output))
- return true;
- }
-
- return false;
+ return std::any_of(transformer->outputs.cbegin(), transformer->outputs.cend(),
+ [this](const Artifact *a) { return artifactHasMatchingOutputTags(a); });
}
bool Executor::artifactHasMatchingOutputTags(const Artifact *artifact) const
@@ -680,8 +676,8 @@ bool Executor::transformerHasMatchingInputFiles(const TransformerConstPtr &trans
return false;
if (transformer->inputs.isEmpty())
return true;
- foreach (const Artifact * const input, transformer->inputs) {
- foreach (const QString &filePath, m_buildOptions.filesToConsider()) {
+ for (const Artifact * const input : qAsConst(transformer->inputs)) {
+ for (const QString &filePath : m_buildOptions.filesToConsider()) {
if (input->filePath() == filePath
|| input->fileTags().intersects(m_tagsNeededForFilesToConsider)) {
return true;
@@ -698,8 +694,7 @@ void Executor::cancelJobs()
return;
m_logger.qbsTrace() << "Canceling all jobs.";
setState(ExecutorCanceling);
- QList<ExecutorJob *> jobs = m_processingJobs.keys();
- foreach (ExecutorJob *job, jobs)
+ for (ExecutorJob *job : m_processingJobs.keys())
job->cancel();
}
@@ -708,13 +703,10 @@ void Executor::setupProgressObserver()
if (!m_progressObserver)
return;
int totalEffort = 1; // For the effort after the last rule application;
- foreach (const ResolvedProductConstPtr &product, m_productsToBuild) {
+ for (const ResolvedProductConstPtr &product : qAsConst(m_productsToBuild)) {
QBS_CHECK(product->buildData);
- foreach (const BuildGraphNode * const node, product->buildData->nodes) {
- const RuleNode * const ruleNode = dynamic_cast<const RuleNode *>(node);
- if (ruleNode)
- ++totalEffort;
- }
+ const auto filtered = filterByType<RuleNode>(product->buildData->nodes);
+ totalEffort += std::distance(filtered.begin(), filtered.end());
}
m_progressObserver->initialize(tr("Building%1").arg(configString()), totalEffort);
}
@@ -723,7 +715,7 @@ void Executor::doSanityChecks()
{
QBS_CHECK(m_project);
QBS_CHECK(!m_productsToBuild.isEmpty());
- foreach (const ResolvedProductConstPtr &product, m_productsToBuild) {
+ for (const ResolvedProductConstPtr &product : qAsConst(m_productsToBuild)) {
QBS_CHECK(product->buildData);
QBS_CHECK(product->topLevelProject() == m_project);
}
@@ -784,7 +776,7 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = 0)
bool canRescue = commandListsAreEqual(artifact->transformer->commands, rad.commands);
if (canRescue) {
ResolvedProductPtr pseudoProduct = ResolvedProduct::create();
- foreach (const RescuableArtifactData::ChildData &cd, rad.children) {
+ for (const RescuableArtifactData::ChildData &cd : qAsConst(rad.children)) {
pseudoProduct->name = cd.productName;
pseudoProduct->profile = cd.productProfile;
Artifact * const child = lookupArtifact(pseudoProduct, m_project->buildData.data(),
@@ -833,7 +825,7 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = 0)
artifact->setTimestamp(rad.timeStamp);
if (childrenAdded && !childrenToConnect.isEmpty())
*childrenAdded = true;
- foreach (const ChildArtifactData &cad, childrenToConnect) {
+ for (const ChildArtifactData &cad : qAsConst(childrenToConnect)) {
safeConnect(artifact, cad.first, m_logger);
if (cad.second)
artifact->childrenAddedByScanner << cad.first;
@@ -853,7 +845,7 @@ bool Executor::checkForUnbuiltDependencies(Artifact *artifact)
{
bool buildingDependenciesFound = false;
NodeSet unbuiltDependencies;
- foreach (BuildGraphNode *dependency, artifact->children) {
+ for (BuildGraphNode * const dependency : qAsConst(artifact->children)) {
switch (dependency->buildState) {
case BuildGraphNode::Untouched:
case BuildGraphNode::Buildable:
@@ -890,7 +882,7 @@ bool Executor::checkForUnbuiltDependencies(Artifact *artifact)
void Executor::potentiallyRunTransformer(const TransformerPtr &transformer)
{
- foreach (Artifact * const output, transformer->outputs) {
+ for (Artifact * const output : qAsConst(transformer->outputs)) {
// Rescuing build data can introduce new dependencies, potentially delaying execution of
// this transformer.
bool childrenAddedDueToRescue;
@@ -920,7 +912,7 @@ void Executor::potentiallyRunTransformer(const TransformerPtr &transformer)
return;
}
- foreach (Artifact * const output, transformer->outputs) {
+ for (Artifact * const output : qAsConst(transformer->outputs)) {
// Scan all input artifacts. If new dependencies were found during scanning, delay
// execution of this transformer.
InputArtifactScanner scanner(output, m_inputArtifactScanContext, m_logger);
@@ -956,7 +948,7 @@ void Executor::runTransformer(const TransformerPtr &transformer)
QBS_CHECK(!m_availableJobs.isEmpty());
ExecutorJob *job = m_availableJobs.takeFirst();
- foreach (Artifact * const artifact, transformer->outputs)
+ for (Artifact * const artifact : qAsConst(transformer->outputs))
artifact->buildState = BuildGraphNode::Building;
m_processingJobs.insert(job, transformer);
job->run(transformer.data());
@@ -964,7 +956,7 @@ void Executor::runTransformer(const TransformerPtr &transformer)
void Executor::finishTransformer(const TransformerPtr &transformer)
{
- foreach (Artifact * const artifact, transformer->outputs) {
+ for (Artifact * const artifact : qAsConst(transformer->outputs)) {
possiblyInstallArtifact(artifact);
finishArtifact(artifact);
}
@@ -1016,9 +1008,9 @@ void Executor::checkForUnbuiltProducts()
if (m_buildOptions.executeRulesOnly())
return;
QList<ResolvedProductPtr> unbuiltProducts;
- foreach (const ResolvedProductPtr &product, m_productsToBuild) {
+ for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild)) {
bool productBuilt = true;
- foreach (BuildGraphNode *rootNode, product->buildData->roots) {
+ for (BuildGraphNode *rootNode : qAsConst(product->buildData->roots)) {
if (rootNode->buildState != BuildGraphNode::Built) {
productBuilt = false;
unbuiltProducts += product;
@@ -1028,9 +1020,10 @@ void Executor::checkForUnbuiltProducts()
if (productBuilt) {
// Any element still left after a successful build has not been re-created
// by any rule and therefore does not exist anymore as an artifact.
- foreach (const QString &filePath, product->buildData->rescuableArtifactData.keys()) {
- removeGeneratedArtifactFromDisk(filePath, m_logger);
- m_artifactsRemovedFromDisk << filePath;
+ for (auto it = product->buildData->rescuableArtifactData.cbegin();
+ it != product->buildData->rescuableArtifactData.cend(); ++it) {
+ removeGeneratedArtifactFromDisk(it.key(), m_logger);
+ m_artifactsRemovedFromDisk << it.key();
}
product->buildData->rescuableArtifactData.clear();
}
@@ -1040,7 +1033,7 @@ void Executor::checkForUnbuiltProducts()
m_logger.qbsInfo() << Tr::tr("Build done%1.").arg(configString());
} else {
m_error.append(Tr::tr("The following products could not be built%1:").arg(configString()));
- foreach (const ResolvedProductConstPtr &p, unbuiltProducts) {
+ for (const ResolvedProductConstPtr &p : qAsConst(unbuiltProducts)) {
QString errorMessage = Tr::tr("\t%1").arg(p->name);
if (p->profile != m_project->profile())
errorMessage += Tr::tr(" (for profile '%1')").arg(p->profile);
@@ -1129,14 +1122,14 @@ bool Executor::visit(RuleNode *ruleNode)
*/
void Executor::prepareAllNodes()
{
- foreach (const ResolvedProductPtr &product, m_project->allProducts()) {
+ for (const ResolvedProductPtr &product : m_project->allProducts()) {
if (product->enabled) {
QBS_CHECK(product->buildData);
- foreach (BuildGraphNode * const node, product->buildData->nodes)
+ for (BuildGraphNode * const node : qAsConst(product->buildData->nodes))
node->buildState = BuildGraphNode::Untouched;
}
}
- foreach (const ResolvedProductPtr &product, m_productsToBuild) {
+ for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild)) {
QBS_CHECK(product->buildData);
for (Artifact * const artifact : filterByType<Artifact>(product->buildData->nodes))
prepareArtifact(artifact);
@@ -1157,7 +1150,7 @@ void Executor::prepareArtifact(Artifact *artifact)
}
// Timestamps of file dependencies must be invalid for every build.
- foreach (FileDependency *fileDependency, artifact->fileDependencies)
+ for (FileDependency * const fileDependency : qAsConst(artifact->fileDependencies))
fileDependency->clearTimestamp();
}
@@ -1189,7 +1182,7 @@ void Executor::setupForBuildingSelectedFiles(const BuildGraphNode *node)
*/
void Executor::prepareReachableNodes()
{
- foreach (BuildGraphNode *root, m_roots)
+ for (BuildGraphNode * const root : qAsConst(m_roots))
prepareReachableNodes_impl(root);
}
@@ -1201,7 +1194,7 @@ void Executor::prepareReachableNodes_impl(BuildGraphNode *node)
return;
node->buildState = BuildGraphNode::Buildable;
- foreach (BuildGraphNode *child, node->children)
+ for (BuildGraphNode *child : qAsConst(node->children))
prepareReachableNodes_impl(child);
}
@@ -1209,17 +1202,15 @@ void Executor::prepareProducts()
{
ProductPrioritySetter prioritySetter(m_project.data());
prioritySetter.apply();
- foreach (ResolvedProductPtr product, m_productsToBuild)
+ for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild))
product->setupBuildEnvironment(m_evalContext->engine(), m_project->environment);
}
void Executor::setupRootNodes()
{
m_roots.clear();
- foreach (const ResolvedProductPtr &product, m_productsToBuild) {
- foreach (BuildGraphNode *root, product->buildData->roots)
- m_roots += root;
- }
+ for (const ResolvedProductPtr &product : qAsConst(m_productsToBuild))
+ m_roots += product->buildData->roots;
}
void Executor::setState(ExecutorState s)
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
index 734f58bce..3cc8cbdef 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
@@ -52,6 +52,7 @@
#include <tools/scannerpluginmanager.h>
#include <tools/qbsassert.h>
#include <tools/error.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qstringlist.h>
@@ -75,7 +76,7 @@ static void resolveDepencency(const RawScannedDependency &dependency,
FileDependency *fileDependencyArtifact = 0;
Artifact *dependencyInProduct = 0;
Artifact *dependencyInOtherProduct = 0;
- foreach (FileResourceBase *lookupResult, project->topLevelProject()
+ for (FileResourceBase *lookupResult : project->topLevelProject()
->buildData->lookupFiles(absDirPath, dependency.fileName())) {
if ((fileDependencyArtifact = dynamic_cast<FileDependency *>(lookupResult)))
continue;
@@ -135,9 +136,10 @@ void InputArtifactScanner::scan()
// Remove all connections to children that were added by the dependency scanner.
// They will be regenerated.
- foreach (Artifact *dependency, m_artifact->childrenAddedByScanner)
+ const Set<Artifact *> childrenAddedByScanner = m_artifact->childrenAddedByScanner;
+ m_artifact->childrenAddedByScanner.clear();
+ for (Artifact * const dependency : childrenAddedByScanner)
disconnect(m_artifact, dependency, m_logger);
- QBS_CHECK(m_artifact->childrenAddedByScanner.isEmpty());
ArtifactSet::const_iterator it = m_artifact->transformer->inputs.cbegin();
for (; it != m_artifact->transformer->inputs.cend(); ++it) {
@@ -170,7 +172,7 @@ void InputArtifactScanner::scanForFileDependencies(Artifact *inputArtifact)
if (!visitedFilePaths.insert(filePathToBeScanned).second)
continue;
- foreach (DependencyScanner *scanner, scanners) {
+ for (DependencyScanner * const scanner : scanners) {
scanForScannerFileDependencies(scanner, inputArtifact, fileToBeScanned,
scanner->recursive() ? &filesToScan : 0, cacheItem[scanner->key()]);
}
@@ -184,15 +186,15 @@ Set<DependencyScanner *> InputArtifactScanner::scannersForArtifact(const Artifac
ScriptEngine *engine = product->topLevelProject()->buildData->evaluationContext->engine();
QHash<FileTag, InputArtifactScannerContext::DependencyScannerCacheItem> &scannerCache
= m_context->scannersCache[product];
- foreach (const FileTag &fileTag, artifact->fileTags()) {
+ for (const FileTag &fileTag : artifact->fileTags()) {
InputArtifactScannerContext::DependencyScannerCacheItem &cache = scannerCache[fileTag];
if (!cache.valid) {
cache.valid = true;
- foreach (ScannerPlugin *scanner, ScannerPluginManager::scannersForFileTag(fileTag)) {
+ for (ScannerPlugin *scanner : ScannerPluginManager::scannersForFileTag(fileTag)) {
PluginDependencyScanner *pluginScanner = new PluginDependencyScanner(scanner);
cache.scanners += DependencyScannerPtr(pluginScanner);
}
- foreach (const ResolvedScannerConstPtr &scanner, product->scanners) {
+ for (const ResolvedScannerConstPtr &scanner : qAsConst(product->scanners)) {
if (scanner->inputs.contains(fileTag)) {
cache.scanners += DependencyScannerPtr(
new UserDependencyScanner(scanner, m_logger, engine));
@@ -200,9 +202,8 @@ Set<DependencyScanner *> InputArtifactScanner::scannersForArtifact(const Artifac
}
}
}
- foreach (const DependencyScannerPtr &scanner, cache.scanners) {
+ for (const DependencyScannerPtr &scanner : qAsConst(cache.scanners))
scanners += scanner.data();
- }
}
return scanners;
}
@@ -225,7 +226,7 @@ void InputArtifactScanner::scanForScannerFileDependencies(DependencyScanner *sca
if (m_logger.traceEnabled()) {
m_logger.qbsTrace()
<< "[DEPSCAN] include paths (cache " << (cacheHit ? "hit)" : "miss)");
- foreach (const QString &s, cache.searchPaths)
+ for (const QString &s : qAsConst(cache.searchPaths))
m_logger.qbsTrace() << " " << s;
}
@@ -251,7 +252,7 @@ void InputArtifactScanner::resolveScanResultDependencies(const Artifact *inputAr
const RawScanResult &scanResult, QList<FileResourceBase *> *artifactsToScan,
InputArtifactScannerContext::ScannerResolvedDependenciesCache &cache)
{
- foreach (const RawScannedDependency &dependency, scanResult.deps) {
+ for (const RawScannedDependency &dependency : scanResult.deps) {
const QString &dependencyFilePath = dependency.filePath();
InputArtifactScannerContext::ResolvedDependencyCacheItem &cachedResolvedDependencyItem
= cache.resolvedDependenciesCache[dependency.dirPath()][dependency.fileName()];
@@ -269,7 +270,7 @@ void InputArtifactScanner::resolveScanResultDependencies(const Artifact *inputAr
}
// try include paths
- foreach (const QString &includePath, cache.searchPaths) {
+ for (const QString &includePath : cache.searchPaths) {
resolveDepencency(dependency, inputArtifact->product.data(),
&resolvedDependency, includePath);
if (resolvedDependency.isValid())
diff --git a/src/lib/corelib/buildgraph/nodetreedumper.cpp b/src/lib/corelib/buildgraph/nodetreedumper.cpp
index 4ae43e2ae..d66f5754f 100644
--- a/src/lib/corelib/buildgraph/nodetreedumper.cpp
+++ b/src/lib/corelib/buildgraph/nodetreedumper.cpp
@@ -60,11 +60,11 @@ NodeTreeDumper::NodeTreeDumper(QIODevice &outDevice) : m_outDevice(outDevice)
void NodeTreeDumper::start(const QList<ResolvedProductPtr> &products)
{
m_indentation = 0;
- foreach (const ResolvedProductPtr &p, products) {
+ for (const ResolvedProductPtr &p : products) {
if (!p->buildData)
continue;
m_currentProduct = p;
- foreach (Artifact * const root, p->buildData->rootArtifacts())
+ for (Artifact * const root : p->buildData->rootArtifacts())
root->accept(this);
m_visited.clear();
QBS_CHECK(m_indentation == 0);
diff --git a/src/lib/corelib/buildgraph/processcommandexecutor.cpp b/src/lib/corelib/buildgraph/processcommandexecutor.cpp
index b1858837c..3efcc2653 100644
--- a/src/lib/corelib/buildgraph/processcommandexecutor.cpp
+++ b/src/lib/corelib/buildgraph/processcommandexecutor.cpp
@@ -86,7 +86,7 @@ void ProcessCommandExecutor::doSetup()
QProcessEnvironment env = m_buildEnvironment;
const QProcessEnvironment &additionalVariables = cmd->environment();
- foreach (const QString &key, additionalVariables.keys())
+ for (const QString &key : additionalVariables.keys())
env.insert(key, additionalVariables.value(key));
m_commandEnvironment = env;
diff --git a/src/lib/corelib/buildgraph/productbuilddata.cpp b/src/lib/corelib/buildgraph/productbuilddata.cpp
index 7006fef13..3ed2bd3fe 100644
--- a/src/lib/corelib/buildgraph/productbuilddata.cpp
+++ b/src/lib/corelib/buildgraph/productbuilddata.cpp
@@ -80,7 +80,7 @@ void ProductBuildData::store(PersistentPool &pool) const
void addArtifactToSet(Artifact *artifact, ProductBuildData::ArtifactSetByFileTag &container)
{
- foreach (const FileTag &tag, artifact->fileTags())
+ for (const FileTag &tag : artifact->fileTags())
container[tag] += artifact;
}
@@ -97,7 +97,7 @@ void removeArtifactFromSetByFileTag(Artifact *artifact, const FileTag &fileTag,
void removeArtifactFromSet(Artifact *artifact, ProductBuildData::ArtifactSetByFileTag &container)
{
- foreach (const FileTag &t, artifact->fileTags())
+ for (const FileTag &t : artifact->fileTags())
removeArtifactFromSetByFileTag(artifact, t, container);
}
diff --git a/src/lib/corelib/buildgraph/productinstaller.cpp b/src/lib/corelib/buildgraph/productinstaller.cpp
index fef34ddbf..d0d6dab55 100644
--- a/src/lib/corelib/buildgraph/productinstaller.cpp
+++ b/src/lib/corelib/buildgraph/productinstaller.cpp
@@ -50,6 +50,7 @@
#include <tools/hostosinfo.h>
#include <tools/progressobserver.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qfileinfo.h>
@@ -94,7 +95,7 @@ void ProductInstaller::install()
removeInstallRoot();
QList<const Artifact *> artifactsToInstall;
- foreach (const ResolvedProductConstPtr &product, m_products) {
+ for (const ResolvedProductConstPtr &product : qAsConst(m_products)) {
QBS_CHECK(product->buildData);
for (const Artifact *artifact : filterByType<Artifact>(product->buildData->nodes)) {
if (artifact->properties->qbsPropertyValue(QLatin1String("install")).toBool())
@@ -103,7 +104,7 @@ void ProductInstaller::install()
}
m_observer->initialize(Tr::tr("Installing"), artifactsToInstall.count());
- foreach (const Artifact * const a, artifactsToInstall) {
+ for (const Artifact * const a : qAsConst(artifactsToInstall)) {
copyFile(a);
m_observer->incrementProgressValue();
}
diff --git a/src/lib/corelib/buildgraph/projectbuilddata.cpp b/src/lib/corelib/buildgraph/projectbuilddata.cpp
index af3f9d56c..6b866d95b 100644
--- a/src/lib/corelib/buildgraph/projectbuilddata.cpp
+++ b/src/lib/corelib/buildgraph/projectbuilddata.cpp
@@ -56,6 +56,7 @@
#include <tools/fileinfo.h>
#include <tools/persistence.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -63,7 +64,7 @@ namespace Internal {
static Set<ResolvedProductPtr> findDependentProducts(const ResolvedProductPtr &product)
{
Set<ResolvedProductPtr> result;
- foreach (const ResolvedProductPtr &parent, product->topLevelProject()->allProducts()) {
+ for (const ResolvedProductPtr &parent : product->topLevelProject()->allProducts()) {
if (parent->dependencies.contains(product))
result += parent;
}
@@ -104,7 +105,7 @@ void ProjectBuildData::insertIntoLookupTable(FileResourceBase *fileres)
= m_artifactLookupTable[fileres->fileName()][fileres->dirPath()];
const auto * const artifact = dynamic_cast<Artifact *>(fileres);
if (artifact && artifact->artifactType == Artifact::Generated) {
- foreach (const auto *file, lst) {
+ for (const auto *file : lst) {
const auto * const otherArtifact = dynamic_cast<const Artifact *>(file);
if (otherArtifact) {
ErrorInfo error;
@@ -159,7 +160,7 @@ static void disconnectArtifactChildren(Artifact *artifact, const Logger &logger)
logger.qbsTrace() << QString::fromLatin1("[BG] disconnectChildren: '%1'")
.arg(relativeArtifactFileName(artifact));
}
- foreach (BuildGraphNode * const child, artifact->children)
+ for (BuildGraphNode * const child : qAsConst(artifact->children))
child->parents.remove(artifact);
artifact->children.clear();
artifact->childrenAddedByScanner.clear();
@@ -171,7 +172,7 @@ static void disconnectArtifactParents(Artifact *artifact, const Logger &logger)
logger.qbsTrace() << QString::fromLatin1("[BG] disconnectParents: '%1'")
.arg(relativeArtifactFileName(artifact));
}
- foreach (BuildGraphNode * const parent, artifact->parents) {
+ for (BuildGraphNode * const parent : qAsConst(artifact->parents)) {
parent->children.remove(artifact);
Artifact *parentArtifact = dynamic_cast<Artifact *>(parent);
if (parentArtifact) {
@@ -229,11 +230,10 @@ void ProjectBuildData::removeArtifactAndExclusiveDependents(Artifact *artifact,
static void removeFromRuleNodes(Artifact *artifact, const Logger &logger)
{
- foreach (const ResolvedProductPtr &product,
- artifact->product->topLevelProject()->allProducts()) {
+ for (const ResolvedProductPtr &product : artifact->product->topLevelProject()->allProducts()) {
if (!product->buildData)
continue;
- foreach (BuildGraphNode *n, product->buildData->nodes) {
+ for (BuildGraphNode *n : qAsConst(product->buildData->nodes)) {
if (n->type() != BuildGraphNode::RuleNodeType)
continue;
RuleNode * const ruleNode = static_cast<RuleNode *>(n);
@@ -298,7 +298,7 @@ void BuildDataResolver::resolveBuildData(const TopLevelProjectPtr &resolvedProje
const QList<ResolvedProductPtr> allProducts = resolvedProject->allProducts();
evalContext->initializeObserver(Tr::tr("Setting up build graph for configuration %1")
.arg(resolvedProject->id()), allProducts.count() + 1);
- foreach (ResolvedProductPtr rProduct, allProducts) {
+ for (ResolvedProductPtr rProduct : allProducts) {
if (rProduct->enabled)
resolveProductBuildData(rProduct);
evalContext->incrementProgressValue();
@@ -311,7 +311,7 @@ void BuildDataResolver::resolveProductBuildDataForExistingProject(const TopLevel
const QList<ResolvedProductPtr> &freshProducts)
{
m_project = project;
- foreach (const ResolvedProductPtr &product, freshProducts) {
+ for (const ResolvedProductPtr &product : freshProducts) {
if (product->enabled)
resolveProductBuildData(product);
}
@@ -359,7 +359,7 @@ private:
{
if (!m_rulesOnPath.insert(rule.data()).second) {
QString pathstr;
- foreach (const Rule *r, m_rulePath) {
+ for (const Rule *r : qAsConst(m_rulePath)) {
pathstr += QLatin1Char('\n') + r->toString() + QLatin1Char('\t')
+ r->prepareScript->location.toString();
}
@@ -412,7 +412,7 @@ void BuildDataResolver::resolveProductBuildData(const ResolvedProductPtr &produc
product->buildData.reset(new ProductBuildData);
ProductBuildData::ArtifactSetByFileTag artifactsPerFileTag;
- foreach (ResolvedProductPtr dependency, product->dependencies) {
+ for (ResolvedProductPtr dependency : qAsConst(product->dependencies)) {
QBS_CHECK(dependency->enabled);
resolveProductBuildData(dependency);
}
@@ -430,13 +430,13 @@ void BuildDataResolver::resolveProductBuildData(const ResolvedProductPtr &produc
artifactsPerFileTag["qbs"].insert(qbsFileArtifact);
// read sources
- foreach (const SourceArtifactConstPtr &sourceArtifact, product->allEnabledFiles()) {
+ for (const SourceArtifactConstPtr &sourceArtifact : product->allEnabledFiles()) {
QString filePath = sourceArtifact->absoluteFilePath;
if (lookupArtifact(product, filePath))
continue; // ignore duplicate artifacts
Artifact *artifact = createArtifact(product, sourceArtifact, m_logger);
- foreach (const FileTag &fileTag, artifact->fileTags())
+ for (const FileTag &fileTag : artifact->fileTags())
artifactsPerFileTag[fileTag].insert(artifact);
}
diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp
index 62903c3e8..9eb440df6 100644
--- a/src/lib/corelib/buildgraph/qtmocscanner.cpp
+++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp
@@ -178,10 +178,10 @@ void QtMocScanner::findIncludedMocCppFiles()
m_logger.qbsTrace() << "[QtMocScanner] looking for included moc_XXX.cpp files";
static const FileTags mocCppTags = {m_tags.cpp, m_tags.objcpp};
- foreach (Artifact *artifact, m_product->lookupArtifactsByFileTags(mocCppTags)) {
+ for (Artifact *artifact : m_product->lookupArtifactsByFileTags(mocCppTags)) {
const RawScanResult scanResult
= runScanner(scannerPluginForFileTags(artifact->fileTags()), artifact);
- foreach (const RawScannedDependency &dependency, scanResult.deps) {
+ for (const RawScannedDependency &dependency : scanResult.deps) {
QString includedFileName = dependency.fileName();
if (includedFileName.startsWith(QLatin1String("moc_"))
&& includedFileName.endsWith(QLatin1String(".cpp"))) {
diff --git a/src/lib/corelib/buildgraph/rulecommands.cpp b/src/lib/corelib/buildgraph/rulecommands.cpp
index 81aded854..ce50bcfcf 100644
--- a/src/lib/corelib/buildgraph/rulecommands.cpp
+++ b/src/lib/corelib/buildgraph/rulecommands.cpp
@@ -209,7 +209,7 @@ ProcessCommand::ProcessCommand()
void ProcessCommand::getEnvironmentFromList(const QStringList &envList)
{
m_environment.clear();
- foreach (const QString &env, envList) {
+ for (const QString &env : envList) {
const int equalsIndex = env.indexOf(QLatin1Char('='));
if (equalsIndex <= 0 || equalsIndex == env.count() - 1)
continue;
@@ -441,7 +441,7 @@ QList<AbstractCommandPtr> loadCommandList(PersistentPool &pool)
void storeCommandList(const QList<AbstractCommandPtr> &commands, PersistentPool &pool)
{
pool.store(commands.count());
- foreach (const AbstractCommandPtr &cmd, commands) {
+ for (const AbstractCommandPtr &cmd : commands) {
pool.store(static_cast<quint8>(cmd->type()));
pool.store(cmd);
}
diff --git a/src/lib/corelib/buildgraph/rulegraph.cpp b/src/lib/corelib/buildgraph/rulegraph.cpp
index 5d206876f..b3eeb8971 100644
--- a/src/lib/corelib/buildgraph/rulegraph.cpp
+++ b/src/lib/corelib/buildgraph/rulegraph.cpp
@@ -41,6 +41,7 @@
#include <language/language.h>
#include <logging/translator.h>
#include <tools/error.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -53,8 +54,8 @@ void RuleGraph::build(const Set<RulePtr> &rules, const FileTags &productFileTags
{
QMap<FileTag, QList<const Rule *> > inputFileTagToRule;
m_rules.reserve(rules.count());
- foreach (const RulePtr &rule, rules) {
- foreach (const FileTag &fileTag, rule->collectedOutputFileTags())
+ for (const RulePtr &rule : rules) {
+ for (const FileTag &fileTag : rule->collectedOutputFileTags())
m_outputFileTagToRule[fileTag].append(rule.data());
insert(rule);
}
@@ -62,13 +63,13 @@ void RuleGraph::build(const Set<RulePtr> &rules, const FileTags &productFileTags
m_parents.resize(rules.count());
m_children.resize(rules.count());
- foreach (const RuleConstPtr &rule, m_rules) {
+ for (const RuleConstPtr &rule : qAsConst(m_rules)) {
FileTags inFileTags = rule->inputs;
inFileTags += rule->auxiliaryInputs;
inFileTags += rule->explicitlyDependsOn;
- foreach (const FileTag &fileTag, inFileTags) {
+ for (const FileTag &fileTag : qAsConst(inFileTags)) {
inputFileTagToRule[fileTag].append(rule.data());
- foreach (const Rule * const producingRule, m_outputFileTagToRule.value(fileTag)) {
+ for (const Rule * const producingRule : m_outputFileTagToRule.value(fileTag)) {
if (!producingRule->collectedOutputFileTags().intersects(
rule->excludedAuxiliaryInputs)) {
connect(rule.data(), producingRule);
@@ -78,19 +79,19 @@ void RuleGraph::build(const Set<RulePtr> &rules, const FileTags &productFileTags
}
QList<const Rule *> productRules;
- foreach (const FileTag &productFileTag, productFileTags) {
+ for (const FileTag &productFileTag : productFileTags) {
QList<const Rule *> rules = m_outputFileTagToRule.value(productFileTag);
productRules += rules;
//### check: the rule graph must be a in valid shape!
}
- foreach (const Rule *r, productRules)
+ for (const Rule *r : qAsConst(productRules))
m_rootRules += r->ruleGraphId;
}
void RuleGraph::accept(RuleGraphVisitor *visitor) const
{
const RuleConstPtr nullParent;
- foreach (int rootIndex, m_rootRules)
+ for (int rootIndex : qAsConst(m_rootRules))
traverse(visitor, nullParent, m_rules.at(rootIndex));
}
@@ -99,12 +100,11 @@ void RuleGraph::dump() const
QByteArray indent;
printf("---rule graph dump:\n");
Set<int> rootRules;
- foreach (const RuleConstPtr &rule, m_rules)
+ for (const RuleConstPtr &rule : qAsConst(m_rules))
if (m_parents[rule->ruleGraphId].isEmpty())
rootRules += rule->ruleGraphId;
- foreach (int idx, rootRules) {
+ for (int idx : qAsConst(rootRules))
dump_impl(indent, idx);
- }
}
void RuleGraph::dump_impl(QByteArray &indent, int rootIndex) const
@@ -115,7 +115,7 @@ void RuleGraph::dump_impl(QByteArray &indent, int rootIndex) const
printf("\n");
indent.append(" ");
- foreach (int childIndex, m_children[rootIndex])
+ for (int childIndex : qAsConst(m_children[rootIndex]))
dump_impl(indent, childIndex);
indent.chop(2);
}
@@ -143,7 +143,7 @@ void RuleGraph::traverse(RuleGraphVisitor *visitor, const RuleConstPtr &parentRu
const RuleConstPtr &rule) const
{
visitor->visit(parentRule, rule);
- foreach (int childIndex, m_children.at(rule->ruleGraphId))
+ for (int childIndex : m_children.at(rule->ruleGraphId))
traverse(visitor, rule, m_rules.at(childIndex));
visitor->endVisit(rule);
}
diff --git a/src/lib/corelib/buildgraph/rulenode.cpp b/src/lib/corelib/buildgraph/rulenode.cpp
index 3ac049456..a9c547490 100644
--- a/src/lib/corelib/buildgraph/rulenode.cpp
+++ b/src/lib/corelib/buildgraph/rulenode.cpp
@@ -50,6 +50,7 @@
#include <logging/logger.h>
#include <tools/persistence.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -113,7 +114,7 @@ void RuleNode::apply(const Logger &logger, const ArtifactSet &changedInputs,
return;
if (!removedInputs.isEmpty()) {
ArtifactSet outputArtifactsToRemove;
- foreach (Artifact *artifact, removedInputs) {
+ for (Artifact * const artifact : removedInputs) {
for (Artifact *parent : filterByType<Artifact>(artifact->parents)) {
if (parent->transformer->rule != m_rule) {
// parent was not created by our rule.
@@ -158,8 +159,8 @@ void RuleNode::store(PersistentPool &pool) const
ArtifactSet RuleNode::currentInputArtifacts() const
{
ArtifactSet s;
- foreach (const FileTag &t, m_rule->inputs) {
- foreach (Artifact *artifact, product->lookupArtifactsByFileTag(t)) {
+ for (const FileTag &t : qAsConst(m_rule->inputs)) {
+ for (Artifact *artifact : product->lookupArtifactsByFileTag(t)) {
if (artifact->transformer && artifact->transformer->rule == m_rule) {
// Do not add compatible artifacts as inputs that were created by this rule.
// This can e.g. happen for the ["cpp", "hpp"] -> ["hpp", "cpp", "unmocable"] rule.
@@ -169,7 +170,7 @@ ArtifactSet RuleNode::currentInputArtifacts() const
}
}
- foreach (const ResolvedProductConstPtr &dep, product->dependencies) {
+ for (const ResolvedProductConstPtr &dep : qAsConst(product->dependencies)) {
if (!dep->buildData)
continue;
if (m_rule->inputsFromDependencies.isEmpty())
diff --git a/src/lib/corelib/buildgraph/rulesapplicator.cpp b/src/lib/corelib/buildgraph/rulesapplicator.cpp
index 99f7fb627..e76190d81 100644
--- a/src/lib/corelib/buildgraph/rulesapplicator.cpp
+++ b/src/lib/corelib/buildgraph/rulesapplicator.cpp
@@ -58,6 +58,7 @@
#include <tools/fileinfo.h>
#include <tools/scripttools.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qscopedpointer.h>
@@ -105,7 +106,7 @@ void RulesApplicator::applyRule(const RuleConstPtr &rule, const ArtifactSet &inp
if (m_rule->multiplex) { // apply the rule once for a set of inputs
doApply(inputArtifacts, prepareScriptContext);
} else { // apply the rule once for each input
- foreach (Artifact * const inputArtifact, inputArtifacts) {
+ for (Artifact * const inputArtifact : inputArtifacts) {
ArtifactSet lst;
lst += inputArtifact;
doApply(lst, prepareScriptContext);
@@ -114,11 +115,11 @@ void RulesApplicator::applyRule(const RuleConstPtr &rule, const ArtifactSet &inp
}
void RulesApplicator::handleRemovedRuleOutputs(const ArtifactSet &inputArtifacts,
- ArtifactSet outputArtifactsToRemove, const Logger &logger)
+ const ArtifactSet &outputArtifactsToRemove, const Logger &logger)
{
ArtifactSet artifactsToRemove;
const TopLevelProject *project = 0;
- foreach (Artifact *removedArtifact, outputArtifactsToRemove) {
+ for (Artifact * const removedArtifact : outputArtifactsToRemove) {
if (logger.traceEnabled()) {
logger.qbsTrace() << "[BG] dynamic rule removed output artifact "
<< removedArtifact->toString();
@@ -129,12 +130,12 @@ void RulesApplicator::handleRemovedRuleOutputs(const ArtifactSet &inputArtifacts
&artifactsToRemove);
}
// parents of removed artifacts must update their transformers
- foreach (Artifact *removedArtifact, artifactsToRemove) {
+ for (Artifact *removedArtifact : qAsConst(artifactsToRemove)) {
for (Artifact *parent : removedArtifact->parentArtifacts())
parent->product->registerArtifactWithChangedInputs(parent);
}
EmptyDirectoriesRemover(project, logger).removeEmptyParentDirectories(artifactsToRemove);
- foreach (Artifact *artifact, artifactsToRemove) {
+ for (Artifact * const artifact : qAsConst(artifactsToRemove)) {
QBS_CHECK(!inputArtifacts.contains(artifact));
delete artifact;
}
@@ -148,7 +149,7 @@ static void copyProperty(const QString &name, const QScriptValue &src, QScriptVa
static QStringList toStringList(const ArtifactSet &artifacts)
{
QStringList lst;
- foreach (const Artifact *artifact, artifacts) {
+ for (const Artifact * const artifact : artifacts) {
const QString str = artifact->filePath() + QLatin1String(" [")
+ artifact->fileTags().toStringList().join(QLatin1String(", ")) + QLatin1Char(']');
lst << str;
@@ -189,7 +190,7 @@ void RulesApplicator::doApply(const ArtifactSet &inputArtifacts, QScriptValue &p
handleRemovedRuleOutputs(m_completeInputSet, oldOutputs - newOutputs, m_logger);
} else {
Set<QString> outputFilePaths;
- foreach (const RuleArtifactConstPtr &ruleArtifact, m_rule->artifacts) {
+ for (const RuleArtifactConstPtr &ruleArtifact : qAsConst(m_rule->artifacts)) {
Artifact * const outputArtifact
= createOutputArtifactFromRuleArtifact(ruleArtifact, inputArtifacts,
&outputFilePaths);
@@ -203,10 +204,10 @@ void RulesApplicator::doApply(const ArtifactSet &inputArtifacts, QScriptValue &p
if (outputArtifacts.isEmpty())
return;
- foreach (Artifact *outputArtifact, outputArtifacts) {
+ for (Artifact * const outputArtifact : qAsConst(outputArtifacts)) {
// connect artifacts that match the file tags in explicitlyDependsOn
- foreach (const FileTag &fileTag, m_rule->explicitlyDependsOn)
- foreach (Artifact *dependency, m_product->lookupArtifactsByFileTag(fileTag))
+ for (const FileTag &fileTag : qAsConst(m_rule->explicitlyDependsOn))
+ for (Artifact *dependency : m_product->lookupArtifactsByFileTag(fileTag))
loggedConnect(outputArtifact, dependency, m_logger);
outputArtifact->product->unregisterArtifactWithChangedInputs(outputArtifact);
@@ -263,7 +264,7 @@ void RulesApplicator::doApply(const ArtifactSet &inputArtifacts, QScriptValue &p
ArtifactSet RulesApplicator::collectOldOutputArtifacts(const ArtifactSet &inputArtifacts) const
{
ArtifactSet result;
- foreach (Artifact *a, inputArtifacts) {
+ for (Artifact * const a : inputArtifacts) {
for (Artifact *p : a->parentArtifacts()) {
QBS_CHECK(p->transformer);
if (p->transformer->rule == m_rule && p->transformer->inputs.contains(a))
@@ -372,7 +373,7 @@ Artifact *RulesApplicator::createOutputArtifact(const QString &filePath, const F
if (outputArtifact->properties->qbsPropertyValue(QLatin1String("install")).toBool())
outputArtifact->addFileTag("installable");
- foreach (Artifact *inputArtifact, inputArtifacts) {
+ for (Artifact * const inputArtifact : inputArtifacts) {
QBS_CHECK(outputArtifact != inputArtifact);
loggedConnect(outputArtifact, inputArtifact, m_logger);
}
@@ -428,7 +429,7 @@ class ArtifactBindingsExtractor
static Set<QString> getArtifactItemPropertyNames()
{
Set<QString> s;
- foreach (const PropertyDeclaration &pd,
+ for (const PropertyDeclaration &pd :
BuiltinDeclarations::instance().declarationsForType(
ItemType::Artifact).properties()) {
s.insert(pd.name());
@@ -494,10 +495,9 @@ Artifact *RulesApplicator::createOutputArtifactFromScriptValue(const QScriptValu
Artifact *output = createOutputArtifact(filePath, fileTags, alwaysUpdated, inputArtifacts);
const FileTags explicitlyDependsOn = FileTags::fromStringList(
obj.property(QLatin1String("explicitlyDependsOn")).toVariant().toStringList());
- foreach (const FileTag &tag, explicitlyDependsOn) {
- foreach (Artifact *dependency, m_product->lookupArtifactsByFileTag(tag)) {
+ for (const FileTag &tag : explicitlyDependsOn) {
+ for (Artifact * const dependency : m_product->lookupArtifactsByFileTag(tag))
loggedConnect(output, dependency, m_logger);
- }
}
ArtifactBindingsExtractor().apply(output, obj);
return output;
diff --git a/src/lib/corelib/buildgraph/rulesapplicator.h b/src/lib/corelib/buildgraph/rulesapplicator.h
index 665429f10..93c2ed9af 100644
--- a/src/lib/corelib/buildgraph/rulesapplicator.h
+++ b/src/lib/corelib/buildgraph/rulesapplicator.h
@@ -68,7 +68,7 @@ public:
void applyRule(const RuleConstPtr &rule, const ArtifactSet &inputArtifacts);
static void handleRemovedRuleOutputs(const ArtifactSet &inputArtifacts,
- ArtifactSet artifactsToRemove, const Logger &logger);
+ const ArtifactSet &artifactsToRemove, const Logger &logger);
private:
void doApply(const ArtifactSet &inputArtifacts, QScriptValue &prepareScriptContext);
diff --git a/src/lib/corelib/buildgraph/timestampsupdater.cpp b/src/lib/corelib/buildgraph/timestampsupdater.cpp
index 7fefd60d3..2e2e8a6c6 100644
--- a/src/lib/corelib/buildgraph/timestampsupdater.cpp
+++ b/src/lib/corelib/buildgraph/timestampsupdater.cpp
@@ -66,7 +66,7 @@ public:
// For target artifacts, we have to update the on-disk timestamp, because
// the executor will look at it.
- foreach (Artifact * const targetArtifact, product->targetArtifacts()) {
+ for (Artifact * const targetArtifact : product->targetArtifacts()) {
if (FileInfo(targetArtifact->filePath()).exists())
QFile(targetArtifact->filePath()).open(QIODevice::WriteOnly | QIODevice::Append);
}
@@ -86,7 +86,7 @@ void TimestampsUpdater::updateTimestamps(const TopLevelProjectPtr &project,
const QList<ResolvedProductPtr> &products, const Logger &logger)
{
TimestampsUpdateVisitor v;
- foreach (const ResolvedProductPtr &product, products)
+ for (const ResolvedProductPtr &product : products)
v.visitProduct(product);
project->buildData->isDirty = !products.isEmpty();
project->store(logger);
diff --git a/src/lib/corelib/buildgraph/transformer.cpp b/src/lib/corelib/buildgraph/transformer.cpp
index 974434c3f..f261ffb86 100644
--- a/src/lib/corelib/buildgraph/transformer.cpp
+++ b/src/lib/corelib/buildgraph/transformer.cpp
@@ -133,8 +133,8 @@ QScriptValue Transformer::translateInOutputs(ScriptEngine *scriptEngine,
{
typedef QMap<QString, QList<Artifact*> > TagArtifactsMap;
TagArtifactsMap tagArtifactsMap;
- foreach (Artifact *artifact, artifacts)
- foreach (const FileTag &fileTag, artifact->fileTags())
+ for (Artifact *artifact : artifacts)
+ for (const FileTag &fileTag : artifact->fileTags())
tagArtifactsMap[fileTag.toString()].append(artifact);
for (TagArtifactsMap::Iterator it = tagArtifactsMap.begin(); it != tagArtifactsMap.end(); ++it)
std::sort(it.value().begin(), it.value().end(), compareByFilePath);
@@ -143,9 +143,10 @@ QScriptValue Transformer::translateInOutputs(ScriptEngine *scriptEngine,
for (TagArtifactsMap::const_iterator tag = tagArtifactsMap.constBegin(); tag != tagArtifactsMap.constEnd(); ++tag) {
const QList<Artifact*> &artifacts = tag.value();
QScriptValue jsFileConfig = scriptEngine->newArray(artifacts.count());
- int i=0;
- foreach (Artifact *artifact, artifacts) {
- jsFileConfig.setProperty(i++, translateFileConfig(scriptEngine, artifact, defaultModuleName));
+ int i = 0;
+ for (Artifact * const artifact : artifacts) {
+ jsFileConfig.setProperty(i++, translateFileConfig(scriptEngine, artifact,
+ defaultModuleName));
}
jsTagFiles.setProperty(tag.key(), jsFileConfig);
}
diff --git a/src/lib/corelib/jsextensions/environmentextension.cpp b/src/lib/corelib/jsextensions/environmentextension.cpp
index 6b7dbc679..2986363b6 100644
--- a/src/lib/corelib/jsextensions/environmentextension.cpp
+++ b/src/lib/corelib/jsextensions/environmentextension.cpp
@@ -154,7 +154,7 @@ QScriptValue EnvironmentExtension::js_currentEnv(QScriptContext *context, QScrip
if (!procenv)
procenv = &env;
QScriptValue envObject = engine->newObject();
- foreach (const QString &key, procenv->keys())
+ for (const QString &key : procenv->keys())
envObject.setProperty(key, QScriptValue(procenv->value(key)));
return envObject;
}
diff --git a/src/lib/corelib/jsextensions/jsextensions.cpp b/src/lib/corelib/jsextensions/jsextensions.cpp
index 590a169eb..1049d2d6b 100644
--- a/src/lib/corelib/jsextensions/jsextensions.cpp
+++ b/src/lib/corelib/jsextensions/jsextensions.cpp
@@ -55,7 +55,7 @@ InitializerMap &initializers()
void JsExtensions::setupExtensions(const QStringList &names, QScriptValue scope)
{
- foreach (const QString &name, names)
+ for (const QString &name : names)
initializers().value(name)(scope);
}
diff --git a/src/lib/corelib/language/astimportshandler.cpp b/src/lib/corelib/language/astimportshandler.cpp
index 90a12f06a..783b67dfe 100644
--- a/src/lib/corelib/language/astimportshandler.cpp
+++ b/src/lib/corelib/language/astimportshandler.cpp
@@ -68,7 +68,7 @@ ASTImportsHandler::ASTImportsHandler(ItemReaderVisitorState &visitorState, Logge
void ASTImportsHandler::handleImports(const QbsQmlJS::AST::UiImportList *uiImportList)
{
- foreach (const QString &searchPath, m_file->searchPaths())
+ for (const QString &searchPath : m_file->searchPaths())
collectPrototypes(searchPath + QLatin1String("/imports"), QString());
// files in the same directory are available as prototypes
@@ -181,7 +181,7 @@ void ASTImportsHandler::handleImport(const QbsQmlJS::AST::UiImport *import)
? QLatin1String("qbs/base") : importUri.join(QDir::separator());
bool found = m_typeNameToFile.contains(importUri);
if (!found) {
- foreach (const QString &searchPath, m_file->searchPaths()) {
+ for (const QString &searchPath : m_file->searchPaths()) {
const QFileInfo fi(FileInfo::resolvePath(
FileInfo::resolvePath(searchPath,
QLatin1String("imports")),
@@ -256,7 +256,7 @@ void ASTImportsHandler::collectPrototypes(const QString &path, const QString &as
{
QStringList fileNames; // Yes, file *names*.
if (m_visitorState.findDirectoryEntries(path, &fileNames)) {
- foreach (const QString &fileName, fileNames)
+ for (const QString &fileName : qAsConst(fileNames))
addPrototype(fileName, path + QLatin1Char('/') + fileName, as, false);
return;
}
diff --git a/src/lib/corelib/language/filetags.cpp b/src/lib/corelib/language/filetags.cpp
index 9a021bc2a..e15be6f6f 100644
--- a/src/lib/corelib/language/filetags.cpp
+++ b/src/lib/corelib/language/filetags.cpp
@@ -63,7 +63,7 @@ void FileTag::load(PersistentPool &pool)
FileTags FileTags::fromStringList(const QStringList &strings)
{
FileTags result;
- foreach (const QString &str, strings)
+ for (const QString &str : strings)
result += FileTag(str.toUtf8());
return result;
}
@@ -72,7 +72,7 @@ LogWriter operator <<(LogWriter w, const FileTags &tags)
{
bool firstLoop = true;
w.write('(');
- foreach (const FileTag &tag, tags) {
+ for (const FileTag &tag : tags) {
if (firstLoop)
firstLoop = false;
else
diff --git a/src/lib/corelib/language/identifiersearch.cpp b/src/lib/corelib/language/identifiersearch.cpp
index 0edc885ca..32412e2d1 100644
--- a/src/lib/corelib/language/identifiersearch.cpp
+++ b/src/lib/corelib/language/identifiersearch.cpp
@@ -49,8 +49,8 @@ IdentifierSearch::IdentifierSearch()
void IdentifierSearch::start(QbsQmlJS::AST::Node *node)
{
- foreach (bool *found, m_requests)
- *found = false;
+ for (auto it = m_requests.cbegin(); it != m_requests.cend(); ++it)
+ *it.value() = false;
m_numberOfFoundIds = 0;
node->accept(this);
}
diff --git a/src/lib/corelib/language/item.cpp b/src/lib/corelib/language/item.cpp
index 0303f184a..f4a170619 100644
--- a/src/lib/corelib/language/item.cpp
+++ b/src/lib/corelib/language/item.cpp
@@ -50,6 +50,7 @@
#include <logging/translator.h>
#include <tools/error.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <algorithm>
@@ -86,7 +87,7 @@ Item *Item::clone() const
dup->m_modules = m_modules;
dup->m_children.reserve(m_children.count());
- foreach (const Item *child, m_children) {
+ for (const Item * const child : qAsConst(m_children)) {
Item *clonedChild = child->clone();
clonedChild->m_parent = dup;
dup->m_children.append(clonedChild);
@@ -209,7 +210,7 @@ bool Item::isPresentModule() const
void Item::setupForBuiltinType(Logger &logger)
{
const BuiltinDeclarations &builtins = BuiltinDeclarations::instance();
- foreach (const PropertyDeclaration &pd, builtins.declarationsForType(type()).properties()) {
+ for (const PropertyDeclaration &pd : builtins.declarationsForType(type()).properties()) {
m_propertyDeclarations.insert(pd.name(), pd);
const ValuePtr value = m_properties.value(pd.name());
if (!value) {
@@ -285,7 +286,7 @@ void Item::dump(int indentation) const
}
if (!m_children.isEmpty())
qDebug("%schildren:", indent.constData());
- foreach (const Item * const child, m_children)
+ for (const Item * const child : qAsConst(m_children))
child->dump(indentation + 4);
if (prototype()) {
qDebug("%sprototype:", indent.constData());
@@ -301,7 +302,7 @@ void Item::removeProperty(const QString &name)
Item *Item::child(ItemType type, bool checkForMultiple) const
{
Item *child = 0;
- foreach (Item * const currentChild, children()) {
+ for (Item * const currentChild : children()) {
if (currentChild->type() == type) {
if (!checkForMultiple)
return currentChild;
diff --git a/src/lib/corelib/language/itemreaderastvisitor.cpp b/src/lib/corelib/language/itemreaderastvisitor.cpp
index db5d649e7..fc6033095 100644
--- a/src/lib/corelib/language/itemreaderastvisitor.cpp
+++ b/src/lib/corelib/language/itemreaderastvisitor.cpp
@@ -352,7 +352,7 @@ void ItemReaderASTVisitor::checkDeprecationStatus(ItemType itemType, const QStri
void ItemReaderASTVisitor::doCheckItemTypes(const Item *item)
{
const ItemDeclaration decl = BuiltinDeclarations::instance().declarationsForType(item->type());
- foreach (const Item * const child, item->children()) {
+ for (const Item * const child : item->children()) {
if (!decl.isChildTypeAllowed(child->type())) {
throw ErrorInfo(Tr::tr("Items of type '%1' cannot contain items of type '%2'.")
.arg(item->typeName(), child->typeName()), child->location());
diff --git a/src/lib/corelib/language/itemreadervisitorstate.cpp b/src/lib/corelib/language/itemreadervisitorstate.cpp
index 826fd2071..96b694d5b 100644
--- a/src/lib/corelib/language/itemreadervisitorstate.cpp
+++ b/src/lib/corelib/language/itemreadervisitorstate.cpp
@@ -139,10 +139,10 @@ Item *ItemReaderVisitorState::readFile(const QString &filePath, const QStringLis
file.close();
if (!parser.parse()) {
- QList<QbsQmlJS::DiagnosticMessage> parserMessages = parser.diagnosticMessages();
+ const QList<QbsQmlJS::DiagnosticMessage> &parserMessages = parser.diagnosticMessages();
if (Q_UNLIKELY(!parserMessages.isEmpty())) {
ErrorInfo err;
- foreach (const QbsQmlJS::DiagnosticMessage &msg, parserMessages)
+ for (const QbsQmlJS::DiagnosticMessage &msg : parserMessages)
err.append(msg.message, toCodeLocation(filePath, msg.loc));
throw err;
}
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp
index ccef4942c..b97733450 100644
--- a/src/lib/corelib/language/language.cpp
+++ b/src/lib/corelib/language/language.cpp
@@ -58,6 +58,7 @@
#include <tools/persistence.h>
#include <tools/scripttools.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qcryptographichash.h>
#include <QtCore/qdir.h>
@@ -91,7 +92,7 @@ FileTagger::FileTagger(const QStringList &patterns, const FileTags &fileTags)
void FileTagger::setPatterns(const QStringList &patterns)
{
m_patterns.clear();
- foreach (const QString &pattern, patterns) {
+ for (const QString &pattern : patterns) {
QBS_CHECK(!pattern.isEmpty());
m_patterns << QRegExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard);
}
@@ -110,7 +111,7 @@ void FileTagger::load(PersistentPool &pool)
void FileTagger::store(PersistentPool &pool) const
{
QStringList patterns;
- foreach (const QRegExp &regExp, m_patterns)
+ for (const QRegExp &regExp : qAsConst(m_patterns))
patterns << regExp.pattern();
pool.store(patterns);
pool.store(m_fileTags);
@@ -384,7 +385,7 @@ bool Rule::acceptsAsInput(Artifact *artifact) const
FileTags Rule::staticOutputFileTags() const
{
FileTags result;
- foreach (const RuleArtifactConstPtr &artifact, artifacts)
+ for (const RuleArtifactConstPtr &artifact : qAsConst(artifacts))
result.unite(artifact->fileTags);
return result;
}
@@ -451,7 +452,7 @@ void ResolvedProduct::accept(BuildGraphVisitor *visitor) const
{
if (!buildData)
return;
- foreach (BuildGraphNode * const node, buildData->roots)
+ for (BuildGraphNode * const node : qAsConst(buildData->roots))
node->accept(visitor);
}
@@ -462,7 +463,7 @@ void ResolvedProduct::accept(BuildGraphVisitor *visitor) const
QList<SourceArtifactPtr> ResolvedProduct::allFiles() const
{
QList<SourceArtifactPtr> lst;
- foreach (const GroupConstPtr &group, groups)
+ for (const GroupConstPtr &group : qAsConst(groups))
lst += group->allFiles();
return lst;
}
@@ -474,7 +475,7 @@ QList<SourceArtifactPtr> ResolvedProduct::allFiles() const
QList<SourceArtifactPtr> ResolvedProduct::allEnabledFiles() const
{
QList<SourceArtifactPtr> lst;
- foreach (const GroupConstPtr &group, groups) {
+ for (const GroupConstPtr &group : qAsConst(groups)) {
if (group->enabled)
lst += group->allFiles();
}
@@ -484,8 +485,8 @@ QList<SourceArtifactPtr> ResolvedProduct::allEnabledFiles() const
FileTags ResolvedProduct::fileTagsForFileName(const QString &fileName) const
{
FileTags result;
- foreach (FileTaggerConstPtr tagger, fileTaggers) {
- foreach (const QRegExp &pattern, tagger->patterns()) {
+ for (const FileTaggerConstPtr &tagger : qAsConst(fileTaggers)) {
+ for (const QRegExp &pattern : tagger->patterns()) {
if (FileInfo::globMatches(pattern, fileName)) {
result.unite(tagger->fileTags());
break;
@@ -548,7 +549,7 @@ QList<const ResolvedModule*> topSortModules(const QHash<const ResolvedModule*, Q
Set<QString> &seenModuleNames)
{
QList<const ResolvedModule*> result;
- foreach (const ResolvedModule *m, modules) {
+ for (const ResolvedModule * const m : modules) {
if (m->name.isNull())
continue;
result.append(topSortModules(moduleChildren, moduleChildren.value(m), seenModuleNames));
@@ -592,13 +593,13 @@ static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType e
const QProcessEnvironment &env)
{
QMap<QString, const ResolvedModule *> moduleMap;
- foreach (const ResolvedModuleConstPtr &module, modules)
+ for (const ResolvedModuleConstPtr &module : modules)
moduleMap.insert(module->name, module.data());
QHash<const ResolvedModule*, QList<const ResolvedModule*> > moduleParents;
QHash<const ResolvedModule*, QList<const ResolvedModule*> > moduleChildren;
- foreach (ResolvedModuleConstPtr module, modules) {
- foreach (const QString &moduleName, module->moduleDependencies) {
+ for (const ResolvedModuleConstPtr &module : modules) {
+ for (const QString &moduleName : qAsConst(module->moduleDependencies)) {
const ResolvedModule * const depmod = moduleMap.value(moduleName);
QBS_ASSERT(depmod, return env);
moduleParents[depmod].append(module.data());
@@ -607,7 +608,7 @@ static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType e
}
QList<const ResolvedModule *> rootModules;
- foreach (ResolvedModuleConstPtr module, modules) {
+ for (const ResolvedModuleConstPtr &module : modules) {
if (moduleParents.value(module.data()).isEmpty()) {
QBS_ASSERT(module, return env);
rootModules.append(module.data());
@@ -627,8 +628,9 @@ static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType e
TemporaryGlobalObjectSetter tgos(scope);
Set<QString> seenModuleNames;
- QList<const ResolvedModule *> topSortedModules = topSortModules(moduleChildren, rootModules, seenModuleNames);
- foreach (const ResolvedModule *module, topSortedModules) {
+ const QList<const ResolvedModule *> &topSortedModules
+ = topSortModules(moduleChildren, rootModules, seenModuleNames);
+ for (const ResolvedModule * const module : topSortedModules) {
if ((envType == BuildEnv && module->setupBuildEnvironmentScript->sourceCode.isEmpty()) ||
(envType == RunEnv && module->setupBuildEnvironmentScript->sourceCode.isEmpty()
&& module->setupRunEnvironmentScript->sourceCode.isEmpty()))
@@ -652,7 +654,7 @@ static QProcessEnvironment getProcessEnvironment(ScriptEngine *engine, EnvType e
QScriptValue scriptValue;
QVariantMap productModules = productConfiguration->value()
.value(QLatin1String("modules")).toMap();
- foreach (const ResolvedModule * const depmod, moduleChildren.value(module)) {
+ for (const ResolvedModule * const depmod : moduleChildren.value(module)) {
scriptValue = engine->newObject();
QVariantMap moduleCfg = productModules.value(depmod->name).toMap();
for (QVariantMap::const_iterator it = moduleCfg.constBegin(); it != moduleCfg.constEnd(); ++it)
@@ -744,7 +746,7 @@ ArtifactSet ResolvedProduct::targetArtifacts() const
{
QBS_CHECK(buildData);
ArtifactSet taSet;
- foreach (Artifact * const a, buildData->rootArtifacts()) {
+ for (Artifact * const a : buildData->rootArtifacts()) {
if (a->fileTags().intersects(fileTags))
taSet << a;
}
@@ -841,9 +843,9 @@ ResolvedProject::ResolvedProject() : enabled(true), m_topLevelProject(0)
void ResolvedProject::accept(BuildGraphVisitor *visitor) const
{
- foreach (const ResolvedProductPtr &product, products)
+ for (const ResolvedProductPtr &product : qAsConst(products))
product->accept(visitor);
- foreach (const ResolvedProjectPtr &subProject, subProjects)
+ for (const ResolvedProjectPtr &subProject : qAsConst(subProjects))
subProject->accept(visitor);
}
@@ -864,7 +866,7 @@ TopLevelProject *ResolvedProject::topLevelProject()
QList<ResolvedProjectPtr> ResolvedProject::allSubProjects() const
{
QList<ResolvedProjectPtr> projectList = subProjects;
- foreach (const ResolvedProjectConstPtr &subProject, subProjects)
+ for (const ResolvedProjectConstPtr &subProject : qAsConst(subProjects))
projectList << subProject->allSubProjects();
return projectList;
}
@@ -872,7 +874,7 @@ QList<ResolvedProjectPtr> ResolvedProject::allSubProjects() const
QList<ResolvedProductPtr> ResolvedProject::allProducts() const
{
QList<ResolvedProductPtr> productList = products;
- foreach (const ResolvedProjectConstPtr &subProject, subProjects)
+ for (const ResolvedProjectConstPtr &subProject : qAsConst(subProjects))
productList << subProject->allProducts();
return productList;
}
@@ -887,11 +889,11 @@ void ResolvedProject::load(PersistentPool &pool)
[](const ResolvedProductPtr &p) {
if (!p->buildData)
return;
- foreach (BuildGraphNode * const node, p->buildData->nodes) {
+ for (BuildGraphNode * const node : qAsConst(p->buildData->nodes)) {
node->product = p;
// restore parent links
- foreach (BuildGraphNode *child, node->children)
+ for (BuildGraphNode * const child : qAsConst(node->children))
child->parents.insert(node);
}
});
@@ -1054,7 +1056,7 @@ Set<QString> SourceWildCards::expandPatterns(const GroupConstPtr &group,
QString expandedPrefix = prefix;
if (expandedPrefix.startsWith(QLatin1String("~/")))
expandedPrefix.replace(0, 1, QDir::homePath());
- foreach (QString pattern, patterns) {
+ for (QString pattern : patterns) {
pattern.prepend(expandedPrefix);
pattern.replace(QLatin1Char('\\'), QLatin1Char('/'));
QStringList parts = pattern.split(QLatin1Char('/'), QString::SkipEmptyParts);
@@ -1136,7 +1138,7 @@ void SourceWildCards::expandPatterns(Set<QString> &result, const GroupConstPtr &
template<typename T> QMap<QString, T> listToMap(const QList<T> &list)
{
QMap<QString, T> map;
- foreach (const T &elem, list)
+ for (const T &elem : list)
map.insert(keyFromElem(elem), elem);
return map;
}
@@ -1147,7 +1149,7 @@ template<typename T> bool listsAreEqual(const QList<T> &l1, const QList<T> &l2)
return false;
const QMap<QString, T> map1 = listToMap(l1);
const QMap<QString, T> map2 = listToMap(l2);
- foreach (const QString &key, map1.keys()) {
+ for (const QString &key : map1.keys()) {
const T value2 = map2.value(key);
if (!value2)
return false;
@@ -1162,7 +1164,7 @@ QString keyFromElem(const RulePtr &r) {
QString key = r->toString() + r->prepareScript->sourceCode;
if (r->outputArtifactsScript)
key += r->outputArtifactsScript->sourceCode;
- foreach (const auto &a, r->artifacts) {
+ for (const auto &a : qAsConst(r->artifacts)) {
key += a->filePath;
}
return key;
diff --git a/src/lib/corelib/language/loader.cpp b/src/lib/corelib/language/loader.cpp
index 1164ce007..f98d82fec 100644
--- a/src/lib/corelib/language/loader.cpp
+++ b/src/lib/corelib/language/loader.cpp
@@ -74,7 +74,7 @@ void Loader::setProgressObserver(ProgressObserver *observer)
void Loader::setSearchPaths(const QStringList &_searchPaths)
{
QStringList searchPaths;
- foreach (const QString &searchPath, _searchPaths) {
+ for (const QString &searchPath : _searchPaths) {
if (!FileInfo::exists(searchPath)) {
m_logger.qbsWarning() << Tr::tr("Search path '%1' does not exist.")
.arg(QDir::toNativeSeparators(searchPath));
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index d040b396b..07103df69 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -61,6 +61,7 @@
#include <tools/profiling.h>
#include <tools/progressobserver.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <tools/scripttools.h>
#include <tools/settings.h>
@@ -130,9 +131,9 @@ public:
}
}
Set<ProductContext *> allDependencies;
- foreach (auto productContext, allProducts) {
+ for (auto productContext : qAsConst(allProducts)) {
auto &productDependencies = m_dependencyMap[productContext];
- foreach (const auto &dep, productContext->info.usedProducts) {
+ for (const auto &dep : qAsConst(productContext->info.usedProducts)) {
if (!dep.productTypes.isEmpty())
continue;
QBS_CHECK(!dep.name.isEmpty());
@@ -142,12 +143,12 @@ public:
allDependencies << depProduct;
}
}
- Set<ProductContext *> rootProducts
+ const Set<ProductContext *> rootProducts
= Set<ProductContext *>::fromList(allProducts) - allDependencies;
- foreach (ProductContext * const rootProduct, rootProducts)
+ for (ProductContext * const rootProduct : rootProducts)
traverse(rootProduct);
if (m_sortedProducts.count() < allProducts.count()) {
- foreach (auto * const product, allProducts) {
+ for (auto * const product : qAsConst(allProducts)) {
QList<ModuleLoader::ProductContext *> path;
findCycle(product, path);
}
@@ -166,7 +167,7 @@ private:
{
if (!m_seenProducts.insert(product).second)
return;
- foreach (auto dependency, m_dependencyMap.value(product))
+ for (const auto &dependency : m_dependencyMap.value(product))
traverse(dependency);
m_sortedProducts << product;
}
@@ -176,13 +177,13 @@ private:
{
if (path.contains(product)) {
ErrorInfo error(Tr::tr("Cyclic dependencies detected."));
- foreach (const auto * const p, path)
+ for (const auto * const p : path)
error.append(p->name, p->item->location());
error.append(product->name, product->item->location());
throw error;
}
path << product;
- foreach (auto * const dep, m_dependencyMap.value(product))
+ for (auto * const dep : m_dependencyMap.value(product))
findCycle(dep, path);
path.removeLast();
}
@@ -236,12 +237,12 @@ void ModuleLoader::setSearchPaths(const QStringList &searchPaths)
m_moduleDirListCache.clear();
m_moduleSearchPaths.clear();
- foreach (const QString &path, searchPaths)
+ for (const QString &path : searchPaths)
addExtraModuleSearchPath(m_moduleSearchPaths, path);
if (m_logger.traceEnabled()) {
m_logger.qbsTrace() << "[MODLDR] module search paths:";
- foreach (const QString &path, m_moduleSearchPaths)
+ for (const QString &path : qAsConst(m_moduleSearchPaths))
m_logger.qbsTrace() << " " << path;
}
}
@@ -249,7 +250,7 @@ void ModuleLoader::setSearchPaths(const QStringList &searchPaths)
void ModuleLoader::setOldProjectProbes(const QList<ProbeConstPtr> &oldProbes)
{
m_oldProjectProbes.clear();
- foreach (const ProbeConstPtr& probe, oldProbes)
+ for (const ProbeConstPtr& probe : oldProbes)
m_oldProjectProbes[probe->globalId()] << probe;
}
@@ -425,7 +426,7 @@ private:
it.value()->apply(this);
}
m_parentItem = oldParentItem;
- foreach (Item *child, item->children()) {
+ for (Item * const child : item->children()) {
if (child->type () != ItemType::Export)
handleItem(child);
}
@@ -448,7 +449,7 @@ void ModuleLoader::handleTopLevelProject(ModuleLoaderResult *loadResult, Item *p
tlp.buildDirectory = buildDirectory;
handleProject(loadResult, &tlp, projectItem, referencedFilePaths);
- foreach (ProjectContext *projectContext, tlp.projects) {
+ for (ProjectContext * const projectContext : qAsConst(tlp.projects)) {
m_reader->setExtraSearchPathsStack(projectContext->searchPathsStack);
for (auto it = projectContext->products.begin(); it != projectContext->products.end();
++it) {
@@ -464,7 +465,7 @@ void ModuleLoader::handleTopLevelProject(ModuleLoaderResult *loadResult, Item *p
ProductSortByDependencies productSorter(tlp);
productSorter.apply();
- foreach (ProductContext * const p, productSorter.sortedProducts()) {
+ for (ProductContext * const p : productSorter.sortedProducts()) {
try {
handleProduct(p);
} catch (const ErrorInfo &err) {
@@ -527,20 +528,20 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult,
m_qbsVersion.toString()));
}
- foreach (Item *child, projectItem->children()) {
+ QList<Item *> multiplexedProducts;
+ for (Item * const child : projectItem->children()) {
child->setScope(projectContext.scope);
- if (child->type() == ItemType::Product) {
- foreach (Item * const additionalProductItem,
- multiplexProductItem(&dummyProductContext, child)) {
- Item::addChild(projectItem, additionalProductItem);
- }
- }
+ if (child->type() == ItemType::Product)
+ multiplexedProducts << multiplexProductItem(&dummyProductContext, child);
}
+ for (Item * const additionalProductItem : multiplexedProducts)
+ Item::addChild(projectItem, additionalProductItem);
resolveProbes(&dummyProductContext, projectItem);
projectContext.topLevelProject->probes.append(dummyProductContext.info.probes);
- foreach (Item *child, projectItem->children()) {
+ const QList<Item *> originalChildren = projectItem->children();
+ for (Item * const child : originalChildren) {
switch (child->type()) {
case ItemType::Product:
prepareProduct(&projectContext, child);
@@ -561,7 +562,7 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult,
const CodeLocation referencingLocation
= projectItem->property(QLatin1String("references"))->location();
QList<Item *> additionalProjectChildren;
- foreach (const QString &filePath, refs) {
+ for (const QString &filePath : refs) {
try {
additionalProjectChildren << loadReferencedFile(filePath, referencingLocation,
referencedFilePaths, dummyProductContext);
@@ -571,7 +572,7 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult,
m_logger.printWarning(error);
}
}
- foreach (Item * const subItem, additionalProjectChildren) {
+ for (Item * const subItem : qAsConst(additionalProjectChildren)) {
Item::addChild(projectContext.item, subItem);
switch (subItem->type()) {
case ItemType::Product:
@@ -617,7 +618,7 @@ QList<Item *> ModuleLoader::multiplexProductItem(ProductContext *dummyContext, I
throw ErrorInfo(Tr::tr("The 'profiles' property cannot be an empty list."),
profilesValue->location());
}
- foreach (const QString &profileName, profileNames) {
+ for (const QString &profileName : profileNames) {
if (profileNames.count(profileName) > 1) {
throw ErrorInfo(Tr::tr("The profile '%1' appears in the 'profiles' list twice, "
"which is not allowed.").arg(profileName), profilesValue->location());
@@ -703,7 +704,7 @@ void ModuleLoader::setupProductDependencies(ProductContext *productContext)
Settings settings(m_parameters.settingsDirectory());
const QStringList prefsSearchPaths
= Preferences(&settings, productContext->profileName).searchPaths();
- foreach (const QString &p, prefsSearchPaths) {
+ for (const QString &p : prefsSearchPaths) {
if (!m_moduleSearchPaths.contains(p) && FileInfo(p).exists())
extraSearchPaths << p;
}
@@ -722,7 +723,7 @@ static void createSortedModuleList(const Item::Module &parentModule, QVector<Ite
{
if (modules.contains(parentModule))
return;
- foreach (const Item::Module &dep, parentModule.item->modules())
+ for (const Item::Module &dep : parentModule.item->modules())
createSortedModuleList(dep, modules);
modules << parentModule;
return;
@@ -765,7 +766,7 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext)
Item * const item = productContext->item;
Item::Modules mergedModules;
- foreach (const Item::Module &module, item->modules()) {
+ for (const Item::Module &module : Item::Modules(item->modules())) {
Item::Module mergedModule = module;
ModuleMerger(m_logger, item, mergedModule).start();
mergedModules << mergedModule;
@@ -774,11 +775,11 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext)
// Must happen after all modules have been merged, so needs to be a second loop.
QVector<Item::Module> sortedModules;
- foreach (const Item::Module &module, item->modules())
+ for (const Item::Module &module : item->modules())
createSortedModuleList(module, sortedModules);
QBS_CHECK(sortedModules.count() == item->modules().count());
- foreach (const Item::Module &module, sortedModules) {
+ for (const Item::Module &module : qAsConst(sortedModules)) {
if (!module.item->isPresentModule())
continue;
try {
@@ -819,7 +820,7 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext)
// Module validation must happen in an extra pass, after all Probes have been resolved.
EvalCacheEnabler cacheEnabler(m_evaluator);
- foreach (const Item::Module &module, sortedModules) {
+ for (const Item::Module &module : qAsConst(sortedModules)) {
if (!module.item->isPresentModule())
continue;
try {
@@ -840,7 +841,7 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext)
copyGroupsFromModulesToProduct(*productContext);
ModuleDependencies reverseModuleDeps;
- foreach (Item *child, item->children()) {
+ for (Item * const child : item->children()) {
if (child->type() == ItemType::Group) {
if (reverseModuleDeps.isEmpty())
reverseModuleDeps = setupReverseModuleDependencies(item);
@@ -971,7 +972,7 @@ void ModuleLoader::handleGroup(Item *groupItem, const ModuleDependencies &revers
checkCancelation();
propagateModulesFromParent(groupItem, reverseDepencencies);
checkItemCondition(groupItem);
- foreach (Item * const child, groupItem->children()) {
+ for (Item * const child : groupItem->children()) {
if (child->type() == ItemType::Group)
handleGroup(child, reverseDepencencies);
}
@@ -1079,7 +1080,7 @@ ProbeConstPtr ModuleLoader::findOldProjectProbe(
if (m_parameters.forceProbeExecution())
return ProbeConstPtr();
- foreach (const ProbeConstPtr &oldProbe, m_oldProjectProbes.value(globalId)) {
+ for (const ProbeConstPtr &oldProbe : m_oldProjectProbes.value(globalId)) {
if (probeEqualTo(oldProbe, condition, initialProperties, sourceCode, CompareScript::Yes))
return oldProbe;
}
@@ -1096,7 +1097,7 @@ ProbeConstPtr ModuleLoader::findOldProductProbe(
if (m_parameters.forceProbeExecution())
return ProbeConstPtr();
- foreach (const ProbeConstPtr &oldProbe, m_oldProductProbes.value(productName)) {
+ for (const ProbeConstPtr &oldProbe : m_oldProductProbes.value(productName)) {
if (probeEqualTo(oldProbe, condition, initialProperties, sourceCode, CompareScript::Yes))
return oldProbe;
}
@@ -1109,8 +1110,8 @@ ProbeConstPtr ModuleLoader::findCurrentProbe(
bool condition,
const QVariantMap &initialProperties) const
{
- const QList<ProbeConstPtr> cachedProbes = m_currentProbes.value(location);
- foreach (const ProbeConstPtr &probe, cachedProbes) {
+ const QList<ProbeConstPtr> &cachedProbes = m_currentProbes.value(location);
+ for (const ProbeConstPtr &probe : cachedProbes) {
if (probeEqualTo(probe, condition, initialProperties, QString(), CompareScript::No))
return probe;
}
@@ -1151,7 +1152,7 @@ void ModuleLoader::mergeExportItems(const ProductContext &productContext)
Item *merged = Item::create(productContext.item->pool(), ItemType::Export);
Set<FileContextConstPtr> filesWithExportItem;
- foreach (Item *exportItem, exportItems) {
+ for (Item * const exportItem : qAsConst(exportItems)) {
checkCancelation();
if (Q_UNLIKELY(filesWithExportItem.contains(exportItem->file())))
throw ErrorInfo(Tr::tr("Multiple Export items in one product are prohibited."),
@@ -1159,7 +1160,7 @@ void ModuleLoader::mergeExportItems(const ProductContext &productContext)
if (!checkExportItemCondition(exportItem, productContext))
continue;
filesWithExportItem += exportItem->file();
- foreach (Item *child, exportItem->children())
+ for (Item * const child : exportItem->children())
Item::addChild(merged, child);
const Item::PropertyDeclarationMap &decls = exportItem->propertyDeclarations();
for (auto it = decls.constBegin(); it != decls.constEnd(); ++it) {
@@ -1441,7 +1442,7 @@ void ModuleLoader::adjustDefiningItemsInGroupModuleInstances(const Item::Module
replacement = Item::create(v->definingItem()->pool(),
v->definingItem()->type());
replacement->setProperties(v->definingItem()->properties());
- foreach (const auto &decl, v->definingItem()->propertyDeclarations())
+ for (const auto &decl : v->definingItem()->propertyDeclarations())
replacement->setPropertyDeclaration(decl.name(), decl);
replacement->setPrototype(v->definingItem()->prototype());
replacement->setScope(Item::create(v->definingItem()->pool(),
@@ -1470,12 +1471,12 @@ void ModuleLoader::resolveDependencies(DependsContext *dependsContext, Item *ite
// Resolve all Depends items.
ItemModuleList loadedModules;
ProductDependencyResults productDependencies;
- foreach (Item *child, item->children())
+ for (Item * const child : item->children())
if (child->type() == ItemType::Depends)
resolveDependsItem(dependsContext, item, child, &loadedModules, &productDependencies);
item->addModule(baseModule);
- foreach (const Item::Module &module, loadedModules)
+ for (const Item::Module &module : qAsConst(loadedModules))
item->addModule(module);
dependsContext->productDependencies->append(productDependencies);
@@ -1513,8 +1514,9 @@ void ModuleLoader::resolveDependsItem(DependsContext *dependsContext, Item *pare
const QString name
= m_evaluator->stringValue(dependsItem, QLatin1String("name"), QString(), &nameIsSet);
bool submodulesPropertySet;
- QStringList submodules = m_evaluator->stringListValue(dependsItem, QLatin1String("submodules"),
- &submodulesPropertySet);
+ const QStringList submodules = m_evaluator->stringListValue(dependsItem,
+ QLatin1String("submodules"),
+ &submodulesPropertySet);
if (productTypesIsSet) {
if (nameIsSet) {
throw ErrorInfo(Tr::tr("The 'productTypes' and 'name' properties are mutually "
@@ -1556,12 +1558,12 @@ void ModuleLoader::resolveDependsItem(DependsContext *dependsContext, Item *pare
moduleNames << nameParts;
} else {
- foreach (const QString &submodule, submodules)
+ for (const QString &submodule : submodules)
moduleNames << nameParts + QualifiedId::fromString(submodule);
}
Item::Module result;
- foreach (const QualifiedId &moduleName, moduleNames) {
+ for (const QualifiedId &moduleName : qAsConst(moduleNames)) {
bool isRequired = m_evaluator->boolValue(dependsItem, QLatin1String("required"));
for (int i = m_requiredChain.count() - 1; i >= 0 && isRequired; --i) {
if (!m_requiredChain.at(i))
@@ -1619,7 +1621,7 @@ void ModuleLoader::resolveDependsItem(DependsContext *dependsContext, Item *pare
productResults->append(dependency);
continue;
}
- foreach (const QString &profile, profiles) {
+ for (const QString &profile : profiles) {
ModuleLoaderResult::ProductInfo::Dependency dependency;
dependency.name = moduleName.toString();
dependency.profile = profile;
@@ -1736,7 +1738,7 @@ Item *ModuleLoader::loadModule(ProductContext *productContext, Item *item,
return moduleInstance; // already handled
if (Q_UNLIKELY(moduleInstance->type() == ItemType::ModulePrefix)) {
- foreach (const Item::Module &m, item->modules()) {
+ for (const Item::Module &m : item->modules()) {
if (m.name.first() == moduleName.first())
throwModuleNamePrefixError(moduleName, m.name, dependsItemLocation);
}
@@ -1748,7 +1750,7 @@ Item *ModuleLoader::loadModule(ProductContext *productContext, Item *item,
if (!modulePrototype) {
*isProductDependency = false;
QStringList moduleSearchPaths;
- foreach (const QString &searchPath, m_reader->searchPaths())
+ for (const QString &searchPath : m_reader->searchPaths())
addExtraModuleSearchPath(moduleSearchPaths, searchPath);
bool cacheHit = false;
modulePrototype = searchAndLoadModuleFile(productContext, dependsItemLocation,
@@ -1773,7 +1775,7 @@ Item *ModuleLoader::searchAndLoadModuleFile(ProductContext *productContext,
bool triedToLoadModule = false;
const QString fullName = moduleName.toString();
- foreach (const QString &path, searchPaths) {
+ for (const QString &path : qAsConst(searchPaths)) {
const QString dirPath = findExistingModulePath(path, moduleName);
if (dirPath.isEmpty())
continue;
@@ -1785,7 +1787,7 @@ Item *ModuleLoader::searchAndLoadModuleFile(ProductContext *productContext,
m_moduleDirListCache.insert(dirPath, moduleFileNames);
}
- foreach (const QString &filePath, moduleFileNames) {
+ for (const QString &filePath : qAsConst(moduleFileNames)) {
triedToLoadModule = true;
Item *module = loadModuleFile(productContext, fullName,
moduleName.count() == 1
@@ -1915,7 +1917,7 @@ Item *ModuleLoader::loadModuleFile(ProductContext *productContext, const QString
return 0;
}
- foreach (const ErrorInfo &error, unknownProfilePropertyErrors)
+ for (const ErrorInfo &error : qAsConst(unknownProfilePropertyErrors))
handlePropertyError(error, m_parameters, m_logger);
module->setProperty(QLatin1String("name"), VariantValue::create(fullModuleName));
@@ -2080,7 +2082,7 @@ static void collectItemsWithId_impl(Item *item, QList<Item *> *result)
{
if (!item->id().isEmpty())
result->append(item);
- foreach (Item *child, item->children())
+ for (Item * const child : item->children())
collectItemsWithId_impl(child, result);
}
@@ -2152,7 +2154,7 @@ void ModuleLoader::instantiateModule(ProductContext *productContext, Item *expor
// create ids from from the prototype in the instance
if (modulePrototype->file()->idScope()) {
- foreach (Item *itemWithId, collectItemsWithId(modulePrototype)) {
+ for (Item * const itemWithId : collectItemsWithId(modulePrototype)) {
Item *idProto = itemWithId;
Item *idInstance = prototypeInstanceMap.value(idProto);
QBS_ASSERT(idInstance, continue);
@@ -2162,7 +2164,7 @@ void ModuleLoader::instantiateModule(ProductContext *productContext, Item *expor
}
// create module instances for the dependencies of this module
- foreach (Item::Module m, modulePrototype->modules()) {
+ for (Item::Module m : modulePrototype->modules()) {
Item *depinst = moduleInstanceItem(moduleInstance, m.name);
const bool safetyCheck = true;
if (safetyCheck) {
@@ -2203,7 +2205,7 @@ void ModuleLoader::createChildInstances(ProductContext *productContext, Item *in
Item *prototype,
QHash<Item *, Item *> *prototypeInstanceMap) const
{
- foreach (Item *childPrototype, prototype->children()) {
+ for (Item * const childPrototype : prototype->children()) {
Item *childInstance = Item::create(m_pool, childPrototype->type());
prototypeInstanceMap->insert(childPrototype, childInstance);
childInstance->setPrototype(childPrototype);
@@ -2219,7 +2221,7 @@ void ModuleLoader::resolveProbes(ProductContext *productContext, Item *item)
{
AccumulatingTimer probesTimer(m_parameters.logElapsedTime() ? &m_elapsedTimeProbes : nullptr);
EvalContextSwitcher evalContextSwitcher(m_evaluator->engine(), EvalContext::ProbeExecution);
- foreach (Item *child, item->children())
+ for (Item * const child : item->children())
if (child->type() == ItemType::Probe)
resolveProbe(productContext, item, child);
}
@@ -2237,7 +2239,9 @@ void ModuleLoader::resolveProbe(ProductContext *productContext, Item *parent, It
QList<ProbeProperty> probeBindings;
QVariantMap initialProperties;
for (Item *obj = probe; obj; obj = obj->prototype()) {
- foreach (const QString &name, obj->properties().keys()) {
+ const Item::PropertyMap &props = obj->properties();
+ for (auto it = props.cbegin(); it != props.cend(); ++it) {
+ const QString &name = it.key();
if (name == QLatin1String("configure"))
continue;
const QScriptValue value = m_evaluator->value(probe, name);
@@ -2252,7 +2256,7 @@ void ModuleLoader::resolveProbe(ProductContext *productContext, Item *parent, It
engine->currentContext()->pushScope(m_evaluator->fileScope(configureScript->file()));
engine->currentContext()->pushScope(m_evaluator->importScope(configureScript->file()));
engine->currentContext()->pushScope(scope);
- foreach (const ProbeProperty &b, probeBindings)
+ for (const ProbeProperty &b : qAsConst(probeBindings))
scope.setProperty(b.first, b.second);
const bool condition = m_evaluator->boolValue(probe, QLatin1String("condition"));
const QString &sourceCode = configureScript->sourceCode().toString();
@@ -2276,7 +2280,7 @@ void ModuleLoader::resolveProbe(ProductContext *productContext, Item *parent, It
evalError = ErrorInfo(engine->lastErrorString(sv), configureScript->location());
}
QVariantMap properties;
- foreach (const ProbeProperty &b, probeBindings) {
+ for (const ProbeProperty &b : qAsConst(probeBindings)) {
const QVariant newValue = resolvedProbe
? resolvedProbe->properties().value(b.first) : scope.property(b.first).toVariant();
if (newValue != b.second.toVariant())
@@ -2325,7 +2329,7 @@ QStringList ModuleLoader::readExtraSearchPaths(Item *item, bool *wasSet)
// (e.g command line).
const QString basePath = FileInfo::path(prop ? prop->file()->filePath()
: m_parameters.projectFilePath());
- foreach (const QString &path, paths)
+ for (const QString &path : paths)
result += FileInfo::resolvePath(basePath, path);
return result;
}
@@ -2337,7 +2341,7 @@ void ModuleLoader::copyProperties(const Item *sourceProject, Item *targetProject
const QList<PropertyDeclaration> &builtinProjectProperties = BuiltinDeclarations::instance()
.declarationsForType(ItemType::Project).properties();
Set<QString> builtinProjectPropertyNames;
- foreach (const PropertyDeclaration &p, builtinProjectProperties)
+ for (const PropertyDeclaration &p : builtinProjectProperties)
builtinProjectPropertyNames << p.name();
for (Item::PropertyDeclarationMap::ConstIterator it
@@ -2385,7 +2389,7 @@ QString ModuleLoader::findExistingModulePath(const QString &searchPath,
const QualifiedId &moduleName)
{
QString dirPath = searchPath;
- foreach (const QString &moduleNamePart, moduleName) {
+ for (const QString &moduleNamePart : moduleName) {
dirPath = FileInfo::resolvePath(dirPath, moduleNamePart);
if (!FileInfo::exists(dirPath) || !FileInfo::isFileCaseCorrect(dirPath))
return QString();
@@ -2395,7 +2399,7 @@ QString ModuleLoader::findExistingModulePath(const QString &searchPath,
void ModuleLoader::setScopeForDescendants(Item *item, Item *scope)
{
- foreach (Item *child, item->children()) {
+ for (Item * const child : item->children()) {
child->setScope(scope);
setScopeForDescendants(child, scope);
}
@@ -2424,7 +2428,7 @@ void ModuleLoader::overrideItemProperties(Item *item, const QString &buildConfig
static void collectAllModules(Item *item, QVector<Item::Module> *modules)
{
- foreach (const Item::Module &m, item->modules()) {
+ for (const Item::Module &m : item->modules()) {
auto it = std::find_if(modules->begin(), modules->end(),
[m] (const Item::Module &m2) { return m.name == m2.name; });
if (it != modules->end()) {
@@ -2452,7 +2456,7 @@ void ModuleLoader::addTransitiveDependencies(ProductContext *ctx)
m_logger.qbsTrace() << "[MODLDR] addTransitiveDependencies";
QVector<Item::Module> transitiveDeps = allModules(ctx->item);
std::sort(transitiveDeps.begin(), transitiveDeps.end());
- foreach (const Item::Module &m, ctx->item->modules()) {
+ for (const Item::Module &m : ctx->item->modules()) {
if (m.isProduct) {
ctx->info.usedProducts.append(
ctx->project->topLevelProject->productModules.value(
@@ -2463,7 +2467,7 @@ void ModuleLoader::addTransitiveDependencies(ProductContext *ctx)
QBS_CHECK(it != transitiveDeps.end() && it->name == m.name);
transitiveDeps.erase(it);
}
- foreach (const Item::Module &module, transitiveDeps) {
+ for (const Item::Module &module : qAsConst(transitiveDeps)) {
if (module.isProduct) {
ctx->item->addModule(module);
ctx->info.usedProducts.append(
@@ -2528,7 +2532,7 @@ void ModuleLoader::copyGroupsFromModuleToProduct(const ProductContext &productCo
void ModuleLoader::copyGroupsFromModulesToProduct(const ProductContext &productContext)
{
- foreach (const Item::Module &module, productContext.item->modules()) {
+ for (const Item::Module &module : productContext.item->modules()) {
Item *prototype = module.item;
bool modulePassedValidation;
while ((modulePassedValidation = prototype->isPresentModule()) && prototype->prototype())
diff --git a/src/lib/corelib/language/modulemerger.cpp b/src/lib/corelib/language/modulemerger.cpp
index 32af9d466..c44f9e5bc 100644
--- a/src/lib/corelib/language/modulemerger.cpp
+++ b/src/lib/corelib/language/modulemerger.cpp
@@ -43,6 +43,7 @@
#include <logging/translator.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -87,8 +88,8 @@ void ModuleMerger::replaceItemInScopes(Item *toReplace)
// as their "instance scope", which is the scope of their scope. This function takes
// care that the "wrong" definingItem of values in sub-modules still has the "right"
// instance scope, namely our merged module instead of some other instance.
- foreach (const Item::Module &module, toReplace->modules()) {
- foreach (const ValuePtr &property, module.item->properties()) {
+ for (const Item::Module &module : toReplace->modules()) {
+ for (const ValuePtr &property : module.item->properties()) {
ValuePtr v = property;
do {
if (v->definingItem() && v->definingItem()->scope()
@@ -121,9 +122,9 @@ void ModuleMerger::start()
}
m_mergedModule.item->setProperties(mergedProps);
- foreach (Item *moduleInstanceContainer, m_moduleInstanceContainers) {
+ for (Item *moduleInstanceContainer : qAsConst(m_moduleInstanceContainers)) {
Item::Modules modules;
- foreach (const Item::Module &dep, moduleInstanceContainer->modules()) {
+ for (const Item::Module &dep : moduleInstanceContainer->modules()) {
const bool isTheModule = dep.name == m_mergedModule.name;
Item::Module m = dep;
if (isTheModule && m.item != m_mergedModule.item) {
@@ -145,7 +146,7 @@ Item::PropertyMap ModuleMerger::dfs(const Item::Module &m, Item::PropertyMap pro
{
Item *moduleInstance = 0;
int numberOfOutprops = m.item->modules().count();
- foreach (const Item::Module &dep, m.item->modules()) {
+ for (const Item::Module &dep : m.item->modules()) {
if (dep.name == m_mergedModule.name) {
--numberOfOutprops;
moduleInstance = dep.item;
@@ -160,7 +161,7 @@ Item::PropertyMap ModuleMerger::dfs(const Item::Module &m, Item::PropertyMap pro
QVector<Item::PropertyMap> outprops;
outprops.reserve(numberOfOutprops);
- foreach (const Item::Module &dep, m.item->modules()) {
+ for (const Item::Module &dep : m.item->modules()) {
if (dep.item != moduleInstance)
outprops << dfs(dep, props);
}
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index b951cd00f..373c870bf 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -195,7 +195,7 @@ static void makeSubProjectNamesUniqe(const ResolvedProjectPtr &parentProject)
{
Set<QString> subProjectNames;
Set<ResolvedProjectPtr> projectsInNeedOfNameChange;
- foreach (const ResolvedProjectPtr &p, parentProject->subProjects) {
+ for (const ResolvedProjectPtr &p : qAsConst(parentProject->subProjects)) {
if (!subProjectNames.insert(p->name).second)
projectsInNeedOfNameChange << p;
makeSubProjectNamesUniqe(p);
@@ -239,7 +239,7 @@ TopLevelProjectPtr ProjectResolver::resolveTopLevelProject()
resolveProductDependencies(projectContext);
checkForDuplicateProductNames(project);
- foreach (const ResolvedProductPtr &product, project->allProducts()) {
+ for (const ResolvedProductPtr &product : project->allProducts()) {
if (!product->enabled)
continue;
@@ -247,7 +247,7 @@ TopLevelProjectPtr ProjectResolver::resolveTopLevelProject()
matchArtifactProperties(product, product->allEnabledFiles());
// Let a positive value of qbs.install imply the file tag "installable".
- foreach (const SourceArtifactPtr &artifact, product->allFiles()) {
+ for (const SourceArtifactPtr &artifact : product->allFiles()) {
if (artifact->properties->qbsPropertyValue(QLatin1String("install")).toBool())
artifact->fileTags += "installable";
}
@@ -297,10 +297,10 @@ void ProjectResolver::resolveProject(Item *item, ProjectContext *projectContext)
{ ItemType::PropertyOptions, &ProjectResolver::ignoreItem }
};
- foreach (Item *child, item->children())
+ for (Item * const child : item->children())
callItemFunction(mapping, child, projectContext);
- foreach (const ResolvedProductPtr &product, projectContext->project->products)
+ for (const ResolvedProductPtr &product : qAsConst(projectContext->project->products))
postProcess(product, projectContext);
}
@@ -410,13 +410,13 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext)
{ ItemType::PropertyOptions, &ProjectResolver::ignoreItem }
};
- foreach (Item *child, subItems)
+ for (Item * const child : qAsConst(subItems))
callItemFunction(mapping, child, projectContext);
resolveModules(item, projectContext);
product->fileTags += productContext.additionalFileTags;
- foreach (const FileTag &t, product->fileTags)
+ for (const FileTag &t : qAsConst(product->fileTags))
m_productsByType[t] << product;
m_productContext = 0;
@@ -429,7 +429,7 @@ void ProjectResolver::resolveModules(const Item *item, ProjectContext *projectCo
// Breadth first search needed here, because the product might set properties on the cpp module,
// whose children must be evaluated in that context then.
QQueue<Item::Module> modules;
- foreach (const Item::Module &m, item->modules())
+ for (const Item::Module &m : item->modules())
modules.enqueue(m);
Set<QualifiedId> seen;
while (!modules.isEmpty()) {
@@ -437,7 +437,7 @@ void ProjectResolver::resolveModules(const Item *item, ProjectContext *projectCo
if (!seen.insert(m.name).second)
continue;
resolveModule(m.name, m.item, m.isProduct, projectContext);
- foreach (const Item::Module &childModule, m.item->modules())
+ for (const Item::Module &childModule : m.item->modules())
modules.enqueue(childModule);
}
std::sort(m_productContext->product->modules.begin(), m_productContext->product->modules.end(),
@@ -468,7 +468,7 @@ void ProjectResolver::resolveModule(const QualifiedId &moduleName, Item *item, b
m_productContext->additionalFileTags +=
m_evaluator->fileTagsValue(item, QLatin1String("additionalProductTypes"));
- foreach (const Item::Module &m, item->modules()) {
+ for (const Item::Module &m : item->modules()) {
if (m_evaluator->boolValue(m.item, QLatin1String("present")))
module->moduleDependencies += m.name.toString();
}
@@ -485,7 +485,7 @@ void ProjectResolver::resolveModule(const QualifiedId &moduleName, Item *item, b
{ ItemType::Depends, &ProjectResolver::ignoreItem },
{ ItemType::Probe, &ProjectResolver::ignoreItem }
};
- foreach (Item *child, item->children())
+ for (Item *child : item->children())
callItemFunction(mapping, child, projectContext);
m_moduleContext = oldModuleContext;
@@ -689,15 +689,15 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
wildcards->prefix = group->prefix;
wildcards->patterns = patterns;
group->wildcards = wildcards;
- Set<QString> files = wildcards->expandPatterns(group,
+ const Set<QString> files = wildcards->expandPatterns(group,
FileInfo::path(item->file()->filePath()),
projectContext->project->topLevelProject()->buildDirectory);
- foreach (const QString &fileName, files)
+ for (const QString &fileName : files)
createSourceArtifact(m_productContext->product, fileName, group, true, filesLocation,
&m_productContext->sourceArtifactLocations, &fileError);
}
- foreach (const QString &fileName, files) {
+ for (const QString &fileName : files) {
createSourceArtifact(m_productContext->product, fileName, group, false, filesLocation,
&m_productContext->sourceArtifactLocations, &fileError);
}
@@ -727,7 +727,7 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
const GroupConstPtr m_oldGroup;
};
GroupContextSwitcher groupSwitcher(*m_productContext, group);
- foreach (Item * const childItem, item->children())
+ for (Item * const childItem : item->children())
resolveGroup(childItem, projectContext);
}
@@ -796,7 +796,7 @@ void ProjectResolver::resolveRule(Item *item, ProjectContext *projectContext)
// read artifacts
bool hasArtifactChildren = false;
- foreach (Item *child, item->children()) {
+ for (Item * const child : item->children()) {
if (Q_UNLIKELY(child->type() != ItemType::Artifact)) {
throw ErrorInfo(Tr::tr("'Rule' can only have children of type 'Artifact'."),
child->location());
@@ -917,7 +917,7 @@ void ProjectResolver::resolveFileTagger(Item *item, ProjectContext *projectConte
if (fileTags.isEmpty())
throw ErrorInfo(Tr::tr("FileTagger.fileTags must not be empty."), item->location());
- foreach (const QString &pattern, patterns) {
+ for (const QString &pattern : patterns) {
if (pattern.isEmpty())
throw ErrorInfo(Tr::tr("A FileTagger pattern must not be empty."), item->location());
}
@@ -950,9 +950,9 @@ QList<ResolvedProductPtr> ProjectResolver::getProductDependencies(const Resolved
const ModuleLoaderResult::ProductInfo::Dependency &dependency = dependencies.at(i);
QBS_CHECK(dependency.name.isEmpty() != dependency.productTypes.isEmpty());
if (!dependency.productTypes.isEmpty()) {
- foreach (const FileTag &tag, dependency.productTypes) {
+ for (const FileTag &tag : dependency.productTypes) {
const QList<ResolvedProductPtr> productsForTag = m_productsByType.value(tag);
- foreach (const ResolvedProductPtr &p, productsForTag) {
+ for (const ResolvedProductPtr &p : productsForTag) {
if (p == product || !p->enabled
|| (dependency.limitToSubProject && !product->isInParentProject(p))) {
continue;
@@ -966,7 +966,7 @@ QList<ResolvedProductPtr> ProjectResolver::getProductDependencies(const Resolved
}
dependencies.removeAt(i);
} else if (dependency.profile == QLatin1String("*")) {
- foreach (const ResolvedProductPtr &p, m_productsByName) {
+ for (const ResolvedProductPtr &p : qAsConst(m_productsByName)) {
if (p->name != dependency.name || p == product || !p->enabled
|| (dependency.limitToSubProject && !product->isInParentProject(p))) {
continue;
@@ -1006,9 +1006,9 @@ QList<ResolvedProductPtr> ProjectResolver::getProductDependencies(const Resolved
void ProjectResolver::matchArtifactProperties(const ResolvedProductPtr &product,
const QList<SourceArtifactPtr> &artifacts)
{
- foreach (const SourceArtifactPtr &artifact, artifacts) {
- foreach (const ArtifactPropertiesConstPtr &artifactProperties,
- product->artifactProperties) {
+ for (const SourceArtifactPtr &artifact : artifacts) {
+ for (const ArtifactPropertiesConstPtr &artifactProperties :
+ qAsConst(product->artifactProperties)) {
if (artifact->fileTags.intersects(artifactProperties->fileTagsFilter()))
artifact->properties = artifactProperties->propertyMap();
}
@@ -1040,7 +1040,7 @@ static bool hasDependencyCycle(Set<ResolvedProduct *> *checked,
return false;
checked->insert(product.data());
branch->insert(product.data());
- foreach (const ResolvedProductPtr &dep, product->dependencies) {
+ for (const ResolvedProductPtr &dep : qAsConst(product->dependencies)) {
if (hasDependencyCycle(checked, branch, dep, error)) {
error->prepend(dep->name, dep->location);
return true;
@@ -1056,7 +1056,7 @@ void gatherDependencies(ResolvedProduct *product, DependencyMap &dependencies)
if (dependencies.contains(product))
return;
Set<ResolvedProduct *> &productDeps = dependencies[product];
- foreach (const ResolvedProductPtr &dep, product->dependencies) {
+ for (const ResolvedProductPtr &dep : qAsConst(product->dependencies)) {
productDeps << dep.data();
gatherDependencies(dep.data(), dependencies);
productDeps += dependencies.value(dep.data());
@@ -1068,7 +1068,7 @@ void gatherDependencies(ResolvedProduct *product, DependencyMap &dependencies)
static DependencyMap allDependencies(const QList<ResolvedProductPtr> &products)
{
DependencyMap dependencies;
- foreach (const ResolvedProductPtr &product, products)
+ for (const ResolvedProductPtr &product : products)
gatherDependencies(product.data(), dependencies);
return dependencies;
}
@@ -1076,15 +1076,15 @@ static DependencyMap allDependencies(const QList<ResolvedProductPtr> &products)
void ProjectResolver::resolveProductDependencies(const ProjectContext &projectContext)
{
// Resolve all inter-product dependencies.
- QList<ResolvedProductPtr> allProducts = projectContext.project->allProducts();
+ const QList<ResolvedProductPtr> allProducts = projectContext.project->allProducts();
bool disabledDependency = false;
- foreach (const ResolvedProductPtr &rproduct, allProducts) {
+ for (const ResolvedProductPtr &rproduct : allProducts) {
if (!rproduct->enabled)
continue;
Item *productItem = m_productItemMap.value(rproduct);
const ModuleLoaderResult::ProductInfo &productInfo
= m_loadResult.productInfos.value(productItem);
- foreach (const ResolvedProductPtr &usedProduct,
+ for (const ResolvedProductPtr &usedProduct :
getProductDependencies(rproduct, productInfo, disabledDependency)) {
rproduct->dependencies.insert(usedProduct);
}
@@ -1092,7 +1092,7 @@ void ProjectResolver::resolveProductDependencies(const ProjectContext &projectCo
// Check for cyclic dependencies.
Set<ResolvedProduct *> checked;
- foreach (const ResolvedProductPtr &rproduct, allProducts) {
+ for (const ResolvedProductPtr &rproduct : allProducts) {
Set<ResolvedProduct *> branch;
ErrorInfo error;
if (hasDependencyCycle(&checked, &branch, rproduct, &error)) {
@@ -1107,13 +1107,13 @@ void ProjectResolver::resolveProductDependencies(const ProjectContext &projectCo
const DependencyMap allDeps = allDependencies(allProducts);
DependencyMap allDepsReversed;
for (auto it = allDeps.constBegin(); it != allDeps.constEnd(); ++it) {
- foreach (ResolvedProduct *dep, it.value())
+ for (ResolvedProduct *dep : qAsConst(it.value()))
allDepsReversed[dep] << it.key();
}
for (auto it = allDepsReversed.constBegin(); it != allDepsReversed.constEnd(); ++it) {
if (it.key()->enabled)
continue;
- foreach (ResolvedProduct * const dependingProduct, it.value()) {
+ for (ResolvedProduct * const dependingProduct : qAsConst(it.value())) {
if (dependingProduct->enabled) {
m_logger.qbsWarning() << Tr::tr("Disabling product '%1', because it depends on "
"disabled product '%2'.")
@@ -1129,13 +1129,13 @@ void ProjectResolver::postProcess(const ResolvedProductPtr &product,
ProjectContext *projectContext) const
{
product->fileTaggers += projectContext->fileTaggers;
- foreach (const RulePtr &rule, projectContext->rules)
+ for (const RulePtr &rule : qAsConst(projectContext->rules))
product->rules += rule;
}
void ProjectResolver::applyFileTaggers(const ResolvedProductPtr &product) const
{
- foreach (const SourceArtifactPtr &artifact, product->allEnabledFiles())
+ for (const SourceArtifactPtr &artifact : product->allEnabledFiles())
applyFileTaggers(artifact, product, m_logger);
}
@@ -1159,7 +1159,7 @@ QVariantMap ProjectResolver::evaluateModuleValues(Item *item, bool lookupPrototy
AccumulatingTimer modPropEvalTimer(m_setupParams.logElapsedTime()
? &m_elapsedTimeModPropEval : nullptr);
QVariantMap moduleValues;
- foreach (const Item::Module &module, item->modules()) {
+ for (const Item::Module &module : item->modules()) {
const QString fullName = module.name.toString();
moduleValues[fullName] = evaluateProperties(module.item, lookupPrototype);
}
@@ -1258,7 +1258,7 @@ QStringList ProjectResolver::convertPathListProperty(const QStringList &paths,
const QString &dirPath) const
{
QStringList result;
- foreach (const QString &path, paths)
+ for (const QString &path : paths)
result += convertPathProperty(path, dirPath);
return result;
}
diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp
index 1e34e2a87..5e6a380b3 100644
--- a/src/lib/corelib/language/scriptengine.cpp
+++ b/src/lib/corelib/language/scriptengine.cpp
@@ -147,7 +147,7 @@ void ScriptEngine::import(const JsImport &jsImport, QScriptValue &targetObject)
if (debugJSImports)
qDebug() << "[ENGINE] " << jsImport.filePaths << " (cache miss)";
jsImportValue = newObject();
- foreach (const QString &filePath, jsImport.filePaths)
+ for (const QString &filePath : jsImport.filePaths)
importFile(filePath, jsImportValue);
m_jsImportCache.insert(jsImport, jsImportValue);
}
@@ -304,7 +304,7 @@ void ScriptEngine::importFile(const QString &filePath, QScriptValue &targetObjec
static QString findExtensionDir(const QStringList &searchPaths, const QString &extensionPath)
{
- foreach (const QString &searchPath, searchPaths) {
+ for (const QString &searchPath : searchPaths) {
const QString dirPath = searchPath + QStringLiteral("/imports/") + extensionPath;
QFileInfo fi(dirPath);
if (fi.exists() && fi.isDir())
@@ -316,7 +316,7 @@ static QString findExtensionDir(const QStringList &searchPaths, const QString &e
static QScriptValue mergeExtensionObjects(const QScriptValueList &lst)
{
QScriptValue result;
- foreach (const QScriptValue &v, lst) {
+ for (const QScriptValue &v : lst) {
if (!result.isValid()) {
result = v;
continue;
@@ -485,8 +485,9 @@ void ScriptEngine::addFileLastModifiedResult(const QString &filePath, const File
Set<QString> ScriptEngine::imports() const
{
Set<QString> filePaths;
- foreach (const JsImport &jsImport, m_jsImportCache.keys()) {
- foreach (const QString &filePath, jsImport.filePaths)
+ for (auto it = m_jsImportCache.cbegin(); it != m_jsImportCache.cend(); ++it) {
+ const JsImport &jsImport = it.key();
+ for (const QString &filePath : jsImport.filePaths)
filePaths << filePath;
}
return filePaths;
diff --git a/src/lib/corelib/language/value.cpp b/src/lib/corelib/language/value.cpp
index 2dce8d027..ab8d2af21 100644
--- a/src/lib/corelib/language/value.cpp
+++ b/src/lib/corelib/language/value.cpp
@@ -43,6 +43,7 @@
#include "item.h"
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
namespace qbs {
namespace Internal {
@@ -140,7 +141,7 @@ void JSSourceValue::setHasFunctionForm(bool b)
void JSSourceValue::setDefiningItem(Item *item)
{
Value::setDefiningItem(item);
- foreach (const JSSourceValue::Alternative &a, m_alternatives)
+ for (const JSSourceValue::Alternative &a : qAsConst(m_alternatives))
a.value->setDefiningItem(item);
}
diff --git a/src/lib/corelib/logging/logger.cpp b/src/lib/corelib/logging/logger.cpp
index c1d9f619a..b417a4d85 100644
--- a/src/lib/corelib/logging/logger.cpp
+++ b/src/lib/corelib/logging/logger.cpp
@@ -147,7 +147,7 @@ LogWriter operator<<(LogWriter w, const QSet<QString> &strSet)
{
bool firstLoop = true;
w.write('(');
- foreach (const QString &str, strSet) {
+ for (const QString &str : strSet) {
if (firstLoop)
firstLoop = false;
else
@@ -163,7 +163,7 @@ LogWriter operator<<(LogWriter w, const QVariant &variant)
QString str = QLatin1String(variant.typeName()) + QLatin1Char('(');
if (variant.type() == QVariant::List) {
bool firstLoop = true;
- foreach (const QVariant &item, variant.toList()) {
+ for (const QVariant &item : variant.toList()) {
str += item.toString();
if (firstLoop)
firstLoop = false;
diff --git a/src/lib/corelib/tools/error.cpp b/src/lib/corelib/tools/error.cpp
index 2c8cf00b5..82e351611 100644
--- a/src/lib/corelib/tools/error.cpp
+++ b/src/lib/corelib/tools/error.cpp
@@ -40,6 +40,7 @@
#include "error.h"
#include "persistence.h"
+#include "qttools.h"
#include <QtCore/qregularexpression.h>
#include <QtCore/qshareddata.h>
@@ -240,7 +241,7 @@ void ErrorInfo::clear()
QString ErrorInfo::toString() const
{
QStringList lines;
- foreach (const ErrorItem &e, d->items) {
+ for (const ErrorItem &e : qAsConst(d->items)) {
if (e.isBacktraceItem()) {
QString line;
if (!e.description().isEmpty())
diff --git a/src/lib/corelib/tools/fileinfo.cpp b/src/lib/corelib/tools/fileinfo.cpp
index e8e82659f..61a0ab8ed 100644
--- a/src/lib/corelib/tools/fileinfo.cpp
+++ b/src/lib/corelib/tools/fileinfo.cpp
@@ -365,8 +365,8 @@ bool removeFileRecursion(const QFileInfo &f, QString *errorMessage)
const QDir dir(f.absoluteFilePath());
// QDir::System is needed for broken symlinks.
- foreach (const QFileInfo &fi, dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot
- | QDir::Hidden | QDir::System))
+ for (const QFileInfo &fi : dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot
+ | QDir::Hidden | QDir::System))
removeFileRecursion(fi, errorMessage);
QDir parent = f.absoluteDir();
if (!parent.rmdir(f.fileName())) {
@@ -492,9 +492,9 @@ bool copyFileRecursion(const QString &srcFilePath, const QString &tgtFilePath,
} else if (srcFileInfo.isDir()) {
if (copyDirectoryContents) {
QDir sourceDir(srcFilePath);
- QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot
- | QDir::Hidden | QDir::System);
- foreach (const QString &fileName, fileNames) {
+ const QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs
+ | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System);
+ for (const QString &fileName : fileNames) {
const QString newSrcFilePath = srcFilePath + QLatin1Char('/') + fileName;
const QString newTgtFilePath = tgtFilePath + QLatin1Char('/') + fileName;
if (!copyFileRecursion(newSrcFilePath, newTgtFilePath, preserveSymLinks,
diff --git a/src/lib/corelib/tools/jsliterals.cpp b/src/lib/corelib/tools/jsliterals.cpp
index bb29cf4fd..1c514d395 100644
--- a/src/lib/corelib/tools/jsliterals.cpp
+++ b/src/lib/corelib/tools/jsliterals.cpp
@@ -73,7 +73,7 @@ QString toJSLiteral(const QVariant &val)
return QLatin1String("undefined");
if (val.type() == QVariant::List || val.type() == QVariant::StringList) {
QString res;
- foreach (const QVariant &child, val.toList()) {
+ for (const QVariant &child : val.toList()) {
if (res.length()) res.append(QLatin1String(", "));
res.append(toJSLiteral(child));
}
diff --git a/src/lib/corelib/tools/msvcinfo.cpp b/src/lib/corelib/tools/msvcinfo.cpp
index 86fb63286..b769e3910 100644
--- a/src/lib/corelib/tools/msvcinfo.cpp
+++ b/src/lib/corelib/tools/msvcinfo.cpp
@@ -67,7 +67,7 @@ public:
TemporaryEnvChanger(const QProcessEnvironment &envChanges)
{
QProcessEnvironment currentEnv = QProcessEnvironment::systemEnvironment();
- foreach (const QString &key, envChanges.keys()) {
+ for (const QString &key : envChanges.keys()) {
m_changesToRestore.insert(key, currentEnv.value(key));
qputenv(qPrintable(key), qPrintable(envChanges.value(key)));
}
@@ -75,7 +75,7 @@ public:
~TemporaryEnvChanger()
{
- foreach (const QString &key, m_changesToRestore.keys())
+ for (const QString &key : m_changesToRestore.keys())
qputenv(qPrintable(key), qPrintable(m_changesToRestore.value(key)));
}
diff --git a/src/lib/corelib/tools/projectgeneratormanager.cpp b/src/lib/corelib/tools/projectgeneratormanager.cpp
index 9934987ef..d59fa1bd5 100644
--- a/src/lib/corelib/tools/projectgeneratormanager.cpp
+++ b/src/lib/corelib/tools/projectgeneratormanager.cpp
@@ -43,6 +43,7 @@
#include <logging/logger.h>
#include <logging/translator.h>
#include <tools/hostosinfo.h>
+#include <tools/qttools.h>
#include <QtCore/qcoreapplication.h>
#include <QtCore/qdiriterator.h>
@@ -57,7 +58,7 @@ using namespace Internal;
ProjectGeneratorManager::~ProjectGeneratorManager()
{
- foreach (QLibrary * const lib, m_libs) {
+ for (QLibrary * const lib : qAsConst(m_libs)) {
lib->unload();
delete lib;
}
@@ -74,9 +75,8 @@ ProjectGeneratorManager::ProjectGeneratorManager()
QVector<QSharedPointer<ProjectGenerator> > generators;
generators << QSharedPointer<ClangCompilationDatabaseGenerator>::create();
generators << qbs::VisualStudioGenerator::createGeneratorList();
- foreach (QSharedPointer<ProjectGenerator> generator, generators) {
+ for (QSharedPointer<ProjectGenerator> generator : qAsConst(generators))
m_generators[generator->generatorName()] = generator;
- }
}
QStringList ProjectGeneratorManager::loadedGeneratorNames()
diff --git a/src/lib/corelib/tools/qttools.cpp b/src/lib/corelib/tools/qttools.cpp
index 073cc7871..4e20a7f45 100644
--- a/src/lib/corelib/tools/qttools.cpp
+++ b/src/lib/corelib/tools/qttools.cpp
@@ -43,7 +43,7 @@ QT_BEGIN_NAMESPACE
uint qHash(const QStringList &list)
{
uint s = 0;
- foreach (const QString &n, list)
+ for (const QString &n : list)
s ^= qHash(n) + 0x9e3779b9 + (s << 6) + (s >> 2);
return s;
}
diff --git a/src/lib/corelib/tools/scannerpluginmanager.cpp b/src/lib/corelib/tools/scannerpluginmanager.cpp
index 8a415af9b..c6ce3327b 100644
--- a/src/lib/corelib/tools/scannerpluginmanager.cpp
+++ b/src/lib/corelib/tools/scannerpluginmanager.cpp
@@ -42,6 +42,7 @@
#include <logging/logger.h>
#include <logging/translator.h>
#include <tools/hostosinfo.h>
+#include <tools/qttools.h>
#include <QtCore/qcoreapplication.h>
#include <QtCore/qdiriterator.h>
@@ -52,7 +53,7 @@ namespace Internal {
ScannerPluginManager::~ScannerPluginManager()
{
- foreach (QLibrary * const lib, m_libs) {
+ for (QLibrary * const lib : qAsConst(m_libs)) {
lib->unload();
delete lib;
}
@@ -94,7 +95,7 @@ void ScannerPluginManager::loadPlugins(const QStringList &pluginPaths, const Log
else
filters << QLatin1String("*.so");
- foreach (const QString &pluginPath, pluginPaths) {
+ for (const QString &pluginPath : pluginPaths) {
logger.qbsTrace() << QString::fromLatin1("pluginmanager: loading plugins from '%1'.")
.arg(QDir::toNativeSeparators(pluginPath));
QDirIterator it(pluginPath, filters, QDir::Files);
diff --git a/src/lib/corelib/tools/scripttools.h b/src/lib/corelib/tools/scripttools.h
index 0b79a4a11..56731c730 100644
--- a/src/lib/corelib/tools/scripttools.h
+++ b/src/lib/corelib/tools/scripttools.h
@@ -57,7 +57,7 @@ QScriptValue toScriptValue(QScriptEngine *scriptEngine, const C &container)
{
QScriptValue v = scriptEngine->newArray(container.count());
int i = 0;
- foreach (const typename C::value_type &item, container)
+ for (const typename C::value_type &item : container)
v.setProperty(i++, scriptEngine->toScriptValue(item));
return v;
}
diff --git a/src/lib/corelib/tools/settingscreator.cpp b/src/lib/corelib/tools/settingscreator.cpp
index 67be7f9f6..45a9db7ef 100644
--- a/src/lib/corelib/tools/settingscreator.cpp
+++ b/src/lib/corelib/tools/settingscreator.cpp
@@ -102,7 +102,7 @@ void SettingsCreator::migrate()
// that's only preferences.qbsSearchPaths as written by libqtprofilesetup, but we don't want
// to hardcode that here.
m_settings.reset(new QSettings(m_newSettingsFilePath, format()));
- foreach (const QString &key, m_settings->allKeys()) {
+ for (const QString &key : m_settings->allKeys()) {
QVariant v = m_settings->value(key);
if (v.type() == QVariant::String) {
QString s = v.toString();
@@ -111,7 +111,7 @@ void SettingsCreator::migrate()
} else if (v.type() == QVariant::StringList) {
const QStringList oldList = v.toStringList();
QStringList newList;
- foreach (const QString &oldString, oldList) {
+ for (const QString &oldString : oldList) {
QString newString = oldString;
newList << newString.replace(oldProfilesDir, newProfilesDir);
}
diff --git a/src/lib/corelib/tools/settingsmodel.cpp b/src/lib/corelib/tools/settingsmodel.cpp
index f501f9e37..895e5e9e7 100644
--- a/src/lib/corelib/tools/settingsmodel.cpp
+++ b/src/lib/corelib/tools/settingsmodel.cpp
@@ -39,6 +39,7 @@
#include "settingsmodel.h"
#include <tools/jsliterals.h>
+#include <tools/qttools.h>
#include <tools/settings.h>
#include <QtCore/qlist.h>
@@ -76,7 +77,7 @@ QString Node::uniqueChildName() const
bool unique;
do {
unique = true;
- foreach (const Node *childNode, children) {
+ for (const Node *childNode : qAsConst(children)) {
if (childNode->name == newName) {
unique = false;
newName += QLatin1Char('_');
@@ -89,7 +90,7 @@ QString Node::uniqueChildName() const
bool Node::hasDirectChildWithName(const QString &name) const
{
- foreach (const Node * const child, children) {
+ for (const Node * const child : qAsConst(children)) {
if (child->name == name)
return true;
}
@@ -318,7 +319,7 @@ void SettingsModel::SettingsModelPrivate::readSettings()
{
qDeleteAll(rootNode.children);
rootNode.children.clear();
- foreach (const QString &topLevelKey, settings->directChildren(QString()))
+ for (const QString &topLevelKey : settings->directChildren(QString()))
addNodeFromSettings(&rootNode, topLevelKey);
for (QVariantMap::ConstIterator it = additionalProperties.constBegin();
it != additionalProperties.constEnd(); ++it) {
@@ -344,7 +345,7 @@ void SettingsModel::SettingsModelPrivate::addNodeFromSettings(Node *parentNode,
= fullyQualifiedName.mid(fullyQualifiedName.lastIndexOf(QLatin1Char('.')) + 1);
Node * const node = createNode(parentNode, nodeName);
node->value = settingsValueToRepresentation(settings->value(fullyQualifiedName));
- foreach (const QString &childKey, settings->directChildren(fullyQualifiedName))
+ for (const QString &childKey : settings->directChildren(fullyQualifiedName))
addNodeFromSettings(node, fullyQualifiedName + QLatin1Char('.') + childKey);
dirty = true;
}
@@ -353,7 +354,7 @@ void SettingsModel::SettingsModelPrivate::addNode(qbs::Internal::Node *parentNod
const QString &currentNamePart, const QStringList &restOfName, const QVariant &value)
{
Node *currentNode = 0;
- foreach (Node * const n, parentNode->children) {
+ for (Node * const n : qAsConst(parentNode->children)) {
if (n->name == currentNamePart) {
currentNode = n;
break;
@@ -377,7 +378,7 @@ void SettingsModel::SettingsModelPrivate::doSave(const Node *node, const QString
}
const QString newPrefix = prefix + node->name + QLatin1Char('.');
- foreach (const Node * const child, node->children)
+ for (const Node * const child : qAsConst(node->children))
doSave(child, newPrefix);
}
diff --git a/src/lib/corelib/tools/setupprojectparameters.cpp b/src/lib/corelib/tools/setupprojectparameters.cpp
index e7660cae2..f12ea9de0 100644
--- a/src/lib/corelib/tools/setupprojectparameters.cpp
+++ b/src/lib/corelib/tools/setupprojectparameters.cpp
@@ -348,7 +348,7 @@ static QVariantMap expandedBuildConfigurationInternal(const QString &settingsBas
throw err;
if (profileKeys.isEmpty())
throw ErrorInfo(Internal::Tr::tr("Unknown or empty profile '%1'.").arg(profileName));
- foreach (const QString &profileKey, profileKeys) {
+ for (const QString &profileKey : profileKeys) {
buildConfig.insert(profileKey, profile.value(profileKey, QVariant(), &err));
if (err.hasError())
throw err;
diff --git a/src/lib/corelib/tools/vsenvironmentdetector.cpp b/src/lib/corelib/tools/vsenvironmentdetector.cpp
index 318fa367e..92213527a 100644
--- a/src/lib/corelib/tools/vsenvironmentdetector.cpp
+++ b/src/lib/corelib/tools/vsenvironmentdetector.cpp
@@ -41,6 +41,7 @@
#include <logging/translator.h>
#include <tools/qbsassert.h>
+#include <tools/qttools.h>
#include <QtCore/qdebug.h>
#include <QtCore/qdir.h>
@@ -84,7 +85,7 @@ bool VsEnvironmentDetector::start(QVector<MSVC *> msvcs)
QVector<MSVC *> compatibleMSVCs;
QString lastVcInstallPath;
- foreach (MSVC *msvc, msvcs) {
+ for (MSVC * const msvc : qAsConst(msvcs)) {
if (lastVcInstallPath != msvc->vcInstallPath) {
lastVcInstallPath = msvc->vcInstallPath;
if (!compatibleMSVCs.isEmpty()) {
@@ -163,13 +164,13 @@ bool VsEnvironmentDetector::startDetection(const QVector<MSVC *> &compatibleMSVC
static void batClearVars(QTextStream &s, const QStringList &varnames)
{
- foreach (const QString &varname, varnames)
+ for (const QString &varname : varnames)
s << "set " << varname << '=' << endl;
}
static void batPrintVars(QTextStream &s, const QStringList &varnames)
{
- foreach (const QString &varname, varnames)
+ for (const QString &varname : varnames)
s << "echo " << varname << "=%" << varname << '%' << endl;
}
@@ -215,7 +216,7 @@ void VsEnvironmentDetector::parseBatOutput(const QByteArray &output, QVector<MSV
{
QString arch;
QProcessEnvironment *targetEnv = 0;
- foreach (QByteArray line, output.split('\n')) {
+ for (QByteArray line : output.split('\n')) {
line = line.trimmed();
if (line.isEmpty())
continue;