diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-01-31 10:18:24 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-02-21 17:25:16 +0000 |
commit | b1b58a735a8d6f8f9fb586a877c145326f4b1628 (patch) | |
tree | c4b4c37e3469df8a355d82bf1b1c882d569a5c2a /src/lib/corelib/buildgraph | |
parent | 1c65b79eb3da939de372b10b603729c4621caba8 (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')
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); } |