From f7097cef1946d64f4cba50cb6973e4bfba2ea136 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Mon, 30 May 2022 12:08:21 +0200 Subject: [PATCH] CPlusPlus: Remove foreach / Q_FOREACH usage Task-number: QTCREATORBUG-27464 Change-Id: I62e27bca141a529ac220211f8b31e78be0f7e855 Reviewed-by: hjk --- src/libs/cplusplus/LookupContext.cpp | 4 +- src/libs/cplusplus/LookupContext.h | 4 +- .../cplusplus-ast2png/cplusplus-ast2png.cpp | 14 +++--- .../cplusplus-frontend/cplusplus-frontend.cpp | 2 +- .../cplusplus-mkvisitor.cpp | 45 ++++++++++--------- .../cplusplus-update-frontend.cpp | 4 +- .../qtcreatorcrashhandler/crashhandler.cpp | 6 +-- src/tools/qtpromaker/main.cpp | 11 ++--- 8 files changed, 47 insertions(+), 43 deletions(-) diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 2ca935144f0..3aa39ea8678 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -629,7 +629,7 @@ ClassOrNamespace *ClassOrNamespace::parent() const return _parent; } -QList ClassOrNamespace::usings() const +const QList ClassOrNamespace::usings() const { const_cast(this)->flush(); return _usings; @@ -641,7 +641,7 @@ QList ClassOrNamespace::unscopedEnums() const return _enums; } -QList ClassOrNamespace::symbols() const +const QList ClassOrNamespace::symbols() const { const_cast(this)->flush(); return _symbols; diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h index ce52feec426..cb6fbb3bfa8 100644 --- a/src/libs/cplusplus/LookupContext.h +++ b/src/libs/cplusplus/LookupContext.h @@ -70,9 +70,9 @@ public: ClassOrNamespace *instantiationOrigin() const; ClassOrNamespace *parent() const; - QList usings() const; + const QList usings() const; QList unscopedEnums() const; - QList symbols() const; + const QList symbols() const; ClassOrNamespace *globalNamespace() const; diff --git a/src/tools/cplusplus-ast2png/cplusplus-ast2png.cpp b/src/tools/cplusplus-ast2png/cplusplus-ast2png.cpp index 29a2111880a..ecf281ac908 100644 --- a/src/tools/cplusplus-ast2png/cplusplus-ast2png.cpp +++ b/src/tools/cplusplus-ast2png/cplusplus-ast2png.cpp @@ -97,7 +97,7 @@ public: typedef QPair Pair; - foreach (const Pair &conn, _connections) + for (const Pair &conn : qAsConst(_connections)) out << conn.first.constData() << " -> " << conn.second.constData() << std::endl; alignTerminals(); @@ -113,7 +113,7 @@ public: protected: void alignTerminals() { out<<"{ rank=same;" << std::endl; - foreach (const QByteArray &terminalShape, _terminalShapes) { + for (const QByteArray &terminalShape : qAsConst(_terminalShapes)) { out << " " << std::string(terminalShape.constData(), terminalShape.size()).c_str() << ";" << std::endl; } out<<"}"< parseModes, QByteArray *errors, + const QList parseModes, QByteArray *errors, bool verbose = false) { - foreach (const Document::ParseMode parseMode, parseModes) { + for (const Document::ParseMode parseMode : parseModes) { ErrorHandler *errorHandler = new ErrorHandler(parseMode, errors); // Deleted by ~Document. if (verbose) std::cout << "Parsing as " << qPrintable(parseModeToString(parseMode)) << "..."; @@ -466,7 +466,7 @@ static Document::Ptr parse(const QString &fileName, const QByteArray &source, /// Convenience function static Document::Ptr parse(const QString &fileName, const QByteArray &source, - Document::ParseMode parseMode, QByteArray *errors, + const Document::ParseMode parseMode, QByteArray *errors, bool verbose = false) { QList parseModes = QList() << parseMode; @@ -576,7 +576,7 @@ int main(int argc, char *argv[]) // Process files const QStringList files = args; - foreach (const QString &fileName, files) { + for (const QString &fileName : files) { if (! QFile::exists(fileName)) { std::cerr << "Error: File \"" << qPrintable(fileName) << "\" does not exist." << std::endl; @@ -638,7 +638,7 @@ int main(int argc, char *argv[]) QString(fileName + QLatin1String(".ast.png")))); inputOutputFiles.append(qMakePair(QString(fileName + QLatin1String(".symbols.dot")), QString(fileName + QLatin1String(".symbols.png")))); - foreach (const Pair &pair, inputOutputFiles) { + for (const Pair &pair : qAsConst(inputOutputFiles)) { createImageFromDot(pair.first, pair.second, optionVerbose); std::cout << qPrintable(QDir::toNativeSeparators(pair.second)) << std::endl; } diff --git a/src/tools/cplusplus-frontend/cplusplus-frontend.cpp b/src/tools/cplusplus-frontend/cplusplus-frontend.cpp index 3701a1759c0..5f9bef2cff8 100644 --- a/src/tools/cplusplus-frontend/cplusplus-frontend.cpp +++ b/src/tools/cplusplus-frontend/cplusplus-frontend.cpp @@ -80,7 +80,7 @@ int main(int argc, char *argv[]) // Process files const QStringList files = args; - foreach (const QString &fileName, files) { + for (const QString &fileName : files) { // Run preprocessor const QString fileNamePreprocessed = fileName + QLatin1String(".preprocessed"); CplusplusToolsUtils::SystemPreprocessor preprocessor(optionVerbose); diff --git a/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp b/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp index d834a62db0f..fe3fadd4f7d 100644 --- a/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp +++ b/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp @@ -65,7 +65,7 @@ class MkVisitor: protected SymbolVisitor bool isMiscNode(ClassOrNamespace *b) const { - foreach (ClassOrNamespace *u, b->usings()) { + for (const ClassOrNamespace *u : b->usings()) { if (oo(u->symbols().first()->name()) == QLatin1String("AST")) return true; } @@ -126,11 +126,11 @@ public: << " Semantic(TranslationUnit *unit): ASTVisitor(unit) { translationUnit(unit->ast()->asTranslationUnit()); }" << std::endl << std::endl; - foreach (ClassOrNamespace *b, interfaces) { + for (ClassOrNamespace *b : qAsConst(interfaces)) { Q_ASSERT(! b->symbols().isEmpty()); Class *klass = 0; - foreach (Symbol *s, b->symbols()) + for (Symbol *s : b->symbols()) if ((klass = s->asClass()) != 0) break; @@ -158,9 +158,9 @@ public: << std::endl; QHash > implements; - foreach (ClassOrNamespace *b, nodes) { + for (ClassOrNamespace *b : qAsConst(nodes)) { ClassOrNamespace *iface = 0; - foreach (ClassOrNamespace *u, b->usings()) { + for (ClassOrNamespace *u : b->usings()) { if (interfaces.contains(u)) { iface = u; break; @@ -170,13 +170,14 @@ public: implements[iface].append(b); } - foreach (ClassOrNamespace *iface, interfaces) { - foreach (ClassOrNamespace *b, implements.value(iface)) { + for (ClassOrNamespace *iface : qAsConst(interfaces)) { + const QList values = implements.value(iface); + for (ClassOrNamespace *b : values) { if (! isMiscNode(b)) continue; Class *klass = 0; - foreach (Symbol *s, b->symbols()) + for (Symbol *s : b->symbols()) if ((klass = s->asClass()) != 0) break; @@ -190,11 +191,12 @@ public: std::cout << std::endl; - foreach (ClassOrNamespace *iface, interfaces) { + for (ClassOrNamespace *iface : qAsConst(interfaces)) { std::cout << " // " << qPrintable(oo(iface->symbols().first()->name())) << std::endl; - foreach (ClassOrNamespace *b, implements.value(iface)) { + const QList values = implements.value(iface); + for (ClassOrNamespace *b : values) { Class *klass = 0; - foreach (Symbol *s, b->symbols()) + for (Symbol *s : b->symbols()) if ((klass = s->asClass()) != 0) break; @@ -207,11 +209,11 @@ public: } std::cout << "private:" << std::endl; - foreach (ClassOrNamespace *b, interfaces) { + for (ClassOrNamespace *b : qAsConst(interfaces)) { Q_ASSERT(! b->symbols().isEmpty()); Class *klass = 0; - foreach (Symbol *s, b->symbols()) + for (Symbol *s : b->symbols()) if ((klass = s->asClass()) != 0) break; @@ -240,11 +242,11 @@ public: // implementation - foreach (ClassOrNamespace *b, interfaces) { + for (ClassOrNamespace *b : qAsConst(interfaces)) { Q_ASSERT(! b->symbols().isEmpty()); Class *klass = 0; - foreach (Symbol *s, b->symbols()) + for (Symbol *s : b->symbols()) if ((klass = s->asClass()) != 0) break; @@ -275,11 +277,12 @@ public: << std::endl; } - foreach (ClassOrNamespace *iface, interfaces) { + for (ClassOrNamespace *iface : qAsConst(interfaces)) { std::cout << "// " << qPrintable(oo(iface->symbols().first()->name())) << std::endl; - foreach (ClassOrNamespace *b, implements.value(iface)) { + const QList values = implements.value(iface); + for (ClassOrNamespace *b : values) { Class *klass = 0; - foreach (Symbol *s, b->symbols()) + for (Symbol *s : b->symbols()) if ((klass = s->asClass()) != 0) break; @@ -383,8 +386,8 @@ protected: QList baseClasses(ClassOrNamespace *b) { QList usings = b->usings(); - foreach (ClassOrNamespace *u, usings) - usings += baseClasses(u); + for (int length = usings.size(), i = 0; i < length; ++i) + usings += baseClasses(usings[i]); return usings; } @@ -400,7 +403,7 @@ protected: if (Symbol *s = klass->find(accept0)) { if (Function *meth = s->type()->asFunctionType()) { if (! meth->isPureVirtual()) { - foreach (ClassOrNamespace *u, b->usings()) { + for (const ClassOrNamespace *u : b->usings()) { if (interfaces.contains(u)) { // qDebug() << oo(klass->name()) << "implements" << oo(u->symbols().first()->name()); } else { diff --git a/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp b/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp index df796046822..5fe66c57c1a 100644 --- a/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp +++ b/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp @@ -1294,7 +1294,7 @@ void generateASTMatcher_H(const Snapshot &, const QDir &cplusplusDir, " virtual ~ASTMatcher();\n" "\n"; - foreach (const QByteArray &klass, classes) { + for (const QByteArray &klass : classes) { out << " virtual bool match(" << klass << " *node, " << klass << " *pattern);\n"; } @@ -1340,7 +1340,7 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir, co Overview oo; QStringList castMethods; - foreach (ClassSpecifierAST *classAST, astNodes.deriveds) { + for (ClassSpecifierAST *classAST : qAsConst(astNodes.deriveds)) { cursors[classAST] = removeCastMethods(classAST); const QString className = oo(classAST->symbol->name()); const QString methodName = QLatin1String("as") + className.mid(0, className.length() - 3); diff --git a/src/tools/qtcreatorcrashhandler/crashhandler.cpp b/src/tools/qtcreatorcrashhandler/crashhandler.cpp index 621361499eb..fa0f4009266 100644 --- a/src/tools/qtcreatorcrashhandler/crashhandler.cpp +++ b/src/tools/qtcreatorcrashhandler/crashhandler.cpp @@ -70,7 +70,7 @@ class CExecList : public QVector public: CExecList(const QStringList &list) { - foreach (const QString &item, list) + for (const QString &item : list) append(qstrdup(item.toLatin1().data())); append(0); } @@ -195,7 +195,7 @@ bool CrashHandler::collectRestartAppData() return false; } commandLine.removeLast(); - foreach (const QByteArray &item, commandLine) + for (const QByteArray &item : qAsConst(commandLine)) d->restartAppCommandLine.append(QString::fromLatin1(item)); // Get environment. @@ -209,7 +209,7 @@ bool CrashHandler::collectRestartAppData() } if (environment.last().isEmpty()) environment.removeLast(); - foreach (const QByteArray &item, environment) + for (const QByteArray &item : qAsConst(environment)) d->restartAppEnvironment.append(QString::fromLatin1(item)); return true; diff --git a/src/tools/qtpromaker/main.cpp b/src/tools/qtpromaker/main.cpp index 60aba5476e9..4fddd6bdd48 100644 --- a/src/tools/qtpromaker/main.cpp +++ b/src/tools/qtpromaker/main.cpp @@ -159,7 +159,7 @@ private: void Project::setPaths(const QStringList &paths) { - foreach (const QString &path, paths) + for (const QString &path : paths) m_items.append(path); } @@ -220,7 +220,8 @@ void Project::handleBinary(const QString &item) // "}] (gdb) int first = input.indexOf(QLatin1Char('{')); input = input.mid(first, input.lastIndexOf(QLatin1Char('}')) - first); - foreach (QString item, input.split(QLatin1String("},{"))) { + const QStringList items = input.split(QLatin1String("},{")); + for (QString item : items) { //qDebug() << "ITEM: " << item; int full = item.indexOf(QLatin1String(",fullname=\"")); if (full != -1) @@ -299,17 +300,17 @@ void Project::writeProFile() if (m_subdirs.isEmpty()) { ts << "TEMPLATE = app\n"; ts << "TARGET = " << QFileInfo(m_outputFileName).baseName() << "\n"; - foreach (const FileClass &fc, m_fileClasses) + for (const FileClass &fc : qAsConst(m_fileClasses)) fc.writeProBlock(ts); ts << "\nPATHS *="; - foreach (const QDir &dir, m_items) + for (const QDir dir : qAsConst(m_items)) ts << " \\\n " << dir.path(); ts << "\n\nDEPENDPATH *= $$PATHS\n"; ts << "\nINCLUDEPATH *= $$PATHS\n"; } else { ts << "TEMPLATE = subdirs\n"; ts << "SUBDIRS = "; - foreach (const QString &subdir, m_subdirs) + for (const QString &subdir : qAsConst(m_subdirs)) ts << " \\\n " << subdir; ts << "\n"; }