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