aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph
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/corelib/buildgraph
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/corelib/buildgraph')
-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
24 files changed, 209 insertions, 204 deletions
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);
}