diff options
24 files changed, 201 insertions, 143 deletions
diff --git a/examples/collidingmice/mouse.cpp b/examples/collidingmice/mouse.cpp index c3373501c..8dbe28c49 100644 --- a/examples/collidingmice/mouse.cpp +++ b/examples/collidingmice/mouse.cpp @@ -162,11 +162,11 @@ void Mouse::advance(int step) // Try not to crash with any other mice //! [7] - QList<QGraphicsItem *> dangerMice = scene()->items(QPolygonF() + const QList<QGraphicsItem *> dangerMice = scene()->items(QPolygonF() << mapToScene(0, 0) << mapToScene(-30, -50) << mapToScene(30, -50)); - foreach (QGraphicsItem *item, dangerMice) { + for (QGraphicsItem *item : dangerMice) { if (item == this) continue; diff --git a/src/app/config/configcommandexecutor.cpp b/src/app/config/configcommandexecutor.cpp index c95b43f18..3169a6f24 100644 --- a/src/app/config/configcommandexecutor.cpp +++ b/src/app/config/configcommandexecutor.cpp @@ -66,7 +66,7 @@ void ConfigCommandExecutor::execute(const ConfigCommand &command) setValue(command.varNames.front(), command.varValue); break; case ConfigCommand::CfgUnset: - foreach (const QString &varName, command.varNames) + for (const QString &varName : command.varNames) m_settings->remove(varName); break; case ConfigCommand::CfgExport: @@ -94,14 +94,16 @@ void ConfigCommandExecutor::setValue(const QString &key, const QString &rawInput void ConfigCommandExecutor::printSettings(const ConfigCommand &command) { if (command.varNames.empty()) { - foreach (const QString &key, m_settings->allKeys()) + const auto keys = m_settings->allKeys(); + for (const QString &key : keys) printOneSetting(key); } else { - foreach (const QString &parentKey, command.varNames) { + for (const QString &parentKey : command.varNames) { if (m_settings->value(parentKey).isValid()) { // Key is a leaf. printOneSetting(parentKey); } else { // Key is a node. - foreach (const QString &key, m_settings->allKeysWithPrefix(parentKey)) + const auto keys = m_settings->allKeysWithPrefix(parentKey); + for (const QString &key : keys) printOneSetting(parentKey + QLatin1Char('.') + key); } } @@ -123,7 +125,8 @@ void ConfigCommandExecutor::exportSettings(const QString &filename) } QTextStream stream(&file); stream.setCodec("UTF-8"); - foreach (const QString &key, m_settings->allKeys()) + const auto keys = m_settings->allKeys(); + for (const QString &key : keys) stream << key << ": " << qbs::settingsValueToRepresentation(m_settings->value(key)) << endl; } @@ -135,7 +138,8 @@ void ConfigCommandExecutor::importSettings(const QString &filename) .arg(QDir::toNativeSeparators(filename), file.errorString())); } // Remove all current settings - foreach (const QString &key, m_settings->allKeys()) + const auto keys = m_settings->allKeys(); + for (const QString &key : keys) m_settings->remove(key); QTextStream stream(&file); diff --git a/src/app/qbs-setup-qt/main.cpp b/src/app/qbs-setup-qt/main.cpp index 92405ab07..d0f78cce6 100644 --- a/src/app/qbs-setup-qt/main.cpp +++ b/src/app/qbs-setup-qt/main.cpp @@ -71,13 +71,13 @@ int main(int argc, char *argv[]) if (clParser.autoDetectionMode()) { // search all Qt's in path and dump their settings - QList<QtEnvironment> qtEnvironments = SetupQt::fetchEnvironments(); + const QList<QtEnvironment> qtEnvironments = SetupQt::fetchEnvironments(); if (qtEnvironments.empty()) { std::cout << qPrintable(Tr::tr("No Qt installations detected. " "No profiles created.")) << std::endl; } - foreach (const QtEnvironment &qtEnvironment, qtEnvironments) { + for (const QtEnvironment &qtEnvironment : qtEnvironments) { QString profileName = QLatin1String("qt-") + qtEnvironment.qtVersion; if (SetupQt::checkIfMoreThanOneQtWithTheSameVersion(qtEnvironment.qtVersion, qtEnvironments)) { QStringList prefixPathParts = qtEnvironment.installPrefixPath diff --git a/src/app/qbs-setup-qt/setupqt.cpp b/src/app/qbs-setup-qt/setupqt.cpp index 7c2b4e394..b8cb416dd 100644 --- a/src/app/qbs-setup-qt/setupqt.cpp +++ b/src/app/qbs-setup-qt/setupqt.cpp @@ -82,10 +82,10 @@ static QStringList collectQmakePaths() const QStringList qmakeExeNames = qmakeExecutableNames(); QStringList qmakePaths; QByteArray environmentPath = qgetenv("PATH"); - QList<QByteArray> environmentPaths + const QList<QByteArray> environmentPaths = environmentPath.split(HostOsInfo::pathListSeparator().toLatin1()); - foreach (const QByteArray &path, environmentPaths) { - foreach (const QString &qmakeExecutableName, qmakeExeNames) { + for (const QByteArray &path : environmentPaths) { + for (const QString &qmakeExecutableName : qmakeExeNames) { QFileInfo pathFileInfo(QDir(QLatin1String(path)), qmakeExecutableName); if (pathFileInfo.exists()) { QString qmakePath = pathFileInfo.absoluteFilePath(); @@ -108,7 +108,8 @@ QList<QtEnvironment> SetupQt::fetchEnvironments() { QList<QtEnvironment> qtEnvironments; - foreach (const QString &qmakePath, collectQmakePaths()) { + const auto qmakePaths = collectQmakePaths(); + for (const QString &qmakePath : qmakePaths) { const QtEnvironment env = fetchEnvironment(qmakePath); if (std::find_if(qtEnvironments.cbegin(), qtEnvironments.cend(), [&env](const QtEnvironment &otherEnv) { @@ -137,7 +138,8 @@ static QMap<QByteArray, QByteArray> qmakeQueryOutput(const QString &qmakePath) const QByteArray output = qmakeProcess.readAllStandardOutput(); QMap<QByteArray, QByteArray> ret; - foreach (const QByteArray &line, output.split('\n')) { + const auto lines = output.split('\n'); + for (const QByteArray &line : lines) { int idx = line.indexOf(':'); if (idx >= 0) ret[line.left(idx)] = line.mid(idx + 1).trimmed(); @@ -159,11 +161,11 @@ static QString configVariable(const QByteArray &configContent, const QString &ke QRegExp regexp(QLatin1String("\\s*") + key + QLatin1String("\\s*\\+{0,1}=(.*)"), Qt::CaseSensitive); - QList<QByteArray> configContentLines = configContent.split('\n'); + const QList<QByteArray> configContentLines = configContent.split('\n'); bool success = false; - foreach (const QByteArray &configContentLine, configContentLines) { + for (const QByteArray &configContentLine : configContentLines) { success = regexp.exactMatch(QString::fromLocal8Bit(configContentLine)); if (success) break; @@ -532,7 +534,8 @@ void SetupQt::saveToQbsSettings(const QString &qtVersionName, const QtEnvironmen QStringList fullMatches; QStringList partialMatches; - foreach (const QString &profileName, settings->profiles()) { + const auto profileNames = settings->profiles(); + for (const QString &profileName : profileNames) { const Profile otherProfile(profileName, settings); if (profileName == profile.name() || !isToolchainProfile(otherProfile) @@ -584,7 +587,7 @@ bool SetupQt::checkIfMoreThanOneQtWithTheSameVersion(const QString &qtVersion, const QList<QtEnvironment> &qtEnvironments) { bool foundOneVersion = false; - foreach (const QtEnvironment &qtEnvironment, qtEnvironments) { + for (const QtEnvironment &qtEnvironment : qtEnvironments) { if (qtEnvironment.qtVersion == qtVersion) { if (foundOneVersion) return true; diff --git a/src/app/qbs-setup-toolchains/msvcprobe.cpp b/src/app/qbs-setup-toolchains/msvcprobe.cpp index 556f127f5..0b3f460b5 100644 --- a/src/app/qbs-setup-toolchains/msvcprobe.cpp +++ b/src/app/qbs-setup-toolchains/msvcprobe.cpp @@ -47,6 +47,7 @@ #include <tools/error.h> #include <tools/msvcinfo.h> #include <tools/profile.h> +#include <tools/qttools.h> #include <tools/settings.h> #include <tools/version.h> #include <tools/visualstudioversioninfo.h> @@ -121,12 +122,14 @@ static std::vector<MSVCArchInfo> findSupportedArchitectures(const MSVC &msvc) } } else { QDir vcInstallDir(msvc.vcInstallPath); - foreach (QString hostArch, vcInstallDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + const auto hostArchs = vcInstallDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QString &hostArch : hostArchs) { QDir subdir = vcInstallDir; if (!subdir.cd(hostArch)) continue; const QString shortHostArch = hostArch.mid(4).toLower(); - foreach (const QString &arch, subdir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + const auto archs = subdir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QString &arch : archs) { MSVCArchInfo ai; ai.binPath = subdir.absoluteFilePath(arch); if (shortHostArch == arch) @@ -164,7 +167,8 @@ static std::vector<MSVCRegistryEntry> installedMSVCsFromRegistry() QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE") + wow6432Key() + QStringLiteral("\\Microsoft\\VisualStudio\\SxS\\VS7"), QSettings::NativeFormat); - foreach (const QString &vsName, vsRegistry.childKeys()) { + const auto vsNames = vsRegistry.childKeys(); + for (const QString &vsName : vsNames) { MSVCRegistryEntry entry; entry.version = vsName; entry.installDir = vsRegistry.value(vsName).toString(); @@ -231,8 +235,8 @@ static std::vector<MSVC> installedMSVCs() } else { QDir vcInstallDir = vsInstallDir; vcInstallDir.cd(QStringLiteral("Tools/MSVC")); - foreach (const QString &vcVersionStr, - vcInstallDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { + const auto vcVersionStrs = vcInstallDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QString &vcVersionStr : vcVersionStrs) { const Version vcVersion = Version::fromString(vcVersionStr); if (!vcVersion.isValid()) continue; @@ -262,7 +266,8 @@ void msvcProbe(Settings *settings, QList<Profile> &profiles) QSettings::NativeFormat); const QString defaultSdkPath = sdkRegistry.value(QLatin1String("CurrentInstallFolder")).toString(); if (!defaultSdkPath.isEmpty()) { - foreach (const QString &sdkKey, sdkRegistry.childGroups()) { + const auto sdkKeys = sdkRegistry.childGroups(); + for (const QString &sdkKey : sdkKeys) { WinSDK sdk; sdk.version = sdkKey; sdk.vcInstallPath = sdkRegistry.value(sdkKey + QLatin1String("/InstallationFolder")).toString(); @@ -273,7 +278,8 @@ void msvcProbe(Settings *settings, QList<Profile> &profiles) sdk.vcInstallPath.chop(1); if (sdk.isDefault) defaultWinSDK = sdk; - foreach (const MSVCArchInfo &ai, findSupportedArchitectures(sdk)) { + const auto ais = findSupportedArchitectures(sdk); + for (const MSVCArchInfo &ai : ais) { WinSDK specificSDK = sdk; specificSDK.architecture = ai.arch; specificSDK.binPath = ai.binPath; @@ -282,7 +288,7 @@ void msvcProbe(Settings *settings, QList<Profile> &profiles) } } - foreach (const WinSDK &sdk, winSDKs) { + for (const WinSDK &sdk : qAsConst(winSDKs)) { qbsInfo() << Tr::tr(" Windows SDK %1 detected:\n" " installed in %2").arg(sdk.version, sdk.vcInstallPath); if (sdk.isDefault) @@ -291,7 +297,8 @@ void msvcProbe(Settings *settings, QList<Profile> &profiles) // 2) Installed MSVCs std::vector<MSVC> msvcs; - foreach (MSVC msvc, installedMSVCs()) { + const auto instMsvcs = installedMSVCs(); + for (const MSVC &msvc : instMsvcs) { if (msvc.internalVsVersion.majorVersion() < 15) { // Check existence of various install scripts const QString vcvars32bat = msvc.vcInstallPath + QLatin1String("/vcvars32.bat"); @@ -299,7 +306,8 @@ void msvcProbe(Settings *settings, QList<Profile> &profiles) continue; } - foreach (const MSVCArchInfo &ai, findSupportedArchitectures(msvc)) { + const auto ais = findSupportedArchitectures(msvc); + for (const MSVCArchInfo &ai : ais) { MSVC specificMSVC = msvc; specificMSVC.architecture = ai.arch; specificMSVC.binPath = ai.binPath; @@ -307,7 +315,7 @@ void msvcProbe(Settings *settings, QList<Profile> &profiles) } } - foreach (const MSVC &msvc, msvcs) { + for (const MSVC &msvc : qAsConst(msvcs)) { qbsInfo() << Tr::tr(" MSVC %1 (%2) detected in\n" " %3").arg(msvc.version, msvc.architecture, QDir::toNativeSeparators(msvc.binPath)); diff --git a/src/app/qbs-setup-toolchains/probe.cpp b/src/app/qbs-setup-toolchains/probe.cpp index 94c729d0a..11dee9ad6 100644 --- a/src/app/qbs-setup-toolchains/probe.cpp +++ b/src/app/qbs-setup-toolchains/probe.cpp @@ -46,6 +46,7 @@ #include <tools/error.h> #include <tools/hostosinfo.h> #include <tools/profile.h> +#include <tools/qttools.h> #include <tools/settings.h> #include <tools/toolchains.h> #include <tools/stlutils.h> @@ -73,7 +74,8 @@ static QString findExecutable(const QString &fileName) fullFileName += QLatin1String(".exe"); } const QString path = QString::fromLocal8Bit(qgetenv("PATH")); - foreach (const QString &ppath, path.split(HostOsInfo::pathListSeparator())) { + const auto ppaths = path.split(HostOsInfo::pathListSeparator()); + for (const QString &ppath : ppaths) { const QString fullPath = ppath + QLatin1Char('/') + fullFileName; if (QFileInfo::exists(fullPath)) return QDir::cleanPath(fullPath); @@ -110,10 +112,12 @@ static QStringList toolchainTypeFromCompilerName(const QString &compilerName) { if (compilerName == QLatin1String("cl.exe")) return canonicalToolchain(QLatin1String("msvc")); - foreach (const QString &type, (QStringList() << QLatin1String("clang") << QLatin1String("llvm") - << QLatin1String("mingw") << QLatin1String("gcc"))) + const auto types = { QLatin1String("clang"), QLatin1String("llvm"), + QLatin1String("mingw"), QLatin1String("gcc") }; + for (const QString &type : types) { if (compilerName.contains(type)) return canonicalToolchain(type); + } if (compilerName == QLatin1String("g++")) return canonicalToolchain(QLatin1String("gcc")); return QStringList(); @@ -256,12 +260,13 @@ static void mingwProbe(Settings *settings, QList<Profile> &profiles) if (HostOsInfo::isWindowsHost()) { compilerNames << QLatin1String("gcc"); } else { - foreach (const QString &machineName, validMinGWMachines()) { + const auto machineNames = validMinGWMachines(); + for (const QString &machineName : machineNames) { compilerNames << machineName + QLatin1String("-gcc"); } } - foreach (const QString &compilerName, compilerNames) { + for (const QString &compilerName : qAsConst(compilerNames)) { const QString gccPath = findExecutable(HostOsInfo::appendExecutableSuffix(compilerName)); if (!gccPath.isEmpty()) diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp index ac73c9e21..d80b952e7 100644 --- a/src/app/qbs/commandlinefrontend.cpp +++ b/src/app/qbs/commandlinefrontend.cpp @@ -95,9 +95,9 @@ void CommandLineFrontend::checkCancelStatus() m_cancelTimer->stop(); if (m_resolveJobs.empty() && m_buildJobs.empty()) std::exit(EXIT_FAILURE); - foreach (AbstractJob * const job, m_resolveJobs) + for (AbstractJob * const job : qAsConst(m_resolveJobs)) job->cancel(); - foreach (AbstractJob * const job, m_buildJobs) + for (AbstractJob * const job : qAsConst(m_buildJobs)) job->cancel(); break; case CancelStatusCanceling: @@ -152,7 +152,8 @@ void CommandLineFrontend::start() params.setPropertyCheckingMode(ErrorHandlingMode::Strict); if (!m_parser.buildBeforeInstalling() || !m_parser.commandCanResolve()) params.setRestoreBehavior(SetupProjectParameters::RestoreOnly); - foreach (const QVariantMap &buildConfig, m_parser.buildConfigurations()) { + const auto buildConfigs = m_parser.buildConfigurations(); + for (const QVariantMap &buildConfig : buildConfigs) { QVariantMap userConfig = buildConfig; const QString configurationKey = QLatin1String("qbs.configurationName"); const QString profileKey = QLatin1String("qbs.profile"); @@ -340,10 +341,11 @@ CommandLineFrontend::ProductMap CommandLineFrontend::productsToUse() const ProductMap products; QStringList productNames; const bool useAll = m_parser.products().empty(); - foreach (const Project &project, m_projects) { + for (const Project &project : qAsConst(m_projects)) { QList<ProductData> &productList = products[project]; const ProjectData projectData = project.projectData(); - foreach (const ProductData &product, projectData.allProducts()) { + const auto products = projectData.allProducts(); + for (const ProductData &product : products) { if (useAll || m_parser.products().contains(product.name())) { productList.push_back(product); productNames << product.name(); @@ -351,7 +353,8 @@ CommandLineFrontend::ProductMap CommandLineFrontend::productsToUse() const } } - foreach (const QString &productName, m_parser.products()) { + const auto parsedProductNames = m_parser.products(); + for (const QString &productName : parsedProductNames) { if (!productNames.contains(productName)) throw ErrorInfo(Tr::tr("No such product '%1'.").arg(productName)); } @@ -410,7 +413,7 @@ void CommandLineFrontend::handleProjectsResolved() void CommandLineFrontend::makeClean() { if (m_parser.products().empty()) { - foreach (const Project &project, m_projects) { + for (const Project &project : qAsConst(m_projects)) { m_buildJobs << project.cleanAllProducts(m_parser.cleanOptions(project.profile()), this); } } else { @@ -482,7 +485,7 @@ void CommandLineFrontend::build() if (m_parser.products().empty()) { const Project::ProductSelection productSelection = m_parser.withNonDefaultProducts() ? Project::ProductSelectionWithNonDefault : Project::ProductSelectionDefaultOnly; - foreach (const Project &project, m_projects) + for (const Project &project : qAsConst(m_projects)) m_buildJobs << project.buildAllProducts(buildOptions(project), productSelection, this); } else { const ProductMap &products = productsToUse(); @@ -580,7 +583,7 @@ void CommandLineFrontend::listProducts() void CommandLineFrontend::connectBuildJobs() { - foreach (AbstractJob * const job, m_buildJobs) + for (AbstractJob * const job : qAsConst(m_buildJobs)) connectBuildJob(job); } @@ -617,7 +620,8 @@ ProductData CommandLineFrontend::getTheOneRunnableProduct() QBS_CHECK(m_projects.size() == 1); // Has been checked earlier. if (m_parser.products().size() == 1) { - foreach (const ProductData &p, m_projects.front().projectData().allProducts()) { + const auto products = m_projects.front().projectData().allProducts(); + for (const ProductData &p : products) { if (p.name() == m_parser.products().front()) return p; } @@ -626,7 +630,8 @@ ProductData CommandLineFrontend::getTheOneRunnableProduct() QBS_CHECK(m_parser.products().size() == 0); QList<ProductData> runnableProducts; - foreach (const ProductData &p, m_projects.front().projectData().allProducts()) { + const auto products = m_projects.front().projectData().allProducts(); + for (const ProductData &p : products) { if (p.isRunnable()) runnableProducts.push_back(p); } @@ -642,7 +647,7 @@ ProductData CommandLineFrontend::getTheOneRunnableProduct() ErrorInfo error(Tr::tr("Ambiguous use of command '%1': No product given, but project " "has more than one runnable product.").arg(m_parser.commandName())); error.append(Tr::tr("Use the '--products' option with one of the following products:")); - foreach (const ProductData &p, runnableProducts) { + for (const ProductData &p : qAsConst(runnableProducts)) { QString productRepr = QLatin1String("\t") + p.name(); if (p.profile() != m_projects.front().profile()) { productRepr.append(QLatin1String(" [")).append(p.profile()) diff --git a/src/app/qbs/parser/commandlineoption.cpp b/src/app/qbs/parser/commandlineoption.cpp index 875256516..c2eea340a 100644 --- a/src/app/qbs/parser/commandlineoption.cpp +++ b/src/app/qbs/parser/commandlineoption.cpp @@ -42,6 +42,7 @@ #include <logging/translator.h> #include <tools/error.h> #include <tools/installoptions.h> +#include <tools/qttools.h> namespace qbs { using namespace Internal; @@ -335,7 +336,7 @@ void StringListOption::doParse(const QString &representation, QStringList &input throw ErrorInfo(Tr::tr("Invalid use of option '%1': Argument list must not be empty.\n" "Usage: %2").arg(representation, description(command()))); } - foreach (const QString &element, m_arguments) { + for (const QString &element : qAsConst(m_arguments)) { if (element.isEmpty()) { throw ErrorInfo(Tr::tr("Invalid use of option '%1': Argument list must not contain " "empty elements.\nUsage: %2") @@ -412,7 +413,7 @@ void LogLevelOption::doParse(const QString &representation, QStringList &input) const QString levelString = getArgument(representation, input); const QList<LoggerLevel> levels = QList<LoggerLevel>() << LoggerError << LoggerWarning << LoggerInfo << LoggerDebug << LoggerTrace; - foreach (LoggerLevel l, levels) { + for (const LoggerLevel &l : levels) { if (logLevelName(l) == levelString) { m_logLevel = l; return; diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp index 5e9910c15..1f62e716c 100644 --- a/src/app/qbs/parser/commandlineparser.cpp +++ b/src/app/qbs/parser/commandlineparser.cpp @@ -55,6 +55,7 @@ #include <tools/installoptions.h> #include <tools/preferences.h> #include <tools/qbsassert.h> +#include <tools/qttools.h> #include <tools/settings.h> #include <tools/settingsmodel.h> @@ -358,7 +359,8 @@ void CommandLineParser::CommandLineParserPrivate::doParse() Command *CommandLineParser::CommandLineParserPrivate::commandFromString(const QString &commandString) const { - foreach (Command * const command, allCommands()) { + const auto commands = allCommands(); + for (Command * const command : commands) { if (command->representation() == commandString) return command; } @@ -402,10 +404,11 @@ QString CommandLineParser::CommandLineParserPrivate::generalHelp() const // Sorting the commands by name is nicer for the user. QMap<QString, const Command *> commandMap; - foreach (const Command * command, allCommands()) + const auto commands = allCommands(); + for (const Command * command : commands) commandMap.insert(command->representation(), command); - foreach (const Command * command, commandMap) { + for (const Command * command : qAsConst(commandMap)) { help.append(QLatin1String(" ")).append(command->representation()); const QString whitespace = QString(rhsIndentation - 2 - command->representation().size(), QLatin1Char(' ')); @@ -416,7 +419,7 @@ QString CommandLineParser::CommandLineParserPrivate::generalHelp() const toolNames.sort(); if (!toolNames.empty()) { help.append(QLatin1Char('\n')).append(Tr::tr("Auxiliary commands:\n")); - foreach (const QString &toolName, toolNames) { + for (const QString &toolName : qAsConst(toolNames)) { help.append(QLatin1String(" ")).append(toolName); const QString whitespace = QString(rhsIndentation - 2 - toolName.size(), QLatin1Char(' ')); @@ -473,7 +476,8 @@ void CommandLineParser::CommandLineParserPrivate::setupBuildConfigurations() const QString configurationNameKey = QLatin1String("qbs.configurationName"); QString currentConfigurationName; QVariantMap currentProperties; - foreach (const QString &arg, command->additionalArguments()) { + const auto args = command->additionalArguments(); + for (const QString &arg : args) { const int sepPos = arg.indexOf(QLatin1Char(':')); QBS_CHECK(sepPos > 0); const QString key = arg.left(sepPos); @@ -496,7 +500,7 @@ void CommandLineParser::CommandLineParserPrivate::setupBuildConfigurations() const QVariantMap globalProperties = propertiesPerConfiguration.takeFirst().second; QList<QVariantMap> buildConfigs; - foreach (const PropertyListItem &item, propertiesPerConfiguration) { + for (const PropertyListItem &item : qAsConst(propertiesPerConfiguration)) { QVariantMap properties = item.second; for (QVariantMap::ConstIterator globalPropIt = globalProperties.constBegin(); globalPropIt != globalProperties.constEnd(); ++globalPropIt) { @@ -584,7 +588,7 @@ QString CommandLineParser::CommandLineParserPrivate::propertyName(const QString bool CommandLineParser::CommandLineParserPrivate::checkForExistingBuildConfiguration( const QList<QVariantMap> &buildConfigs, const QString &configurationName) { - foreach (const QVariantMap &buildConfig, buildConfigs) { + for (const QVariantMap &buildConfig : buildConfigs) { if (configurationName == getBuildConfigurationName(buildConfig)) return true; } diff --git a/src/app/qbs/parser/parsercommand.cpp b/src/app/qbs/parser/parsercommand.cpp index 74bc36829..3649b6cf1 100644 --- a/src/app/qbs/parser/parsercommand.cpp +++ b/src/app/qbs/parser/parsercommand.cpp @@ -45,6 +45,7 @@ #include <tools/error.h> #include <tools/hostosinfo.h> #include <tools/qbsassert.h> +#include <tools/qttools.h> #include <QtCore/qmap.h> @@ -128,7 +129,8 @@ void Command::parseOption(QStringList &input) } bool matchFound = false; - foreach (const CommandLineOption::Type optionType, actualSupportedOptions()) { + const auto optionTypes = actualSupportedOptions(); + for (const CommandLineOption::Type optionType : optionTypes) { CommandLineOption * const option = optionPool().getOption(optionType); if (option->shortRepresentation() != optionString && option->longRepresentation() != optionString) { @@ -158,13 +160,14 @@ QString Command::supportedOptionsDescription() const { // Sorting the options by name is nicer for the user. QMap<QString, const CommandLineOption *> optionMap; - foreach (const CommandLineOption::Type opType, actualSupportedOptions()) { + const auto opTypes = actualSupportedOptions(); + for (const CommandLineOption::Type opType : opTypes) { const CommandLineOption * const option = optionPool().getOption(opType); optionMap.insert(option->longRepresentation(), option); } QString s = Tr::tr("The possible options are:\n"); - foreach (const CommandLineOption *option, optionMap) + for (const CommandLineOption *option : qAsConst(optionMap)) s += option->description(type()); return s; } diff --git a/src/app/qbs/qbstool.cpp b/src/app/qbs/qbstool.cpp index d01c39591..eb70557b6 100644 --- a/src/app/qbs/qbstool.cpp +++ b/src/app/qbs/qbstool.cpp @@ -92,11 +92,11 @@ bool QbsTool::tryToRunTool(const QString &toolName, const QStringList &arguments QStringList QbsTool::allToolNames() { const QString suffix = QLatin1String(QBS_HOST_EXE_SUFFIX); - QStringList toolFileNames = QDir(qbsBinDir()).entryList(QStringList(toolPrefix() + const QStringList toolFileNames = QDir(qbsBinDir()).entryList(QStringList(toolPrefix() + QString::fromLatin1("*%1").arg(suffix)), QDir::Files, QDir::Name); QStringList toolNames; const int prefixLength = toolPrefix().size(); - foreach (const QString &toolFileName, toolFileNames) { + for (const QString &toolFileName : toolFileNames) { toolNames << toolFileName.mid(prefixLength, toolFileName.size() - prefixLength - suffix.size()); } diff --git a/src/app/qbs/status.cpp b/src/app/qbs/status.cpp index f88196094..8c235010d 100644 --- a/src/app/qbs/status.cpp +++ b/src/app/qbs/status.cpp @@ -42,6 +42,7 @@ #include "../shared/logging/consolelogger.h" #include <qbs.h> +#include <tools/qttools.h> #include <QtCore/qdir.h> #include <QtCore/qfile.h> @@ -66,8 +67,8 @@ static QList<QRegExp> createIgnoreList(const QString &projectRootPath) QFile ignoreFile(ignoreFilePath); if (ignoreFile.open(QFile::ReadOnly)) { - QList<QByteArray> ignoreTokenList = ignoreFile.readAll().split('\n'); - foreach (const QByteArray &btoken, ignoreTokenList) { + const QList<QByteArray> ignoreTokenList = ignoreFile.readAll().split('\n'); + for (const QByteArray &btoken : ignoreTokenList) { const QString token = QString::fromLatin1(btoken); if (token.left(1) == QLatin1String("/")) ignoreRegularExpressionList.push_back(QRegExp(projectRootPath @@ -86,10 +87,11 @@ static QStringList allFilesInDirectoryRecursive(const QDir &rootDirecory, const { QStringList fileList; - foreach (const QFileInfo &fileInfo, rootDirecory.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, QDir::Name)) { + const auto fileInfos = rootDirecory.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, QDir::Name); + for (const QFileInfo &fileInfo : fileInfos) { QString absoluteFilePath = fileInfo.absoluteFilePath(); bool inIgnoreList = false; - foreach (const QRegExp &ignoreRegularExpression, ignoreRegularExpressionList) { + for (const QRegExp &ignoreRegularExpression : ignoreRegularExpressionList) { if (ignoreRegularExpression.exactMatch(absoluteFilePath)) { inIgnoreList = true; break; @@ -118,7 +120,8 @@ static QStringList allFilesInProject(const QString &projectRootPath) QStringList allFiles(const ProductData &product) { QStringList files; - foreach (const GroupData &group, product.groups()) + const auto groups = product.groups(); + for (const GroupData &group : groups) files += group.allFilePaths(); return files; } @@ -131,17 +134,19 @@ int printStatus(const ProjectData &project) QStringList untrackedFilesInProject = allFilesInProject(projectDirectory); QStringList missingFiles; - foreach (const ProductData &product, project.allProducts()) { + const auto products = project.allProducts(); + for (const ProductData &product : products) { qbsInfo() << "\nProduct: " << product.name() << " (" << product.location().filePath() << ":" << product.location().line() << ")"; - foreach (const GroupData &group, product.groups()) { + const auto groups = product.groups(); + for (const GroupData &group : groups) { qbsInfo() << " Group: " << group.name() << " (" << group.location().filePath() << ":" << group.location().line() << ")"; QStringList sourceFiles = group.allFilePaths(); qSort(sourceFiles); - foreach (const QString &sourceFile, sourceFiles) { + for (const QString &sourceFile : qAsConst(sourceFiles)) { if (!QFileInfo(sourceFile).exists()) missingFiles.push_back(sourceFile); qbsInfo() << " " << sourceFile.mid(projectDirectoryPathLength + 1); @@ -151,11 +156,11 @@ int printStatus(const ProjectData &project) } qbsInfo() << "\nMissing files:"; - foreach (const QString &untrackedFile, missingFiles) + for (const QString &untrackedFile : qAsConst(missingFiles)) qbsInfo() << " " << untrackedFile.mid(projectDirectoryPathLength + 1); qbsInfo() << "\nUntracked files:"; - foreach (const QString &missingFile, untrackedFilesInProject) + for (const QString &missingFile : qAsConst(untrackedFilesInProject)) qbsInfo() << " " << missingFile.mid(projectDirectoryPathLength + 1); return 0; diff --git a/src/lib/corelib/buildgraph/projectbuilddata.cpp b/src/lib/corelib/buildgraph/projectbuilddata.cpp index b617f0039..8997a2194 100644 --- a/src/lib/corelib/buildgraph/projectbuilddata.cpp +++ b/src/lib/corelib/buildgraph/projectbuilddata.cpp @@ -303,12 +303,12 @@ void BuildDataResolver::resolveProductBuildDataForExistingProject(const TopLevel } QHash<ResolvedProductPtr, Set<ResolvedProductPtr>> dependencyMap; - foreach (const ResolvedProductPtr &product, freshProducts) { + for (const ResolvedProductPtr &product : freshProducts) { if (!product->enabled) continue; QBS_CHECK(product->buildData); - Set<ResolvedProductPtr> dependents = findDependentProducts(product); - foreach (const ResolvedProductPtr &dependentProduct, dependents) { + const Set<ResolvedProductPtr> dependents = findDependentProducts(product); + for (const ResolvedProductPtr &dependentProduct : dependents) { if (!dependentProduct->enabled) continue; dependencyMap[dependentProduct] << product; @@ -444,7 +444,7 @@ void BuildDataResolver::connectRulesToDependencies(const ResolvedProductPtr &pro std::vector<RuleNode *> ruleNodes; for (RuleNode *ruleNode : filterByType<RuleNode>(product->buildData->nodes)) ruleNodes.push_back(ruleNode); - foreach (const ResolvedProductConstPtr &dep, dependencies) { + for (const ResolvedProductConstPtr &dep : dependencies) { if (!dep->buildData) continue; for (RuleNode *depRuleNode : filterByType<RuleNode>(dep->buildData->nodes)) { diff --git a/src/lib/qtprofilesetup/qtmoduleinfo.cpp b/src/lib/qtprofilesetup/qtmoduleinfo.cpp index 0258c7fc9..901ef55e9 100644 --- a/src/lib/qtprofilesetup/qtmoduleinfo.cpp +++ b/src/lib/qtprofilesetup/qtmoduleinfo.cpp @@ -43,6 +43,7 @@ #include <logging/translator.h> #include <tools/error.h> #include <tools/profile.h> +#include <tools/qttools.h> #include <tools/set.h> #include <QtCore/qdiriterator.h> @@ -71,7 +72,7 @@ static void replaceQtLibNamesWithFilePath(QList<QtModuleInfo> *modules, const Qt typedef QHash<QString, QString> NamePathHash; NamePathHash linkerNamesToFilePathsDebug; NamePathHash linkerNamesToFilePathsRelease; - foreach (const QtModuleInfo &m, *modules) { + for (const QtModuleInfo &m : qAsConst(*modules)) { linkerNamesToFilePathsDebug.insert(m.libNameForLinker(qtEnv, true), m.libFilePathDebug); linkerNamesToFilePathsRelease.insert(m.libNameForLinker(qtEnv, false), m.libFilePathRelease); @@ -184,7 +185,7 @@ void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, bool debugBuild, return; const QStringList modulesNeverBuiltAsDebug = QStringList() << QLatin1String("bootstrap") << QLatin1String("qmldevtools"); - foreach (const QString &m, modulesNeverBuiltAsDebug) { + for (const QString &m : modulesNeverBuiltAsDebug) { if (qbsName == m || qbsName == m + QLatin1String("-private")) return; } @@ -246,7 +247,7 @@ void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, bool debugBuild, return; } const QList<QByteArray> prlLines = prlFile.readAll().split('\n'); - foreach (const QByteArray &line, prlLines) { + for (const QByteArray &line : prlLines) { const QByteArray simplifiedLine = line.simplified(); const int equalsOffset = simplifiedLine.indexOf('='); if (equalsOffset == -1) @@ -530,7 +531,7 @@ static QList<QByteArray> getPriFileContentsRecursively(const Profile &profile, const QList<QByteArray> &includedContents = getPriFileContentsRecursively(profile, includedFilePath); int j = i; - foreach (const QByteArray &includedLine, includedContents) + for (const QByteArray &includedLine : includedContents) lines.insert(++j, includedLine); lines.removeAt(i--); } @@ -568,7 +569,8 @@ QList<QtModuleInfo> allQt5Modules(const Profile &profile, const QtEnvironment &q moduleInfo.qbsName.replace(QLatin1String("_private"), QLatin1String("-private")); bool hasV2 = false; bool hasModuleEntry = false; - foreach (const QByteArray &line, getPriFileContentsRecursively(profile, dit.filePath())) { + const auto lines = getPriFileContentsRecursively(profile, dit.filePath()); + for (const QByteArray &line : lines) { const QByteArray simplifiedLine = line.simplified(); const int firstEqualsOffset = simplifiedLine.indexOf('='); if (firstEqualsOffset == -1) @@ -588,7 +590,8 @@ QList<QtModuleInfo> allQt5Modules(const Profile &profile, const QtEnvironment &q QLatin1String("-private")); } } else if (key.endsWith(".module_config")) { - foreach (const QByteArray &elem, value.split(' ')) { + const auto elems = value.split(' '); + for (const QByteArray &elem : elems) { if (elem == "no_link") moduleInfo.hasLibrary = false; else if (elem == "staticlib") diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp index f7a501b90..837a54c71 100644 --- a/src/lib/qtprofilesetup/qtprofilesetup.cpp +++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp @@ -90,7 +90,7 @@ static QString defaultQpaPlugin(const Profile &profile, const QtModuleInfo &modu } const QList<QByteArray> lines = qConfigPri.readAll().split('\n'); const QByteArray magicString = "QT_DEFAULT_QPA_PLUGIN ="; - foreach (const QByteArray &line, lines) { + for (const QByteArray &line : lines) { const QByteArray simplifiedLine = line.simplified(); if (simplifiedLine.startsWith(magicString)) return QString::fromLatin1(simplifiedLine.mid(magicString.size()).trimmed()); @@ -301,7 +301,7 @@ static void createModules(Profile &profile, Settings *settings, &allFiles); copyTemplateFile(QLatin1String("QtPlugin.qbs"), qbsQtModuleBaseDir, profile, qtEnvironment, &allFiles); - foreach (const QtModuleInfo &module, modules) { + for (const QtModuleInfo &module : modules) { const QString qbsQtModuleDir = qbsQtModuleBaseDir + QLatin1Char('/') + module.qbsName; QString moduleTemplateFileName; if (module.qbsName == QLatin1String("core")) { @@ -393,7 +393,7 @@ static bool checkForStaticBuild(const QtEnvironment &qt) = libdir.entryList(QStringList(QLatin1String("*Core*")), QDir::Files); if (coreLibFiles.empty()) throw ErrorInfo(Internal::Tr::tr("Could not determine whether Qt is a static build.")); - foreach (const QString &fileName, coreLibFiles) { + for (const QString &fileName : coreLibFiles) { if (QLibrary::isLibrary(fileName)) return false; } diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index e357e251e..df69489cc 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -624,7 +624,8 @@ void TestApi::checkOutputs_data() qbs::GroupData findGroup(const qbs::ProductData &product, const QString &name) { - foreach (const qbs::GroupData &g, product.groups()) { + const auto groups = product.groups(); + for (const qbs::GroupData &g : groups) { if (g.name() == name) return g; } @@ -640,9 +641,11 @@ static qbs::Project::ProductSelection defaultProducts() static void printProjectData(const qbs::ProjectData &project) { - foreach (const qbs::ProductData &p, project.products()) { + const auto products = project.products(); + for (const qbs::ProductData &p : products) { qDebug(" Product '%s' at %s", qPrintable(p.name()), qPrintable(p.location().toString())); - foreach (const qbs::GroupData &g, p.groups()) { + const auto groups = p.groups(); + for (const qbs::GroupData &g : groups) { qDebug(" Group '%s' at %s", qPrintable(g.name()), qPrintable(g.location().toString())); qDebug(" Files: %s", qPrintable(g.allFilePaths().join(QLatin1String(", ")))); } @@ -1232,7 +1235,8 @@ void TestApi::generatedFilesList() const qbs::ProductData product = projectData.products().front(); QString uiFilePath; QVERIFY(product.generatedArtifacts().size() >= 6); - foreach (const qbs::ArtifactData &a, product.generatedArtifacts()) { + const auto artifacts = product.generatedArtifacts(); + for (const qbs::ArtifactData &a : artifacts) { QVERIFY(a.isGenerated()); QFileInfo fi(a.filePath()); using qbs::Internal::HostOsInfo; @@ -1245,8 +1249,10 @@ void TestApi::generatedFilesList() QVERIFY2(possibleFileNames.contains(fi.fileName()) || fi.fileName().endsWith(".plist"), qPrintable(fi.fileName())); } - foreach (const qbs::GroupData &group, product.groups()) { - foreach (const qbs::ArtifactData &a, group.sourceArtifacts()) { + const auto groups = product.groups(); + for (const qbs::GroupData &group : groups) { + const auto artifacts = group.sourceArtifacts(); + for (const qbs::ArtifactData &a : artifacts) { QVERIFY(!a.isGenerated()); QVERIFY(!a.isTargetArtifact()); if (a.fileTags().contains(QLatin1String("ui"))) { @@ -1354,9 +1360,9 @@ void TestApi::installableFiles() return p.name() == QLatin1String("installedApp"); }); QVERIFY(product.isValid()); - QList<qbs::ArtifactData> installableFiles = product.installableArtifacts(); - QCOMPARE(installableFiles.size(), 2); - foreach (const qbs::ArtifactData &f,installableFiles) { + const QList<qbs::ArtifactData> beforeInstallableFiles = product.installableArtifacts(); + QCOMPARE(beforeInstallableFiles.size(), 2); + for (const qbs::ArtifactData &f : beforeInstallableFiles) { if (!f.filePath().endsWith("main.cpp")) { QVERIFY(f.isExecutable()); QString expectedTargetFilePath = qbs::Internal::HostOsInfo @@ -1376,13 +1382,13 @@ void TestApi::installableFiles() projectData = project.projectData(); QCOMPARE(projectData.allProducts().size(), 1); product = projectData.allProducts().front(); - installableFiles = product.installableArtifacts(); - QCOMPARE(installableFiles.size(), 2); - foreach (const qbs::ArtifactData &f, installableFiles) + const QList<qbs::ArtifactData> afterInstallableFiles = product.installableArtifacts(); + QCOMPARE(afterInstallableFiles.size(), 2); + for (const qbs::ArtifactData &f : afterInstallableFiles) QVERIFY(!f.isExecutable()); - QCOMPARE(installableFiles.front().installData().localInstallFilePath(), + QCOMPARE(afterInstallableFiles.front().installData().localInstallFilePath(), QLatin1String("/tmp/dir/file1.txt")); - QCOMPARE(installableFiles.last().installData().localInstallFilePath(), + QCOMPARE(afterInstallableFiles.last().installData().localInstallFilePath(), QLatin1String("/tmp/dir/file2.txt")); } @@ -1396,7 +1402,7 @@ void TestApi::isRunnable() qbs::Project project = job->project(); const QList<qbs::ProductData> products = project.projectData().products(); QCOMPARE(products.size(), 2); - foreach (const qbs::ProductData &p, products) { + for (const qbs::ProductData &p : products) { QVERIFY2(p.name() == "app" || p.name() == "lib", qPrintable(p.name())); if (p.name() == "app") QVERIFY(p.isRunnable()); @@ -1695,7 +1701,7 @@ void TestApi::multiArch() QCOMPARE(products.size(), 3); QList<qbs::ProductData> hostProducts; QList<qbs::ProductData> targetProducts; - foreach (const qbs::ProductData &p, products) { + for (const qbs::ProductData &p : products) { QVERIFY2(p.profile() == hostProfile.name() || p.profile() == targetProfile.name(), qPrintable(p.profile())); if (p.profile() == hostProfile.name()) @@ -2171,7 +2177,7 @@ void TestApi::processResult() CheckParams(redirectStdout, "stdout.txt", "stdout", result.stdOut()), CheckParams(redirectStderr, "stderr.txt", "stderr", result.stdErr()) }); - foreach (const CheckParams &p, checkParams) { + for (const CheckParams &p : checkParams) { QFile f(relativeProductBuildDir("app-caller") + '/' + p.fileName); QCOMPARE(f.exists(), p.redirect); if (p.redirect) { @@ -2297,7 +2303,7 @@ void TestApi::referencedFileErrors() return; const QList<qbs::ProductData> products = project.projectData().allProducts(); QCOMPARE(products.size(), 5); - foreach (const qbs::ProductData &p, products) + for (const qbs::ProductData &p : products) QCOMPARE(p.isEnabled(), p.name() != "p5"); } @@ -2382,11 +2388,14 @@ void TestApi::relaxedModeRecovery() waitForFinished(job.get()); QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString())); if (m_logSink->warnings.size() != 4) { - foreach (const qbs::ErrorInfo &error, m_logSink->warnings) + const auto errors = m_logSink->warnings; + for (const qbs::ErrorInfo &error : errors) qDebug() << error.toString(); } QCOMPARE(m_logSink->warnings.size(), 4); - foreach (const qbs::ErrorInfo &error, m_logSink->warnings) { + + const auto errors = m_logSink->warnings; + for (const qbs::ErrorInfo &error : errors) { QVERIFY2(!error.toString().contains("ASSERT") && (error.toString().contains("Dependency 'blubb' not found") || error.toString().contains("Product 'p1' had errors and was disabled") @@ -2520,7 +2529,8 @@ void TestApi::restoredWarnings() QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString())); job.reset(nullptr); QCOMPARE(m_logSink->warnings.toSet().size(), 2); - foreach (const qbs::ErrorInfo &e, m_logSink->warnings) { + const auto beforeErrors = m_logSink->warnings; + for (const qbs::ErrorInfo &e : beforeErrors) { const QString msg = e.toString(); QVERIFY2(msg.contains("Superfluous version") || msg.contains("Property 'blubb' is not declared"), @@ -2545,7 +2555,8 @@ void TestApi::restoredWarnings() QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString())); job.reset(nullptr); QCOMPARE(m_logSink->warnings.toSet().size(), 3); // One more for the additional group - foreach (const qbs::ErrorInfo &e, m_logSink->warnings) { + const auto afterErrors = m_logSink->warnings; + for (const qbs::ErrorInfo &e : afterErrors) { const QString msg = e.toString(); QVERIFY2(msg.contains("Superfluous version") || msg.contains("Property 'blubb' is not declared") diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 06c974236..5e0fdd0d1 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -1291,7 +1291,7 @@ void TestBlackbox::clean() QVERIFY(!QFile(appExeFilePath).exists()); QVERIFY(!QFile(depObjectFilePath).exists()); QVERIFY(!QFile(depLibFilePath).exists()); - foreach (const QString &symLink, symlinks) + for (const QString &symLink : qAsConst(symlinks)) QVERIFY2(!symlinkExists(symLink), qPrintable(symLink)); // Remove all, with a forced re-resolve in between. @@ -1310,7 +1310,7 @@ void TestBlackbox::clean() QVERIFY(!QFile(appExeFilePath).exists()); QVERIFY(!QFile(depObjectFilePath).exists()); QVERIFY(!QFile(depLibFilePath).exists()); - foreach (const QString &symLink, symlinks) + for (const QString &symLink : qAsConst(symlinks)) QVERIFY2(!symlinkExists(symLink), qPrintable(symLink)); // Dry run. @@ -1322,7 +1322,7 @@ void TestBlackbox::clean() QVERIFY(regularFileExists(appExeFilePath)); QVERIFY(regularFileExists(depObjectFilePath)); QVERIFY(regularFileExists(depLibFilePath)); - foreach (const QString &symLink, symlinks) + for (const QString &symLink : qAsConst(symlinks)) QVERIFY2(symlinkExists(symLink), qPrintable(symLink)); // Product-wise, dependency only. @@ -1336,7 +1336,7 @@ void TestBlackbox::clean() QVERIFY(regularFileExists(appExeFilePath)); QVERIFY(!QFile(depObjectFilePath).exists()); QVERIFY(!QFile(depLibFilePath).exists()); - foreach (const QString &symLink, symlinks) + for (const QString &symLink : qAsConst(symlinks)) QVERIFY2(!symlinkExists(symLink), qPrintable(symLink)); // Product-wise, dependent product only. @@ -1350,7 +1350,7 @@ void TestBlackbox::clean() QVERIFY(!QFile(appExeFilePath).exists()); QVERIFY(regularFileExists(depObjectFilePath)); QVERIFY(regularFileExists(depLibFilePath)); - foreach (const QString &symLink, symlinks) + for (const QString &symLink : qAsConst(symlinks)) QVERIFY2(symlinkExists(symLink), qPrintable(symLink)); } @@ -3126,7 +3126,7 @@ void TestBlackbox::systemRunPaths() const QByteArray output = ldd.readAllStandardOutput(); const QList<QByteArray> outputLines = output.split('\n'); QByteArray libLine; - foreach (const auto &line, outputLines) { + for (const auto &line : outputLines) { if (line.contains("theLib")) { libLine = line; break; @@ -3263,13 +3263,13 @@ void TestBlackbox::installPackage() QVERIFY2(tarList.waitForFinished(), qPrintable(tarList.errorString())); const QList<QByteArray> outputLines = tarList.readAllStandardOutput().split('\n'); QList<QByteArray> cleanOutputLines; - foreach (const QByteArray &line, outputLines) { + for (const QByteArray &line : outputLines) { const QByteArray trimmedLine = line.trimmed(); if (!trimmedLine.isEmpty()) cleanOutputLines.push_back(trimmedLine); } QCOMPARE(cleanOutputLines.size(), 3); - foreach (const QByteArray &line, cleanOutputLines) { + for (const QByteArray &line : qAsConst(cleanOutputLines)) { QVERIFY2(line.contains("public_tool") || line.contains("mylib") || line.contains("lib.h"), line.constData()); } @@ -3324,7 +3324,7 @@ void TestBlackbox::invalidLibraryNames() QbsRunParameters params(QStringList("project.valueIndex:" + index)); params.expectFailure = !success; QCOMPARE(runQbs(params) == 0, success); - foreach (const QString &diag, diagnostics) + for (const QString &diag : qAsConst(diagnostics)) QVERIFY2(m_qbsStderr.contains(diag.toLocal8Bit()), m_qbsStderr.constData()); } @@ -4271,7 +4271,7 @@ void TestBlackbox::productDependenciesByType() << QDir::currentPath() + '/' + relativeExecutableFilePath("app1") << QDir::currentPath() + '/' + relativeExecutableFilePath("app2") << QDir::currentPath() + '/' + relativeExecutableFilePath("app3"); - foreach (const QByteArray &line, appList) { + for (const QByteArray &line : appList) { const QString cleanLine = QString::fromLocal8Bit(line.trimmed()); QVERIFY2(apps.removeOne(cleanLine), qPrintable(cleanLine)); } @@ -4674,7 +4674,7 @@ void TestBlackbox::nsis() QStringList paths = QProcessEnvironment::systemEnvironment().value("PATH") .split(HostOsInfo::pathListSeparator(), QString::SkipEmptyParts); - foreach (const QString &key, regKeys) { + for (const QString &key : qAsConst(regKeys)) { QSettings settings(key, QSettings::NativeFormat); QString str = settings.value(QLatin1String(".")).toString(); if (!str.isEmpty()) @@ -4682,7 +4682,7 @@ void TestBlackbox::nsis() } bool haveMakeNsis = false; - foreach (const QString &path, paths) { + for (const QString &path : qAsConst(paths)) { if (regularFileExists(QDir::fromNativeSeparators(path) + HostOsInfo::appendExecutableSuffix(QLatin1String("/makensis")))) { haveMakeNsis = true; @@ -4811,9 +4811,9 @@ static bool haveWiX(const Profile &profile) QStringList paths = QProcessEnvironment::systemEnvironment().value("PATH") .split(HostOsInfo::pathListSeparator(), QString::SkipEmptyParts); - foreach (const QString &key, regKeys) { + for (const QString &key : qAsConst(regKeys)) { const QStringList versions = QSettings(key, QSettings::NativeFormat).childGroups(); - foreach (const QString &version, versions) { + for (const QString &version : versions) { QSettings settings(key + version, QSettings::NativeFormat); QString str = settings.value(QLatin1String("InstallRoot")).toString(); if (!str.isEmpty()) @@ -4821,7 +4821,7 @@ static bool haveWiX(const Profile &profile) } } - foreach (const QString &path, paths) { + for (const QString &path : qAsConst(paths)) { if (regularFileExists(QDir::fromNativeSeparators(path) + HostOsInfo::appendExecutableSuffix(QLatin1String("/candle"))) && regularFileExists(QDir::fromNativeSeparators(path) + diff --git a/tests/auto/blackbox/tst_blackboxbase.cpp b/tests/auto/blackbox/tst_blackboxbase.cpp index 6993c7958..6db5f66e0 100644 --- a/tests/auto/blackbox/tst_blackboxbase.cpp +++ b/tests/auto/blackbox/tst_blackboxbase.cpp @@ -195,11 +195,11 @@ QString TestBlackboxBase::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) { QFileInfo fi(fileName); if (fi.isAbsolute()) return fi.exists() ? fileName : QString(); - foreach (const QString &ppath, path) { + for (const QString &ppath : path) { const QString fullPath = HostOsInfo::appendExecutableSuffix(ppath + QLatin1Char('/') + fileName); if (QFileInfo(fullPath).exists()) diff --git a/tests/auto/blackbox/tst_blackboxjava.cpp b/tests/auto/blackbox/tst_blackboxjava.cpp index 964bbe036..3acb6bcef 100644 --- a/tests/auto/blackbox/tst_blackboxjava.cpp +++ b/tests/auto/blackbox/tst_blackboxjava.cpp @@ -31,6 +31,7 @@ #include "../shared.h" #include <tools/hostosinfo.h> #include <tools/profile.h> +#include <tools/qttools.h> #include <QtCore/qjsondocument.h> #include <QtCore/qtemporarydir.h> @@ -84,7 +85,7 @@ void TestBlackboxJava::java() QVERIFY2(regularFileExists(classFile), qPrintable(classFile)); } - foreach (const QString &classFile, classFiles) { + for (const QString &classFile : classFiles) { const QString filePath = relativeProductBuildDir("jar_file") + "/classes/" + classFile + ".class"; QVERIFY2(regularFileExists(filePath), qPrintable(filePath)); @@ -94,7 +95,7 @@ void TestBlackboxJava::java() // Now check whether we correctly predicted the class file output paths. QCOMPARE(runQbs(QbsRunParameters("clean")), 0); - foreach (const QString &classFile, classFiles1) { + for (const QString &classFile : qAsConst(classFiles1)) { QVERIFY2(!regularFileExists(classFile), qPrintable(classFile)); } diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp index da3d3d69d..18bcc4f2b 100644 --- a/tests/auto/language/tst_language.cpp +++ b/tests/auto/language/tst_language.cpp @@ -103,14 +103,16 @@ TestLanguage::~TestLanguage() QHash<QString, ResolvedProductPtr> TestLanguage::productsFromProject(ResolvedProjectPtr project) { QHash<QString, ResolvedProductPtr> result; - foreach (const ResolvedProductPtr &product, project->allProducts()) + const auto products = project->allProducts(); + for (const ResolvedProductPtr &product : products) result.insert(product->name, product); return result; } ResolvedModuleConstPtr TestLanguage::findModuleByName(ResolvedProductPtr product, const QString &name) { - foreach (const ResolvedModuleConstPtr &module, product->modules) + const auto modules = product->modules; + for (const ResolvedModuleConstPtr &module : modules) if (module->name == name) return module; return ResolvedModuleConstPtr(); @@ -523,7 +525,7 @@ void TestLanguage::dependencyOnAllProfiles() const ResolvedProductConstPtr mainProduct = productsFromProject(project).value("main"); QVERIFY(!!mainProduct); QCOMPARE(mainProduct->dependencies.size(), 2); - foreach (const ResolvedProductConstPtr &p, mainProduct->dependencies) { + for (const ResolvedProductConstPtr &p : mainProduct->dependencies) { QCOMPARE(p->name, QLatin1String("dep")); QVERIFY(p->profile == "p1" || p->profile == "p2"); } @@ -1456,7 +1458,7 @@ void TestLanguage::modulePropertiesInGroups() GroupConstPtr g2; GroupConstPtr g21; GroupConstPtr g211; - foreach (const GroupConstPtr &g, product->groups) { + for (const GroupConstPtr &g : product->groups) { if (g->name == "g1") g1= g; else if (g->name == "g2") @@ -1630,7 +1632,7 @@ void TestLanguage::modulePropertiesInGroups() QVERIFY(!!product); g1.reset(); g11.reset(); - foreach (const GroupConstPtr &g, product->groups) { + for (const GroupConstPtr &g : qAsConst(product->groups)) { if (g->name == "g1") g1= g; else if (g->name == "g1.1") @@ -1782,11 +1784,11 @@ void TestLanguage::modules() QFETCH(QString, expectedProductProperty); QHash<QString, ResolvedProductPtr> products = productsFromProject(project); const QString productName = QString::fromLocal8Bit(QTest::currentDataTag()); - ResolvedProductPtr product = products.value(productName); + const ResolvedProductPtr product = products.value(productName); QVERIFY(!!product); QCOMPARE(product->name, productName); QStringList modulesInProduct; - foreach (ResolvedModuleConstPtr m, product->modules) + for (ResolvedModuleConstPtr m : product->modules) modulesInProduct += m->name; modulesInProduct.sort(); expectedModulesInProduct.sort(); @@ -2723,7 +2725,7 @@ void TestLanguage::wildcards() } // create files - foreach (QString filePath, filesToCreate) { + for (QString filePath : qAsConst(filesToCreate)) { filePath.prepend(m_wildcardsTestDirPath + '/'); QFileInfo fi(filePath); if (!QDir(fi.path()).exists()) @@ -2745,7 +2747,7 @@ void TestLanguage::wildcards() GroupPtr group; if (useGroup) { QCOMPARE(product->groups.size(), HostOsInfo::isMacosHost() ? 3 : 2); - foreach (const GroupPtr &rg, product->groups) { + for (const GroupPtr &rg : qAsConst(product->groups)) { if (rg->name == groupName) { group = rg; break; @@ -2759,7 +2761,7 @@ void TestLanguage::wildcards() QCOMPARE(group->files.size(), 0); QVERIFY(!!group->wildcards); QStringList actualFilePaths; - foreach (const SourceArtifactConstPtr &artifact, group->wildcards->files) { + for (const SourceArtifactConstPtr &artifact : qAsConst(group->wildcards->files)) { QString str = artifact->absoluteFilePath; int idx = str.indexOf(m_wildcardsTestDirPath); if (idx != -1) diff --git a/tests/auto/tools/tst_tools.cpp b/tests/auto/tools/tst_tools.cpp index f616aa2f0..9707cb4ff 100644 --- a/tests/auto/tools/tst_tools.cpp +++ b/tests/auto/tools/tst_tools.cpp @@ -343,7 +343,7 @@ QString TestTools::setupSettingsDir1() << Version(thisVersion.majorVersion(), thisVersion.minorVersion(), thisVersion.patchLevel() + 1) << Version(99, 99, 99); - foreach (const Version &v, versions) { + for (const Version &v : versions) { const QString settingsDir = baseDir->path() + "/qbs/" + v.toString(); QSettings s(settingsDir + "/qbs.conf", HostOsInfo::isWindowsHost() ? QSettings::IniFormat : QSettings::NativeFormat); diff --git a/tests/benchmarker/benchmarker.cpp b/tests/benchmarker/benchmarker.cpp index 5c12233ac..050eb97a7 100644 --- a/tests/benchmarker/benchmarker.cpp +++ b/tests/benchmarker/benchmarker.cpp @@ -79,13 +79,15 @@ void Benchmarker::benchmark() QFuture<void> oldFuture = QtConcurrent::run(&oldDataRetriever, &ValgrindRunner::run); QFuture<void> newFuture = QtConcurrent::run(&newDataRetriever, &ValgrindRunner::run); oldFuture.waitForFinished(); - foreach (const ValgrindResult &valgrindResult, oldDataRetriever.results()) { + const auto oldValgrindResults = oldDataRetriever.results(); + for (const ValgrindResult &valgrindResult : oldValgrindResults) { BenchmarkResult &benchmarkResult = m_results[valgrindResult.activity]; benchmarkResult.oldInstructionCount = valgrindResult.instructionCount; benchmarkResult.oldPeakMemoryUsage = valgrindResult.peakMemoryUsage; } newFuture.waitForFinished(); - foreach (const ValgrindResult &valgrindResult, newDataRetriever.results()) { + const auto newValgrindResults = newDataRetriever.results(); + for (const ValgrindResult &valgrindResult : newValgrindResults) { BenchmarkResult &benchmarkResult = m_results[valgrindResult.activity]; benchmarkResult.newInstructionCount = valgrindResult.instructionCount; benchmarkResult.newPeakMemoryUsage = valgrindResult.peakMemoryUsage; diff --git a/tests/benchmarker/commandlineparser.cpp b/tests/benchmarker/commandlineparser.cpp index 2c214c5e0..97b127d94 100644 --- a/tests/benchmarker/commandlineparser.cpp +++ b/tests/benchmarker/commandlineparser.cpp @@ -74,9 +74,9 @@ void CommandLineParser::parse() "value in per cent"); parser.addOption(thresholdOption); parser.process(*QCoreApplication::instance()); - QList<QCommandLineOption> mandatoryOptions = QList<QCommandLineOption>() + const QList<QCommandLineOption> mandatoryOptions = QList<QCommandLineOption>() << oldCommitOption << newCommitOption << testProjectOption << qbsRepoOption; - foreach (const QCommandLineOption &o, mandatoryOptions) { + for (const QCommandLineOption &o : mandatoryOptions) { if (!parser.isSet(o)) throwException(o.names().front(), parser.helpText()); if (parser.value(o).isEmpty()) @@ -88,7 +88,7 @@ void CommandLineParser::parse() m_qbsRepoDirPath = parser.value(qbsRepoOption); const QStringList activitiesList = parser.value(activitiesOption).split(','); m_activities = 0; - foreach (const QString &activityString, activitiesList) { + for (const QString &activityString : activitiesList) { if (activityString == allActivities()) { m_activities = ActivityResolving | ActivityRuleExecution | ActivityNullBuild; break; diff --git a/tests/fuzzy-test/fuzzytester.cpp b/tests/fuzzy-test/fuzzytester.cpp index d01c3c3f2..09a5f25f3 100644 --- a/tests/fuzzy-test/fuzzytester.cpp +++ b/tests/fuzzy-test/fuzzytester.cpp @@ -83,7 +83,8 @@ void FuzzyTester::runTest(const QString &profile, const QString &startCommit, bool timerHasExpired = false; while (std::next_permutation(allCommits.begin(), allCommits.end()) && !timerHasExpired) { qDebug("Testing permutation %llu...", ++run); - foreach (const QString ¤tCommit, allCommits) { + const auto &allCommitsImmutable = allCommits; + for (const QString ¤tCommit : allCommitsImmutable) { if (timer.isValid() && timer.hasExpired(maxDurationInMillis)) { timerHasExpired = true; break; @@ -207,7 +208,7 @@ bool FuzzyTester::runQbs(const QString &buildDir, const QString &command, QStrin << buildIncrementalActivity() << buildFromScratchActivity(); const QString oldCommit = m_commitsWithLogFiles.front(); m_commitsWithLogFiles.pop(); - foreach (const QString &a, allActivities) + for (const QString &a : allActivities) QFile::remove(logFilePath(oldCommit, a)); } qbs.setStandardErrorFile(logFilePath(m_currentCommit, m_currentActivity)); |