summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Wicking <paul.wicking@qt.io>2019-08-11 20:11:48 +0200
committerPaul Wicking <paul.wicking@qt.io>2019-09-28 07:47:54 +0200
commitbe8ffa4e910a3413bd3df907d8e15514691a0342 (patch)
tree2be24fb7cadbbe17fb8a2a10fdbddd8ff113b3bb
parent72a5776421948ab82bcfa4d744a027cadcd7267e (diff)
QDoc: Use range-based for instead of foreach
This change replaces the use of foreach with range-based for throughout QDoc. It also ensures that the loop body doesn't modify the container being iterated over, by: - Making a const copy when the container is a member variable or the result of an expression, and iterating over that copy. This is the preferred approach. - Using qAsConst() when the container is a (static) member variable or local to the method and not const. The latter is typical where the collection is sorted immediately before the loop. In two cases (doc.cpp), replaced Q_FOREACH + delete with qDeleteAll. In two cases (cppcodeparser.cpp), the range declaration is replaced within the loop statement. These rewrites express the behavior clearer than the original code. In two cases (codeparser.cpp), use a range-based for instead of a while loop where the condition is an iterator, for more expressive code. Finally, use the auto keyword where appropriate and improve a few variable names. QDoc warning count and generated output is unchanged after this refactoring. Change-Id: I64f02d24dca373a3a41402d535382e2c526bb55e Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
-rw-r--r--src/qdoc/atom.cpp14
-rw-r--r--src/qdoc/codemarker.cpp9
-rw-r--r--src/qdoc/codeparser.cpp22
-rw-r--r--src/qdoc/cppcodemarker.cpp7
-rw-r--r--src/qdoc/cppcodeparser.cpp10
-rw-r--r--src/qdoc/doc.cpp8
-rw-r--r--src/qdoc/generator.cpp27
-rw-r--r--src/qdoc/helpprojectwriter.cpp49
-rw-r--r--src/qdoc/htmlgenerator.cpp74
-rw-r--r--src/qdoc/main.cpp4
-rw-r--r--src/qdoc/node.cpp186
-rw-r--r--src/qdoc/parameters.cpp6
-rw-r--r--src/qdoc/qdoc.pro2
-rw-r--r--src/qdoc/qdocdatabase.cpp123
-rw-r--r--src/qdoc/qdocdatabase.h46
-rw-r--r--src/qdoc/qdocindexfiles.cpp65
-rw-r--r--src/qdoc/qdoctagfiles.cpp10
-rw-r--r--src/qdoc/qmlcodeparser.cpp3
-rw-r--r--src/qdoc/qmlmarkupvisitor.cpp2
-rw-r--r--src/qdoc/tokenizer.cpp13
-rw-r--r--src/qdoc/tree.cpp53
21 files changed, 381 insertions, 352 deletions
diff --git a/src/qdoc/atom.cpp b/src/qdoc/atom.cpp
index a739b0b69..dff90b299 100644
--- a/src/qdoc/atom.cpp
+++ b/src/qdoc/atom.cpp
@@ -399,28 +399,28 @@ void LinkAtom::resolveSquareBracketParams()
{
if (resolved_)
return;
- QStringList params = squareBracketParams_.toLower().split(QLatin1Char(' '));
- foreach (const QString &p, params) {
+ const QStringList params = squareBracketParams_.toLower().split(QLatin1Char(' '));
+ for (const auto &param : params) {
if (!domain_) {
- domain_ = QDocDatabase::qdocDB()->findTree(p);
+ domain_ = QDocDatabase::qdocDB()->findTree(param);
if (domain_) {
continue;
}
}
if (goal_ == Node::NoType) {
- goal_ = Node::goal(p);
+ goal_ = Node::goal(param);
if (goal_ != Node::NoType)
continue;
}
- if (p == "qml") {
+ if (param == "qml") {
genus_ = Node::QML;
continue;
}
- if (p == "cpp") {
+ if (param == "cpp") {
genus_ = Node::CPP;
continue;
}
- if (p == "doc") {
+ if (param == "doc") {
genus_ = Node::DOC;
continue;
}
diff --git a/src/qdoc/codemarker.cpp b/src/qdoc/codemarker.cpp
index 2579c94e1..7c8843c65 100644
--- a/src/qdoc/codemarker.cpp
+++ b/src/qdoc/codemarker.cpp
@@ -369,10 +369,11 @@ QStringList CodeMarker::macRefsForNode(Node *node)
{
QStringList stringList;
stringList << encode(result + QLatin1String("tag/") + macName(node));
- foreach (const QString &enumName, node->doc().enumItemNames()) {
+ const auto enumItemNames = node->doc().enumItemNames();
+ for (const auto &name : enumItemNames) {
// ### Write a plainEnumValue() and use it here
stringList << encode(result + QLatin1String("econst/") +
- macName(node->parent(), enumName));
+ macName(node->parent(), name));
}
return stringList;
}
@@ -412,9 +413,9 @@ QStringList CodeMarker::macRefsForNode(Node *node)
break;
case Node::Property:
{
- NodeList list = static_cast<const PropertyNode *>(node)->functions();
+ const NodeList list = static_cast<const PropertyNode *>(node)->functions();
QStringList stringList;
- foreach (Node *node, list) {
+ for (auto *node : list) {
stringList += macRefsForNode(node);
}
return stringList;
diff --git a/src/qdoc/codeparser.cpp b/src/qdoc/codeparser.cpp
index 3453f0b18..99bd5b1c8 100644
--- a/src/qdoc/codeparser.cpp
+++ b/src/qdoc/codeparser.cpp
@@ -124,16 +124,13 @@ CodeParser *CodeParser::parserForHeaderFile(const QString &filePath)
{
QString fileName = QFileInfo(filePath).fileName();
- QList<CodeParser *>::ConstIterator p = parsers.constBegin();
- while (p != parsers.constEnd()) {
-
- QStringList headerPatterns = (*p)->headerFileNameFilter();
- foreach (const QString &pattern, headerPatterns) {
+ for (const auto &parser : qAsConst(parsers)) {
+ const QStringList headerPatterns = parser->headerFileNameFilter();
+ for (const auto &pattern : headerPatterns) {
QRegExp re(pattern, Qt::CaseInsensitive, QRegExp::Wildcard);
if (re.exactMatch(fileName))
- return *p;
+ return parser;
}
- ++p;
}
return nullptr;
}
@@ -142,16 +139,13 @@ CodeParser *CodeParser::parserForSourceFile(const QString &filePath)
{
QString fileName = QFileInfo(filePath).fileName();
- QList<CodeParser *>::ConstIterator p = parsers.constBegin();
- while (p != parsers.constEnd()) {
-
- QStringList sourcePatterns = (*p)->sourceFileNameFilter();
- foreach (const QString &pattern, sourcePatterns) {
+ for (const auto &parser : parsers) {
+ const QStringList sourcePatterns = parser->sourceFileNameFilter();
+ for (const QString &pattern : sourcePatterns) {
QRegExp re(pattern, Qt::CaseInsensitive, QRegExp::Wildcard);
if (re.exactMatch(fileName))
- return *p;
+ return parser;
}
- ++p;
}
return nullptr;
}
diff --git a/src/qdoc/cppcodemarker.cpp b/src/qdoc/cppcodemarker.cpp
index 26a43794d..a59654cfa 100644
--- a/src/qdoc/cppcodemarker.cpp
+++ b/src/qdoc/cppcodemarker.cpp
@@ -245,11 +245,12 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node,
QStringList documentedItems = enume->doc().enumItemNames();
if (documentedItems.isEmpty()) {
- foreach (const EnumItem &item, enume->items())
+ const auto enumItems = enume->items();
+ for (const auto &item : enumItems)
documentedItems << item.name();
}
- QStringList omitItems = enume->doc().omitEnumItemNames();
- foreach (const QString &item, omitItems)
+ const QStringList omitItems = enume->doc().omitEnumItemNames();
+ for (const auto &item : omitItems)
documentedItems.removeAll(item);
if (documentedItems.size() <= MaxEnumValues) {
diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp
index af0d9bd9b..47f3f52a6 100644
--- a/src/qdoc/cppcodeparser.cpp
+++ b/src/qdoc/cppcodeparser.cpp
@@ -911,12 +911,10 @@ void CppCodeParser::setExampleFileLists(PageNode *pn)
exampleFiles += Config::getFilesHere(fullPath, "*.qrc *.pro *.qmlproject qmldir");
}
- int i = 0;
- foreach (const QString &exampleFile, exampleFiles)
- exampleFiles[i++] = exampleFile.mid(sizeOfBoringPartOfName);
- i = 0;
- foreach (const QString &imageFile, imageFiles)
- imageFiles[i++] = imageFile.mid(sizeOfBoringPartOfName);
+ for (auto &file : exampleFiles)
+ file = file.mid(sizeOfBoringPartOfName);
+ for (auto &file : imageFiles)
+ file = file.mid(sizeOfBoringPartOfName);
ExampleNode *en = static_cast<ExampleNode *>(pn);
en->setFiles(exampleFiles);
en->setImages(imageFiles);
diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp
index 89fe65995..90799bd8c 100644
--- a/src/qdoc/doc.cpp
+++ b/src/qdoc/doc.cpp
@@ -381,9 +381,7 @@ DocPrivate::DocPrivate(const Location &start,
DocPrivate::~DocPrivate()
{
delete extra;
- foreach (DitaRef *t, ditamap_) {
- delete t;
- }
+ qDeleteAll(ditamap_);
}
void DocPrivate::addAlso(const Text &also)
@@ -3416,9 +3414,7 @@ void Doc::detach()
*/
TopicRef::~TopicRef()
{
- foreach (DitaRef *t, subrefs_) {
- delete t;
- }
+ qDeleteAll(subrefs_);
}
/*!
diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp
index e4fc378b0..4c353fdd2 100644
--- a/src/qdoc/generator.cpp
+++ b/src/qdoc/generator.cpp
@@ -208,7 +208,7 @@ int Generator::appendSortedNames(Text &text, const ClassNode *cn, const QList<Re
QStringList classNames = classMap.keys();
classNames.sort();
- foreach (const QString &className, classNames) {
+ for (const auto &className : qAsConst(classNames)) {
text << classMap[className];
text << comma(index++, classNames.count());
}
@@ -232,7 +232,7 @@ int Generator::appendSortedQmlNames(Text &text, const Node *base, const NodeList
QStringList names = classMap.keys();
names.sort();
- foreach (const QString &name, names) {
+ for (const auto &name : qAsConst(names)) {
text << classMap[name];
text << comma(index++, names.count());
}
@@ -248,7 +248,8 @@ void Generator::writeOutFileNames()
if (!files.open(QFile::WriteOnly))
return;
QTextStream filesout(&files);
- foreach (const QString &file, outFileNames_) {
+ const auto names = outFileNames_;
+ for (const auto &file : names) {
filesout << file << "\n";
}
}
@@ -1045,7 +1046,7 @@ void Generator::generateFileList(const ExampleNode *en, CodeMarker *marker, bool
text << Atom(Atom::ListLeft, openedList.styleString());
QString path;
- foreach (QString file, paths) {
+ for (const auto &file : qAsConst(paths)) {
if (images) {
if (!file.isEmpty()) {
QDir dirInfo;
@@ -1226,9 +1227,9 @@ void Generator::generateDocumentation(Node *node)
if (node->isAggregate()) {
Aggregate *aggregate = static_cast<Aggregate *>(node);
const NodeList &children = aggregate->childNodes();
- foreach (Node *n, children) {
- if (n->isPageNode() && !n->isPrivate())
- generateDocumentation(n);
+ for (auto *node : children) {
+ if (node->isPageNode() && !node->isPrivate())
+ generateDocumentation(node);
}
}
}
@@ -1487,21 +1488,21 @@ static bool hasExceptions(const Node *node,
bool result = false;
Node::ThreadSafeness ts = node->threadSafeness();
const NodeList &children = static_cast<const Aggregate *>(node)->childNodes();
- foreach (Node *n, children) {
- if (!n->isObsolete()){
- switch (n->threadSafeness()) {
+ for (auto *node : children) {
+ if (!node->isObsolete()){
+ switch (node->threadSafeness()) {
case Node::Reentrant:
- reentrant.append(n);
+ reentrant.append(node);
if (ts == Node::ThreadSafe)
result = true;
break;
case Node::ThreadSafe:
- threadsafe.append(n);
+ threadsafe.append(node);
if (ts == Node::Reentrant)
result = true;
break;
case Node::NonReentrant:
- nonreentrant.append(n);
+ nonreentrant.append(node);
result = true;
break;
default:
diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp
index 3a33ce2dd..3d45b60a4 100644
--- a/src/qdoc/helpprojectwriter.cpp
+++ b/src/qdoc/helpprojectwriter.cpp
@@ -65,9 +65,9 @@ void HelpProjectWriter::reset(const Config &config,
// generator.
outputDir = config.getOutputDir();
- QStringList names = config.getStringList(CONFIG_QHP + Config::dot + "projects");
+ const QStringList names = config.getStringList(CONFIG_QHP + Config::dot + "projects");
- foreach (const QString &projectName, names) {
+ for (const auto &projectName : names) {
HelpProject project;
project.name = projectName;
@@ -85,18 +85,20 @@ void HelpProjectWriter::reset(const Config &config,
const auto &filterAttributes = config.getStringList(prefix + "filterAttributes");
project.filterAttributes = QSet<QString>(filterAttributes.cbegin(), filterAttributes.cend());
project.includeIndexNodes = config.getBool(prefix + "includeIndexNodes");
- QSet<QString> customFilterNames = config.subVars(prefix + "customFilters");
- foreach (const QString &filterName, customFilterNames) {
+ const QSet<QString> customFilterNames = config.subVars(prefix + "customFilters");
+ for (const auto &filterName : customFilterNames) {
QString name = config.getString(prefix + "customFilters" + Config::dot + filterName + Config::dot + "name");
const auto &filters = config.getStringList(prefix + "customFilters" + Config::dot + filterName + Config::dot + "filterAttributes");
project.customFilters[name] = QSet<QString>(filters.cbegin(), filters.cend());
}
//customFilters = config.defs.
- foreach (QString name, config.getStringSet(prefix + "excluded"))
+ const auto excludedPrefixes = config.getStringSet(prefix + "excluded");
+ for (auto name : excludedPrefixes)
project.excluded.insert(name.replace(QLatin1Char('\\'), QLatin1Char('/')));
- foreach (const QString &name, config.getStringList(prefix + "subprojects")) {
+ const auto subprojectPrefixes = config.getStringList(prefix + "subprojects");
+ for (const auto &name : subprojectPrefixes) {
SubProject subproject;
QString subprefix = prefix + "subprojects" + Config::dot + name + Config::dot;
subproject.title = config.getString(subprefix + "title");
@@ -158,7 +160,7 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList
for (auto it = pageTypeHash.cbegin(), end = pageTypeHash.cend(); it != end; ++it)
fullSubset.insert(it.value());
- foreach (const QString &selector, selectors) {
+ for (const QString &selector : selectors) {
QStringList pieces = selector.split(QLatin1Char(':'));
if (pieces.size() == 1) {
QString lower = selector.toLower();
@@ -275,7 +277,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
if (node->isGroup() || node->isModule() || node->isQmlModule()) {
if (project.subprojects[i].groups.contains(node->name().toLower())) {
const CollectionNode *cn = static_cast<const CollectionNode *>(node);
- foreach (const Node *m, cn->members()) {
+ const auto members = cn->members();
+ for (const Node *m : members) {
QString memberName = m->isTextPageNode()
? m->fullTitle() : m->fullDocumentName();
project.subprojects[i].nodes[memberName] = m;
@@ -309,7 +312,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
case Node::JsType:
case Node::JsBasicType:
if (node->doc().hasKeywords()) {
- foreach (const Atom *keyword, node->doc().keywords()) {
+ const auto keywords = node->doc().keywords();
+ for (const Atom *keyword : keywords) {
if (!keyword->string().isEmpty()) {
QStringList details;
details << keyword->string()
@@ -332,7 +336,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
project.keywords.append(keywordDetails(node));
{
const EnumNode *enumNode = static_cast<const EnumNode *>(node);
- foreach (const EnumItem &item, enumNode->items()) {
+ const auto items = enumNode->items();
+ for (const auto &item : items) {
QStringList details;
if (enumNode->itemAccess(item.name()) == Node::Private)
@@ -359,7 +364,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
const CollectionNode *cn = static_cast<const CollectionNode *>(node);
if (!cn->fullTitle().isEmpty()) {
if (cn->doc().hasKeywords()) {
- foreach (const Atom *keyword, cn->doc().keywords()) {
+ const auto keywords = cn->doc().keywords();
+ for (const Atom *keyword : keywords) {
if (!keyword->string().isEmpty()) {
QStringList details;
details << keyword->string()
@@ -442,7 +448,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
const PageNode *pn = static_cast<const PageNode *>(node);
if (!pn->fullTitle().isEmpty()) {
if (pn->doc().hasKeywords()) {
- foreach (const Atom *keyword, pn->doc().keywords()) {
+ const auto keywords = pn->doc().keywords();
+ for (const Atom *keyword : keywords) {
if (!keyword->string().isEmpty()) {
QStringList details;
details << keyword->string()
@@ -494,7 +501,7 @@ void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter
// Ensure that we don't visit nodes more than once.
QSet<const Node *> childSet;
const NodeList &children = aggregate->childNodes();
- foreach (const Node *child, children) {
+ for (const auto *child : children) {
// Skip related non-members adopted by some other aggregate
if (child->parent() != aggregate)
continue;
@@ -510,7 +517,7 @@ void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter
childSet << child;
}
}
- foreach (const Node *child, childSet)
+ for (const auto *child : qAsConst(childSet))
generateSections(project, writer, child);
}
}
@@ -688,7 +695,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
writer.writeAttribute("name", it.key());
QStringList sortedAttributes = it.value().values();
sortedAttributes.sort();
- foreach (const QString &filter, sortedAttributes)
+ for (const auto &filter : qAsConst(sortedAttributes))
writer.writeTextElement("filterAttribute", filter);
writer.writeEndElement(); // customFilter
}
@@ -699,7 +706,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
// Write filterAttribute elements.
QStringList sortedFilterAttributes = project.filterAttributes.values();
sortedFilterAttributes.sort();
- foreach (const QString &filterName, sortedFilterAttributes)
+ for (const auto &filterName : qAsConst(sortedFilterAttributes))
writer.writeTextElement("filterAttribute", filterName);
writer.writeStartElement("toc");
@@ -786,14 +793,14 @@ void HelpProjectWriter::generateProject(HelpProject &project)
if (subproject.sortPages) {
QStringList titles = subproject.nodes.keys();
titles.sort();
- foreach (const QString &title, titles) {
+ for (const auto &title : qAsConst(titles)) {
writeNode(project, writer, subproject.nodes[title]);
}
} else {
// Find a contents node and navigate from there, using the NextLink values.
QSet<QString> visited;
bool contentsFound = false;
- foreach (const Node *node, subproject.nodes) {
+ for (const auto *node : qAsConst(subproject.nodes)) {
QString nextTitle = node->links().value(Node::NextLink).first;
if (!nextTitle.isEmpty() &&
node->links().value(Node::ContentsLink).first.isEmpty()) {
@@ -821,7 +828,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
std::sort(subnodes.begin(), subnodes.end(), Node::nodeNameLessThan);
- foreach (const Node *node, subnodes)
+ for (const auto *node : qAsConst(subnodes))
writeNode(project, writer, node);
}
}
@@ -838,7 +845,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
writer.writeStartElement("keywords");
std::sort(project.keywords.begin(), project.keywords.end());
- foreach (const QStringList &details, project.keywords) {
+ for (const QStringList &details : qAsConst(project.keywords)) {
writer.writeStartElement("keyword");
writer.writeAttribute("name", details[0]);
writer.writeAttribute("id", details[1]);
@@ -856,7 +863,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
files.unite(project.extraFiles);
QStringList sortedFiles = files.values();
sortedFiles.sort();
- foreach (const QString &usedFile, sortedFiles) {
+ for (const auto &usedFile : qAsConst(sortedFiles)) {
if (!usedFile.isEmpty())
writer.writeTextElement("file", usedFile);
}
diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp
index 2d31a2cde..7810e7793 100644
--- a/src/qdoc/htmlgenerator.cpp
+++ b/src/qdoc/htmlgenerator.cpp
@@ -450,10 +450,10 @@ QString HtmlGenerator::generateLinksToLinksPage(const QString &module, CodeMarke
out() << "Click on a link to go to the location of the link. The link is marked ";
out() << "with red asterisks. ";
out() << "Click on the marked link to see if it goes to the right place.</p>\n";
- TargetList* tlist = qdb_->getTargetList(module);
+ const TargetList *tlist = qdb_->getTargetList(module);
if (tlist) {
out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n";
- foreach (TargetLoc* t, *tlist) {
+ for (const TargetLoc *t : *tlist) {
// e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a>
out() << "<tr><td class=\"topAlign\">";
out() << "<a href=\"" << t->fileName_ << "#" << t->target_ << "\">";
@@ -483,7 +483,7 @@ QString HtmlGenerator::generateLinksToBrokenLinksPage(CodeMarker *marker, int &c
{
QString fileName;
NamespaceNode *node = qdb_->primaryTreeRoot();
- TargetList* tlist = qdb_->getTargetList("broken");
+ const TargetList *tlist = qdb_->getTargetList("broken");
if (tlist && !tlist->isEmpty()) {
count = tlist->size();
fileName = "aaa-links-to-broken-links.html";
@@ -495,7 +495,7 @@ QString HtmlGenerator::generateLinksToBrokenLinksPage(CodeMarker *marker, int &c
out() << "Click on a link to go to the broken link. ";
out() << "The link's target could not be found.</p>\n";
out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to broken link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n";
- foreach (TargetLoc* t, *tlist) {
+ for (const TargetLoc *t : *tlist) {
// e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a>
out() << "<tr><td class=\"topAlign\">";
out() << "<a href=\"" << t->fileName_ << "#" << t->target_ << "\">";
@@ -2893,7 +2893,8 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMap &classM
stack.top().erase(stack.top().begin());
NodeMap newTop;
- foreach (const RelatedClass &d, child->derivedClasses()) {
+ const auto derivedClasses = child->derivedClasses();
+ for (const RelatedClass &d : derivedClasses) {
if (d.node_ && d.node_->isInAPI())
newTop.insert(d.node_->name(), d.node_);
}
@@ -2926,7 +2927,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
{
NodeMultiMap nmm;
bool allInternal = true;
- foreach (Node *node, unsortedNodes) {
+ for (auto *node : unsortedNodes) {
if (!node->isInternal() && !node->isObsolete()) {
allInternal = false;
nmm.insert(node->fullName(relative), node);
@@ -2939,7 +2940,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
NodeList nodes = nmm.values();
std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
- foreach (const Node *node, nodes) {
+ for (const auto *node : qAsConst(nodes)) {
if (++row % 2 == 1)
out() << "<tr class=\"odd topAlign\">";
else
@@ -2983,7 +2984,8 @@ void HtmlGenerator::generateAnnotatedLists(const Node *relative,
CodeMarker *marker,
const NodeMultiMap &nmm)
{
- foreach (const QString &name, nmm.uniqueKeys()) {
+ const auto &uniqueKeys = nmm.uniqueKeys();
+ for (const QString &name : uniqueKeys) {
if (!name.isEmpty()) {
out() << "<h2 id=\"" << registerRef(name.toLower())
<< "\">" << protectEnc(name) << "</h2>\n";
@@ -3276,7 +3278,8 @@ bool HtmlGenerator::generateGroupList(CollectionNode *cn)
if (cn->members().isEmpty())
return false;
out() << "<ul>\n";
- foreach (const Node *node, cn->members()) {
+ const auto members = cn->members();
+ for (const auto *node : members) {
out() << "<li>"
<< "<a href=\"#"
<< Doc::canonicalTitle(node->title())
@@ -3301,12 +3304,13 @@ void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const
else if (selector == QLatin1String("js-modules"))
type = Node::JsModule;
if (type != Node::NoType) {
- NodeList nl;
+ NodeList nodeList;
qdb_->mergeCollections(type, cnm, relative);
- CollectionList cl = cnm.values();
- foreach (CollectionNode *cn, cl)
- nl.append(cn);
- generateAnnotatedList(relative, marker, nl);
+ const CollectionList collectionList = cnm.values();
+ nodeList.reserve(collectionList.size());
+ for (auto *collectionNode : collectionList)
+ nodeList.append(collectionNode);
+ generateAnnotatedList(relative, marker, nodeList);
}
else {
/*
@@ -4021,12 +4025,12 @@ void HtmlGenerator::generateDetailedMember(const Node *node,
const QVector<Node *> &collective = scn->collective();
if (collective.size() > 1)
out() << "<div class=\"fngroup\">\n";
- foreach (const Node *n, collective) {
- if (n->isFunction()) {
- nodeRef = refForNode(n);
+ for (const auto *node : collective) {
+ if (node->isFunction()) {
+ nodeRef = refForNode(node);
out() << "<h3 class=\"fn fngroupitem\" id=\"" << nodeRef << "\">";
out() << "<a name=\"" + nodeRef + "\"></a>";
- generateSynopsis(n, relative, marker, Section::Details);
+ generateSynopsis(node, relative, marker, Section::Details);
out() << "</h3>";
}
}
@@ -4163,8 +4167,8 @@ void HtmlGenerator::generateMacRef(const Node *node, CodeMarker *marker)
if (!pleaseGenerateMacRef || marker == 0)
return;
- QStringList macRefs = marker->macRefsForNode(node);
- foreach (const QString &macRef, macRefs)
+ const QStringList macRefs = marker->macRefsForNode(node);
+ for (const auto &macRef : macRefs)
out() << "<a name=\"" << "//apple_ref/" << macRef << "\"></a>\n";
}
#endif
@@ -4470,7 +4474,7 @@ void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType
out() << "-prop";
const PropertyNode *prop = static_cast<const PropertyNode *>(node);
const NodeList &list = prop->functions();
- foreach (const Node *propFuncNode, list) {
+ for (const auto *propFuncNode : list) {
if (propFuncNode->isFunction()) {
const FunctionNode *func = static_cast<const FunctionNode *>(propFuncNode);
out() << "$$$" + func->name() + func->parameters().rawSignature().remove(' ');
@@ -4478,7 +4482,8 @@ void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType
}
} else if (node->isEnumType()) {
const EnumNode *enumNode = static_cast<const EnumNode *>(node);
- foreach (const EnumItem &item, enumNode->items())
+ const auto items = enumNode->items();
+ for (const auto &item : items)
out() << "$$$" + item.name();
}
} else if (markType == BriefMark) {
@@ -4570,7 +4575,8 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString
QString docUrl = manifestDir + fileBase(en) + ".html";
writer.writeAttribute("docUrl", docUrl);
QStringList proFiles;
- foreach (const QString file, en->files()) {
+ const auto exampleFiles = en->files();
+ for (const QString &file : exampleFiles) {
if (file.endsWith(".pro") || file.endsWith(".qmlproject") || file.endsWith(".pyproject"))
proFiles << file;
}
@@ -4603,7 +4609,8 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString
QString fullName = project + QLatin1Char('/') + en->title();
QSet<QString> tags;
for (int idx=0; idx < manifestMetaContent.size(); ++idx) {
- foreach (const QString &name, manifestMetaContent[idx].names) {
+ const auto names = manifestMetaContent[idx].names;
+ for (const QString &name : names) {
bool match = false;
int wildcard = name.indexOf(QChar('*'));
switch (wildcard) {
@@ -4618,7 +4625,8 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString
}
if (match) {
tags += manifestMetaContent[idx].tags;
- foreach (const QString &attr, manifestMetaContent[idx].attributes) {
+ const auto attributes = manifestMetaContent[idx].attributes;
+ for (const QString &attr : attributes) {
QLatin1Char div(':');
QStringList attrList = attr.split(div);
if (attrList.count() == 1)
@@ -4694,7 +4702,7 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString
bool wrote_one = false;
QStringList sortedTags = tags.values();
sortedTags.sort();
- foreach (const QString &tag, sortedTags) {
+ for (const auto &tag : qAsConst(sortedTags)) {
if (wrote_one)
writer.writeCharacters(",");
writer.writeCharacters(tag);
@@ -4705,7 +4713,8 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString
QString ename = en->name().mid(en->name().lastIndexOf('/')+1);
QMap<int, QString> filesToOpen;
- foreach (QString file, en->files()) {
+ const auto files = en->files();
+ for (const QString &file : files) {
QFileInfo fileInfo(file);
QString fileName = fileInfo.fileName().toLower();
// open .qml, .cpp and .h files with a
@@ -4759,9 +4768,10 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString
*/
void HtmlGenerator::readManifestMetaContent(const Config &config)
{
- QStringList names = config.getStringList(CONFIG_MANIFESTMETA + Config::dot + QStringLiteral("filters"));
+ const QStringList names =
+ config.getStringList(CONFIG_MANIFESTMETA + Config::dot + QStringLiteral("filters"));
- foreach (const QString &manifest, names) {
+ for (const auto &manifest : names) {
ManifestMetaFilter filter;
QString prefix = CONFIG_MANIFESTMETA + Config::dot + manifest + Config::dot;
filter.names = config.getStringSet(prefix + QStringLiteral("names"));
@@ -4783,7 +4793,7 @@ void HtmlGenerator::reportOrphans(const Aggregate *parent)
return;
QString message = "has documentation but no \\relates command";
- foreach (Node *child, children) {
+ for (const auto *child : children) {
if (!child || child->isInternal() || child->doc().isEmpty() || !child->isRelatedNonmember())
continue;
switch (child->nodeType()) {
@@ -4862,9 +4872,9 @@ void HtmlGenerator::generateAssociatedPropertyNotes(FunctionNode *fn)
out() << "<p><b>Note:</b> ";
NodeList &nodes = fn->associatedProperties();
std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
- foreach (const Node *n, nodes) {
+ for (const auto *node : qAsConst(nodes)) {
QString msg;
- const PropertyNode *pn = static_cast<const PropertyNode *>(n);
+ const PropertyNode *pn = static_cast<const PropertyNode *>(node);
switch (pn->role(fn)) {
case PropertyNode::Getter:
msg = QStringLiteral("Getter function ");
diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp
index 364cfb63f..c85ddb44d 100644
--- a/src/qdoc/main.cpp
+++ b/src/qdoc/main.cpp
@@ -94,8 +94,8 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
{
QDocDatabase *qdb = QDocDatabase::qdocDB();
QStringList indexFiles;
- QStringList configIndexes = config.getStringList(CONFIG_INDEXES);
- foreach (const QString &index, configIndexes) {
+ const QStringList configIndexes = config.getStringList(CONFIG_INDEXES);
+ for (const auto &index : configIndexes) {
QFileInfo fi(index);
if (fi.exists() && fi.isFile())
indexFiles << index;
diff --git a/src/qdoc/node.cpp b/src/qdoc/node.cpp
index c1a204c9a..f4bfcbc18 100644
--- a/src/qdoc/node.cpp
+++ b/src/qdoc/node.cpp
@@ -2184,7 +2184,7 @@ QStringList Aggregate::primaryKeys()
*/
void Aggregate::markUndocumentedChildrenInternal()
{
- foreach (Node *child, children_) {
+ for (auto *child : qAsConst(children_)) {
if (!child->isSharingComment() && !child->hasDoc() && !child->isDontDocument()) {
if (!child->docMustBeGenerated()) {
if (child->isFunction()) {
@@ -2258,9 +2258,9 @@ void Aggregate::normalizeOverloads()
/*
Recursive part.
*/
- foreach (Node *n, children_) {
- if (n->isAggregate())
- static_cast<Aggregate *>(n)->normalizeOverloads();
+ for (auto *node : qAsConst(children_)) {
+ if (node->isAggregate())
+ static_cast<Aggregate *>(node)->normalizeOverloads();
}
}
@@ -2291,7 +2291,7 @@ const NodeList &Aggregate::nonfunctionList()
*/
const EnumNode *Aggregate::findEnumNodeForValue(const QString &enumValue) const
{
- foreach (const Node *node, enumChildren_) {
+ for (const auto *node : qAsConst(enumChildren_)) {
const EnumNode *en = static_cast<const EnumNode *>(node);
if (en->hasItem(enumValue))
return en;
@@ -2503,8 +2503,8 @@ void Aggregate::adoptChild(Node *child)
void Aggregate::setOutputSubdirectory(const QString &t)
{
Node::setOutputSubdirectory(t);
- foreach (Node *n, children_)
- n->setOutputSubdirectory(t);
+ for (auto *node : qAsConst(children_))
+ node->setOutputSubdirectory(t);
}
/*!
@@ -2516,7 +2516,7 @@ QmlPropertyNode *Aggregate::hasQmlProperty(const QString &n) const
NodeType goal = Node::QmlProperty;
if (isJsNode())
goal = Node::JsProperty;
- foreach (Node *child, children_) {
+ for (auto *child : qAsConst(children_)) {
if (child->nodeType() == goal) {
if (child->name() == n)
return static_cast<QmlPropertyNode *>(child);
@@ -2535,7 +2535,7 @@ QmlPropertyNode *Aggregate::hasQmlProperty(const QString &n, bool attached) cons
NodeType goal = Node::QmlProperty;
if (isJsNode())
goal = Node::JsProperty;
- foreach (Node *child, children_) {
+ for (auto *child : qAsConst(children_)) {
if (child->nodeType() == goal) {
if (child->name() == n && child->isAttached() == attached)
return static_cast<QmlPropertyNode *>(child);
@@ -2664,9 +2664,9 @@ void Aggregate::findAllFunctions(NodeMapMap &functionIndex)
fn = fn->nextOverload();
}
}
- foreach (Node *n, children_) {
- if (n->isAggregate() && !n->isPrivate())
- static_cast<Aggregate *>(n)->findAllFunctions(functionIndex);
+ for (Node *node : qAsConst(children_)) {
+ if (node->isAggregate() && !node->isPrivate())
+ static_cast<Aggregate *>(node)->findAllFunctions(functionIndex);
}
}
@@ -2686,11 +2686,11 @@ void Aggregate::findAllFunctions(NodeMapMap &functionIndex)
*/
void Aggregate::findAllNamespaces(NodeMultiMap &namespaces)
{
- foreach (Node *n, children_) {
- if (n->isAggregate() && !n->isPrivate()) {
- if (n->isNamespace() && !n->name().isEmpty())
- namespaces.insert(n->name(), n);
- static_cast<Aggregate *>(n)->findAllNamespaces(namespaces);
+ for (auto *node : qAsConst(children_)) {
+ if (node->isAggregate() && !node->isPrivate()) {
+ if (node->isNamespace() && !node->name().isEmpty())
+ namespaces.insert(node->name(), node);
+ static_cast<Aggregate *>(node)->findAllNamespaces(namespaces);
}
}
}
@@ -2701,11 +2701,11 @@ void Aggregate::findAllNamespaces(NodeMultiMap &namespaces)
*/
bool Aggregate::hasObsoleteMembers()
{
- foreach (Node *n, children_) {
- if (!n->isPrivate() && n->isObsolete()) {
- if (n->isFunction() || n->isProperty() || n->isEnumType() ||
- n->isTypedef() || n->isTypeAlias() || n->isVariable() ||
- n->isQmlProperty() || n->isJsProperty())
+ for (const auto *node : qAsConst(children_)) {
+ if (!node->isPrivate() && node->isObsolete()) {
+ if (node->isFunction() || node->isProperty() || node->isEnumType() ||
+ node->isTypedef() || node->isTypeAlias() || node->isVariable() ||
+ node->isQmlProperty() || node->isJsProperty())
return true;
}
}
@@ -2720,26 +2720,24 @@ bool Aggregate::hasObsoleteMembers()
*/
void Aggregate::findAllObsoleteThings()
{
- foreach (Node *n, children_) {
- if (!n->isPrivate()) {
- QString name = n->name();
- if (n->isObsolete()) {
- if (n->isClassNode())
- QDocDatabase::obsoleteClasses().insert(n->qualifyCppName(), n);
- else if (n->isQmlType() || n->isJsType())
- QDocDatabase::obsoleteQmlTypes().insert(n->qualifyQmlName(), n);
- } else if (n->isClassNode()) {
- Aggregate *a = static_cast<Aggregate *>(n);
+ for (auto *node : qAsConst(children_)) {
+ if (!node->isPrivate()) {
+ QString name = node->name();
+ if (node->isObsolete()) {
+ if (node->isClassNode())
+ QDocDatabase::obsoleteClasses().insert(node->qualifyCppName(), node);
+ else if (node->isQmlType() || node->isJsType())
+ QDocDatabase::obsoleteQmlTypes().insert(node->qualifyQmlName(), node);
+ } else if (node->isClassNode()) {
+ Aggregate *a = static_cast<Aggregate *>(node);
if (a->hasObsoleteMembers())
- QDocDatabase::classesWithObsoleteMembers().insert(n->qualifyCppName(), n);
- }
- else if (n->isQmlType() || n->isJsType()) {
- Aggregate *a = static_cast<Aggregate *>(n);
+ QDocDatabase::classesWithObsoleteMembers().insert(node->qualifyCppName(), node);
+ } else if (node->isQmlType() || node->isJsType()) {
+ Aggregate *a = static_cast<Aggregate *>(node);
if (a->hasObsoleteMembers())
- QDocDatabase::qmlTypesWithObsoleteMembers().insert(n->qualifyQmlName(), n);
- }
- else if (n->isAggregate()) {
- static_cast<Aggregate *>(n)->findAllObsoleteThings();
+ QDocDatabase::qmlTypesWithObsoleteMembers().insert(node->qualifyQmlName(), node);
+ } else if (node->isAggregate()) {
+ static_cast<Aggregate *>(node)->findAllObsoleteThings();
}
}
}
@@ -2752,24 +2750,24 @@ void Aggregate::findAllObsoleteThings()
*/
void Aggregate::findAllClasses()
{
- foreach (Node *n, children_) {
- if (!n->isPrivate() && !n->isInternal() &&
- n->tree()->camelCaseModuleName() != QString("QDoc")) {
- if (n->isClassNode()) {
- QDocDatabase::cppClasses().insert(n->qualifyCppName().toLower(), n);
- } else if (n->isQmlType() || n->isQmlBasicType() || n->isJsType() || n->isJsBasicType()) {
- QString name = n->unqualifyQmlName();
- QDocDatabase::qmlTypes().insert(name, n);
+ for (auto *node : qAsConst(children_)) {
+ if (!node->isPrivate() && !node->isInternal() &&
+ node->tree()->camelCaseModuleName() != QString("QDoc")) {
+ if (node->isClassNode()) {
+ QDocDatabase::cppClasses().insert(node->qualifyCppName().toLower(), node);
+ } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() || node->isJsBasicType()) {
+ QString name = node->unqualifyQmlName();
+ QDocDatabase::qmlTypes().insert(name, node);
//also add to the QML basic type map
- if (n->isQmlBasicType() || n->isJsBasicType())
- QDocDatabase::qmlBasicTypes().insert(name, n);
- } else if (n->isExample()) {
+ if (node->isQmlBasicType() || node->isJsBasicType())
+ QDocDatabase::qmlBasicTypes().insert(name, node);
+ } else if (node->isExample()) {
// use the module index title as key for the example map
- QString title = n->tree()->indexTitle();
- if (!QDocDatabase::examples().contains(title, n))
- QDocDatabase::examples().insert(title, n);
- } else if (n->isAggregate()) {
- static_cast<Aggregate *>(n)->findAllClasses();
+ QString title = node->tree()->indexTitle();
+ if (!QDocDatabase::examples().contains(title, node))
+ QDocDatabase::examples().insert(title, node);
+ } else if (node->isAggregate()) {
+ static_cast<Aggregate *>(node)->findAllClasses();
}
}
}
@@ -2781,12 +2779,12 @@ void Aggregate::findAllClasses()
*/
void Aggregate::findAllAttributions(NodeMultiMap &attributions)
{
- foreach (Node *n, children_) {
- if (!n->isPrivate()) {
- if (n->pageType() == Node::AttributionPage)
- attributions.insertMulti(n->tree()->indexTitle(), n);
- else if (n->isAggregate())
- static_cast<Aggregate *>(n)->findAllAttributions(attributions);
+ for (auto *node : qAsConst(children_)) {
+ if (!node->isPrivate()) {
+ if (node->pageType() == Node::AttributionPage)
+ attributions.insertMulti(node->tree()->indexTitle(), node);
+ else if (node->isAggregate())
+ static_cast<Aggregate *>(node)->findAllAttributions(attributions);
}
}
}
@@ -2801,10 +2799,10 @@ void Aggregate::findAllAttributions(NodeMultiMap &attributions)
*/
void Aggregate::findAllSince()
{
- foreach (Node *n, children_) {
- QString sinceString = n->since();
+ for (auto *node : qAsConst(children_)) {
+ QString sinceString = node->since();
// Insert a new entry into each map for each new since string found.
- if (!n->isPrivate() && !sinceString.isEmpty()) {
+ if (!node->isPrivate() && !sinceString.isEmpty()) {
NodeMultiMapMap::iterator nsmap = QDocDatabase::newSinceMaps().find(sinceString);
if (nsmap == QDocDatabase::newSinceMaps().end())
nsmap = QDocDatabase::newSinceMaps().insert(sinceString, NodeMultiMap());
@@ -2817,34 +2815,34 @@ void Aggregate::findAllSince()
if (nqcmap == QDocDatabase::newQmlTypeMaps().end())
nqcmap = QDocDatabase::newQmlTypeMaps().insert(sinceString, NodeMap());
- if (n->isFunction()) {
+ if (node->isFunction()) {
// Insert functions into the general since map.
- FunctionNode *fn = static_cast<FunctionNode *>(n);
+ FunctionNode *fn = static_cast<FunctionNode *>(node);
if (!fn->isObsolete() && !fn->isSomeCtor() && !fn->isDtor())
nsmap.value().insert(fn->name(), fn);
}
- else if (n->isClassNode()) {
+ else if (node->isClassNode()) {
// Insert classes into the since and class maps.
- QString name = n->qualifyWithParentName();
- nsmap.value().insert(name, n);
- ncmap.value().insert(name, n);
- } else if (n->isQmlType() || n->isJsType()) {
+ QString name = node->qualifyWithParentName();
+ nsmap.value().insert(name, node);
+ ncmap.value().insert(name, node);
+ } else if (node->isQmlType() || node->isJsType()) {
// Insert QML elements into the since and element maps.
- QString name = n->qualifyWithParentName();
- nsmap.value().insert(name, n);
- nqcmap.value().insert(name, n);
- } else if (n->isQmlProperty() || n->isJsProperty()) {
+ QString name = node->qualifyWithParentName();
+ nsmap.value().insert(name, node);
+ nqcmap.value().insert(name, node);
+ } else if (node->isQmlProperty() || node->isJsProperty()) {
// Insert QML properties into the since map.
- nsmap.value().insert(n->name(), n);
+ nsmap.value().insert(node->name(), node);
} else {
// Insert external documents into the general since map.
- QString name = n->qualifyWithParentName();
- nsmap.value().insert(name, n);
+ QString name = node->qualifyWithParentName();
+ nsmap.value().insert(name, node);
}
}
// Recursively find child nodes with since commands.
- if (n->isAggregate())
- static_cast<Aggregate *>(n)->findAllSince();
+ if (node->isAggregate())
+ static_cast<Aggregate *>(node)->findAllSince();
}
}
@@ -2859,7 +2857,7 @@ void Aggregate::resolveQmlInheritance()
{
NodeMap previousSearches;
// Do we need recursion?
- foreach (Node *child, children_) {
+ for (auto *child : qAsConst(children_)) {
if (!child->isQmlType() && !child->isJsType())
continue;
QmlTypeNode *type = static_cast<QmlTypeNode *>(child);
@@ -3119,8 +3117,8 @@ bool NamespaceNode::isDocumentedHere() const
*/
bool NamespaceNode::hasDocumentedChildren() const
{
- foreach (Node *n, children_) {
- if (n->isInAPI())
+ for (const auto *node : qAsConst(children_)) {
+ if (node->isInAPI())
return true;
}
return false;
@@ -3133,15 +3131,15 @@ bool NamespaceNode::hasDocumentedChildren() const
*/
void NamespaceNode::reportDocumentedChildrenInUndocumentedNamespace() const
{
- foreach (Node *n, children_) {
- if (n->isInAPI()) {
- QString msg1 = n->name();
- if (n->isFunction())
+ for (const auto *node : qAsConst(children_)) {
+ if (node->isInAPI()) {
+ QString msg1 = node->name();
+ if (node->isFunction())
msg1 += "()";
msg1 += tr(" is documented, but namespace %1 is not documented in any module.").arg(name());
QString msg2 = tr("Add /*! '\\%1 %2' ... */ or remove the qdoc comment marker (!) at that line number.").arg(COMMAND_NAMESPACE).arg(name());
- n->doc().location().warning(msg1, msg2);
+ node->doc().location().warning(msg1, msg2);
}
}
}
@@ -3590,8 +3588,8 @@ bool HeaderNode::docMustBeGenerated() const
*/
bool HeaderNode::hasDocumentedChildren() const
{
- foreach (Node *n, children_) {
- if (n->isInAPI())
+ for (const auto *node : qAsConst(children_)) {
+ if (node->isInAPI())
return true;
}
return false;
@@ -3794,7 +3792,7 @@ Node::Access EnumNode::itemAccess(const QString &name) const
*/
QString EnumNode::itemValue(const QString &name) const
{
- foreach (const EnumItem &item, items_) {
+ for (const auto &item : qAsConst(items_)) {
if (item.name() == name)
return item.value();
}
@@ -4297,8 +4295,8 @@ bool FunctionNode::hasActiveAssociatedProperty() const
{
if (associatedProperties_.isEmpty())
return false;
- foreach (const Node *p, associatedProperties_) {
- if (!p->isObsolete())
+ for (const auto *property : qAsConst(associatedProperties_)) {
+ if (!property->isObsolete())
return true;
}
return false;
diff --git a/src/qdoc/parameters.cpp b/src/qdoc/parameters.cpp
index c723fe9cc..44178c9d9 100644
--- a/src/qdoc/parameters.cpp
+++ b/src/qdoc/parameters.cpp
@@ -456,7 +456,8 @@ QString Parameters::signature(bool includeValues) const
QString Parameters::rawSignature(bool names, bool values) const
{
QString raw;
- foreach (const Parameter &parameter, parameters_) {
+ const auto params = parameters_;
+ for (const auto &parameter : params) {
raw += parameter.type();
if (names)
raw += parameter.name();
@@ -508,7 +509,8 @@ void Parameters::set(const QString &signature)
*/
void Parameters::getNames(QSet<QString> &names) const
{
- foreach (const Parameter &parameter, parameters_) {
+ const auto params = parameters_;
+ for (const auto &parameter : params) {
if (!parameter.name().isEmpty())
names.insert(parameter.name());
}
diff --git a/src/qdoc/qdoc.pro b/src/qdoc/qdoc.pro
index 47985f957..0f9159bc7 100644
--- a/src/qdoc/qdoc.pro
+++ b/src/qdoc/qdoc.pro
@@ -11,6 +11,8 @@ qtHaveModule(qmldevtools-private) {
DEFINES += QT_NO_DECLARATIVE
}
+DEFINES += QT_NO_FOREACH
+
include($$OUT_PWD/qtqdoc-config.pri)
LIBS += $$CLANG_LIBS
diff --git a/src/qdoc/qdocdatabase.cpp b/src/qdoc/qdocdatabase.cpp
index 2ad906bd6..311b19db7 100644
--- a/src/qdoc/qdocdatabase.cpp
+++ b/src/qdoc/qdocdatabase.cpp
@@ -169,7 +169,7 @@ void QDocForest::setPrimaryTree(const QString &t)
If the search order array is empty, create the search order.
If the search order array is not empty, do nothing.
*/
-void QDocForest::setSearchOrder(QStringList &t)
+void QDocForest::setSearchOrder(const QStringList &t)
{
if (!searchOrder_.isEmpty())
return;
@@ -187,7 +187,7 @@ void QDocForest::setSearchOrder(QStringList &t)
forest_.remove(primaryName);
QMap<QString, Tree *>::iterator i;
- foreach (const QString &m, t) {
+ for (const QString &m : t) {
if (primaryName != m) {
i = forest_.find(m);
if (i != forest_.end()) {
@@ -326,8 +326,8 @@ const Node *QDocForest::findNodeForTarget(QStringList &targetPath,
if (!targetPath.isEmpty())
target = targetPath.takeFirst();
- foreach (Tree *t, searchOrder()) {
- const Node *n = t->findNodeForTarget(entityPath, target, relative, flags, genus, ref);
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNodeForTarget(entityPath, target, relative, flags, genus, ref);
if (n)
return n;
relative = nullptr;
@@ -343,9 +343,9 @@ void QDocForest::printLinkCounts(const QString &project)
{
Location::null.report(QString("%1: Link Counts").arg(project));
QMultiMap<int, QString> m;
- foreach (Tree *t, searchOrder()) {
- if (t->linkCount() < 0)
- m.insert(t->linkCount(), t->physicalModuleName());
+ for (const auto *tree : searchOrder()) {
+ if (tree->linkCount() < 0)
+ m.insert(tree->linkCount(), tree->physicalModuleName());
}
QString depends = "depends +=";
QString module = project.toLower();
@@ -372,9 +372,9 @@ void QDocForest::printLinkCounts(const QString &project)
QString QDocForest::getLinkCounts(QStringList &strings, QVector<int> &counts)
{
QMultiMap<int, QString> m;
- foreach (Tree *t, searchOrder()) {
- if (t->linkCount() < 0)
- m.insert(t->linkCount(), t->physicalModuleName());
+ for (const auto *tree : searchOrder()) {
+ if (tree->linkCount() < 0)
+ m.insert(tree->linkCount(), tree->physicalModuleName());
}
QString depends = "depends +=";
QString module = Generator::defaultModuleName().toLower();
@@ -405,8 +405,8 @@ const FunctionNode *QDocForest::findFunctionNode(const QStringList &path,
const Node *relative,
Node::Genus genus)
{
- foreach (Tree *t, searchOrder()) {
- const FunctionNode *fn = t->findFunctionNode(path, parameters, relative, genus);
+ for (const auto *tree : searchOrder()) {
+ const FunctionNode *fn = tree->findFunctionNode(path, parameters, relative, genus);
if (fn)
return fn;
relative = nullptr;
@@ -1181,15 +1181,15 @@ void QDocDatabase::resolveNamespaces()
t->root()->findAllNamespaces(namespaceMultimap);
t = forest_.nextTree();
}
- QList<QString> keys = namespaceMultimap.uniqueKeys();
- foreach (const QString &s, keys) {
+ const QList<QString> keys = namespaceMultimap.uniqueKeys();
+ for (const QString &key : keys) {
NamespaceNode *ns = nullptr;
NamespaceNode *somewhere = nullptr;
- NodeList namespaces = namespaceMultimap.values(s);
- int count = namespaceMultimap.remove(s);
+ const NodeList namespaces = namespaceMultimap.values(key);
+ int count = namespaceMultimap.remove(key);
if (count > 0) {
- foreach (Node *n, namespaces) {
- ns = static_cast<NamespaceNode *>(n);
+ for (auto *node : namespaces) {
+ ns = static_cast<NamespaceNode *>(node);
if (ns->isDocumentedHere())
break;
else if (ns->hadDoc())
@@ -1197,8 +1197,8 @@ void QDocDatabase::resolveNamespaces()
ns = nullptr;
}
if (ns) {
- foreach (Node *n, namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(n);
+ for (auto *node : namespaces) {
+ NamespaceNode *NS = static_cast<NamespaceNode *>(node);
if (NS->hadDoc() && NS != ns) {
ns->doc().location().warning(tr("Namespace %1 documented more than once")
.arg(NS->name()));
@@ -1207,14 +1207,14 @@ void QDocDatabase::resolveNamespaces()
}
} else if (somewhere == nullptr) {
- foreach (Node *n, namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(n);
+ for (auto *node : namespaces) {
+ NamespaceNode *NS = static_cast<NamespaceNode *>(node);
NS->reportDocumentedChildrenInUndocumentedNamespace();
}
}
if (somewhere) {
- foreach (Node *n, namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(n);
+ for (auto *node : namespaces) {
+ NamespaceNode *NS = static_cast<NamespaceNode *>(node);
if (NS != somewhere)
NS->setDocNode(somewhere);
}
@@ -1229,11 +1229,11 @@ void QDocDatabase::resolveNamespaces()
the namespace.
*/
if (ns && count > 1) {
- foreach (Node *n, namespaces) {
- NamespaceNode *NS = static_cast<NamespaceNode *>(n);
- if (NS != ns) {
- NodeList::ConstIterator c = NS->constBegin();
- while (c != NS->constEnd()) {
+ for (auto *node : namespaces) {
+ auto *nameSpaceNode = static_cast<NamespaceNode *>(node);
+ if (nameSpaceNode != ns) {
+ NodeList::ConstIterator c = nameSpaceNode->constBegin();
+ while (c != nameSpaceNode->constEnd()) {
Node *N = *c;
if (N && N->isPublic() && !N->isInternal())
ns->includeChild(N);
@@ -1265,10 +1265,10 @@ void QDocDatabase::resolveProxies()
Tree *t = forest_.firstTree();
t = forest_.nextTree();
while (t) {
- NodeList &proxies = t->proxies();
+ const NodeList &proxies = t->proxies();
if (!proxies.isEmpty()) {
- foreach (Node *n, proxies) {
- ProxyNode *pn = static_cast<ProxyNode *>(n);
+ for (auto *node : proxies) {
+ ProxyNode *pn = static_cast<ProxyNode *>(node);
if (pn->count() > 0) {
Aggregate *aggregate = primaryTree()->findAggregate(pn->name());
if (aggregate != nullptr)
@@ -1349,8 +1349,8 @@ const Node *QDocDatabase::findNodeForTarget(const QString &target, const Node *r
else {
QStringList path = target.split("::");
int flags = SearchBaseClasses | SearchEnumValues;
- foreach (Tree *t, searchOrder()) {
- const Node *n = t->findNode(path, relative, flags, Node::DontCare);
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNode(path, relative, flags, Node::DontCare);
if (n)
return n;
relative = nullptr;
@@ -1372,19 +1372,19 @@ void QDocDatabase::generateTagFile(const QString &name, Generator *g)
}
/*!
- Reads and parses the qdoc index files listed in \a t.
+ Reads and parses the qdoc index files listed in \a indexFiles.
*/
-void QDocDatabase::readIndexes(const QStringList &t)
+void QDocDatabase::readIndexes(const QStringList &indexFiles)
{
- QStringList indexFiles;
- foreach (const QString &f, t) {
- QString fn = f.mid(f.lastIndexOf(QChar('/'))+1);
+ QStringList filesToRead;
+ for (const QString &file : indexFiles) {
+ QString fn = file.mid(file.lastIndexOf(QChar('/'))+1);
if (!isLoaded(fn))
- indexFiles << f;
+ filesToRead << file;
else
- qDebug() << "This index file is already in memory:" << f;
+ qDebug() << "This index file is already in memory:" << file;
}
- QDocIndexFiles::qdocIndexFiles()->readIndexes(indexFiles);
+ QDocIndexFiles::qdocIndexFiles()->readIndexes(filesToRead);
}
/*!
@@ -1416,7 +1416,8 @@ Node *QDocDatabase::findNodeInOpenNamespace(QStringList &path, bool (Node::*isMa
return nullptr;
Node *n = nullptr;
if (!openNamespaces_.isEmpty()) {
- foreach (const QString &t, openNamespaces_) {
+ const auto &openNamespaces = openNamespaces_;
+ for (const QString &t : openNamespaces) {
QStringList p;
if (t != path[0])
p = t.split("::") + path;
@@ -1441,8 +1442,8 @@ void QDocDatabase::mergeCollections(Node::NodeType type, CNMap &cnm, const Node
{
cnm.clear();
CNMultiMap cnmm;
- foreach (Tree *t, searchOrder()) {
- CNMap *m = t->getCollectionMap(type);
+ for (auto *tree : searchOrder()) {
+ CNMap *m = tree->getCollectionMap(type);
if (m && !m->isEmpty()) {
CNMap::const_iterator i = m->cbegin();
while (i != m->cend()) {
@@ -1455,28 +1456,28 @@ void QDocDatabase::mergeCollections(Node::NodeType type, CNMap &cnm, const Node
if (cnmm.isEmpty())
return;
QRegExp singleDigit("\\b([0-9])\\b");
- QStringList keys = cnmm.uniqueKeys();
- foreach (const QString &key, keys) {
- QList<CollectionNode *> values = cnmm.values(key);
+ const QStringList keys = cnmm.uniqueKeys();
+ for (const auto &key : keys) {
+ const QList<CollectionNode *> values = cnmm.values(key);
CollectionNode *n = nullptr;
- foreach (CollectionNode *v, values) {
- if (v && v->wasSeen() && (v != relative)) {
- n = v;
+ for (auto *value : values) {
+ if (value && value->wasSeen() && value != relative) {
+ n = value;
break;
}
}
if (n) {
if (values.size() > 1) {
- foreach (CollectionNode *v, values) {
- if (v != n) {
+ for (CollectionNode *value : values) {
+ if (value != n) {
// Allow multiple (major) versions of QML/JS modules
if ((n->isQmlModule() || n->isJsModule()) &&
- n->logicalModuleIdentifier() != v->logicalModuleIdentifier()) {
- if (v->wasSeen() && v != relative && !v->members().isEmpty())
- cnm.insert(v->fullTitle().toLower(), v);
+ n->logicalModuleIdentifier() != value->logicalModuleIdentifier()) {
+ if (value->wasSeen() && value != relative && !value->members().isEmpty())
+ cnm.insert(value->fullTitle().toLower(), value);
continue;
}
- foreach (Node *t, v->members())
+ for (Node *t : value->members())
n->addMember(t);
}
}
@@ -1503,14 +1504,14 @@ void QDocDatabase::mergeCollections(Node::NodeType type, CNMap &cnm, const Node
*/
void QDocDatabase::mergeCollections(CollectionNode *c)
{
- foreach (Tree *t, searchOrder()) {
- CollectionNode *cn = t->getCollection(c->name(), c->nodeType());
+ for (auto *tree : searchOrder()) {
+ CollectionNode *cn = tree->getCollection(c->name(), c->nodeType());
if (cn && cn != c) {
if ((cn->isQmlModule() || cn->isJsModule()) &&
cn->logicalModuleIdentifier() != c->logicalModuleIdentifier())
continue;
- foreach (Node *n, cn->members())
- c->addMember(n);
+ for (auto *node : cn->members())
+ c->addMember(node);
}
}
}
diff --git a/src/qdoc/qdocdatabase.h b/src/qdoc/qdocdatabase.h
index 4093dbac5..28b1cea83 100644
--- a/src/qdoc/qdocdatabase.h
+++ b/src/qdoc/qdocdatabase.h
@@ -74,10 +74,10 @@ class QDocForest
bool done() { return (currentIndex_ >= searchOrder().size()); }
const QVector<Tree *> &searchOrder();
const QVector<Tree *> &indexSearchOrder();
- void setSearchOrder(QStringList &t);
+ void setSearchOrder(const QStringList &t);
bool isLoaded(const QString &fn) {
- foreach (Tree *t, searchOrder()) {
- if (fn == t->indexFileName())
+ for (const auto *tree : searchOrder()) {
+ if (fn == tree->indexFileName())
return true;
}
return false;
@@ -87,8 +87,8 @@ class QDocForest
const Node *relative,
int findFlags,
Node::Genus genus) {
- foreach (Tree *t, searchOrder()) {
- const Node *n = t->findNode(path, relative, findFlags, genus);
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNode(path, relative, findFlags, genus);
if (n)
return n;
relative = nullptr;
@@ -97,8 +97,8 @@ class QDocForest
}
Node *findNodeByNameAndType(const QStringList &path, bool (Node::*isMatch) () const) {
- foreach (Tree *t, searchOrder()) {
- Node *n = t->findNodeByNameAndType(path, isMatch);
+ for (const auto *tree : searchOrder()) {
+ Node *n = tree->findNodeByNameAndType(path, isMatch);
if (n)
return n;
}
@@ -106,8 +106,8 @@ class QDocForest
}
ClassNode *findClassNode(const QStringList &path) {
- foreach (Tree *t, searchOrder()) {
- ClassNode *n = t->findClassNode(path);
+ for (const auto *tree : searchOrder()) {
+ ClassNode *n = tree->findClassNode(path);
if (n)
return n;
}
@@ -115,8 +115,8 @@ class QDocForest
}
Node *findNodeForInclude(const QStringList &path) {
- foreach (Tree *t, searchOrder()) {
- Node *n = t->findNodeForInclude(path);
+ for (const auto *tree : searchOrder()) {
+ Node *n = tree->findNodeForInclude(path);
if (n)
return n;
}
@@ -137,8 +137,8 @@ class QDocForest
int flags = SearchBaseClasses | SearchEnumValues | TypesOnly;
if (relative && genus == Node::DontCare && relative->genus() != Node::DOC)
genus = relative->genus();
- foreach (Tree *t, searchOrder()) {
- const Node *n = t->findNode(path, relative, flags, genus);
+ for (const auto *tree : searchOrder()) {
+ const Node *n = tree->findNode(path, relative, flags, genus);
if (n)
return n;
relative = nullptr;
@@ -148,8 +148,8 @@ class QDocForest
const PageNode *findPageNodeByTitle(const QString &title)
{
- foreach (Tree *t, searchOrder()) {
- const PageNode *n = t->findPageNodeByTitle(title);
+ for (const auto *tree : searchOrder()) {
+ const PageNode *n = tree->findPageNodeByTitle(title);
if (n)
return n;
}
@@ -158,8 +158,8 @@ class QDocForest
const CollectionNode *getCollectionNode(const QString &name, Node::NodeType type)
{
- foreach (Tree *t, searchOrder()) {
- const CollectionNode *cn = t->getCollection(name, type);
+ for (auto *tree : searchOrder()) {
+ const CollectionNode *cn = tree->getCollection(name, type);
if (cn)
return cn;
}
@@ -168,8 +168,8 @@ class QDocForest
QmlTypeNode *lookupQmlType(const QString &name)
{
- foreach (Tree *t, searchOrder()) {
- QmlTypeNode *qcn = t->lookupQmlType(name);
+ for (const auto *tree : searchOrder()) {
+ QmlTypeNode *qcn = tree->lookupQmlType(name);
if (qcn)
return qcn;
}
@@ -178,8 +178,8 @@ class QDocForest
Aggregate *lookupQmlBasicType(const QString &name)
{
- foreach (Tree *t, searchOrder()) {
- Aggregate *a = t->lookupQmlBasicType(name);
+ for (const auto *tree : searchOrder()) {
+ Aggregate *a = tree->lookupQmlBasicType(name);
if (a)
return a;
}
@@ -188,8 +188,8 @@ class QDocForest
void clearSearchOrder() { searchOrder_.clear(); }
void clearLinkCounts()
{
- foreach (Tree *t, searchOrder())
- t->clearLinkCount();
+ for (auto *tree : searchOrder())
+ tree->clearLinkCount();
}
void printLinkCounts(const QString &project);
QString getLinkCounts(QStringList &strings, QVector<int> &counts);
diff --git a/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdocindexfiles.cpp
index 2848eaba7..9ea7d9f86 100644
--- a/src/qdoc/qdocindexfiles.cpp
+++ b/src/qdoc/qdocindexfiles.cpp
@@ -108,10 +108,10 @@ void QDocIndexFiles::destroyQDocIndexFiles()
*/
void QDocIndexFiles::readIndexes(const QStringList &indexFiles)
{
- foreach (const QString &indexFile, indexFiles) {
- QString msg = "Loading index file: " + indexFile;
+ for (const QString &file : indexFiles) {
+ QString msg = "Loading index file: " + file;
Location::logToStdErr(msg);
- readIndexFile(indexFile);
+ readIndexFile(file);
}
}
@@ -608,8 +608,8 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader& reader,
QString groupsAttr = attributes.value(QLatin1String("groups")).toString();
if (!groupsAttr.isEmpty()) {
- QStringList groupNames = groupsAttr.split(QLatin1Char(','));
- foreach (const QString &name, groupNames) {
+ const QStringList groupNames = groupsAttr.split(QLatin1Char(','));
+ for (const auto &name : groupNames) {
qdb_->addToGroup(name, node);
}
}
@@ -691,9 +691,9 @@ void QDocIndexFiles::insertTarget(TargetRec::TargetType type,
void QDocIndexFiles::resolveIndex()
{
QPair<ClassNode *, QString> pair;
- foreach (pair, basesList_) {
- QStringList bases = pair.second.split(QLatin1Char(','));
- foreach (const QString &base, bases) {
+ for (const auto &pair : qAsConst(basesList_)) {
+ const QStringList bases = pair.second.split(QLatin1Char(','));
+ for (const auto &base : bases) {
QStringList basePath = base.split(QString("::"));
Node *n = qdb_->findClassNode(basePath);
if (n)
@@ -950,9 +950,9 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
{
// Classes contain information about their base classes.
const ClassNode *classNode = static_cast<const ClassNode *>(node);
- QList<RelatedClass> bases = classNode->baseClasses();
+ const QList<RelatedClass> bases = classNode->baseClasses();
QSet<QString> baseStrings;
- foreach (const RelatedClass &related, bases) {
+ for (const auto &related : bases) {
ClassNode *n = related.node_;
if (n)
baseStrings.insert(n->fullName());
@@ -1067,7 +1067,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
*/
if (!cn->members().isEmpty()) {
QStringList names;
- foreach (const Node *member, cn->members())
+ const auto &members = cn->members();
+ for (const Node *member : members)
names.append(member->name());
writer.writeAttribute("members", names.join(QLatin1Char(',')));
}
@@ -1092,7 +1093,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
*/
if (!cn->members().isEmpty()) {
QStringList names;
- foreach (const Node *member, cn->members())
+ const auto &members = cn->members();
+ for (const Node *member : members)
names.append(member->name());
writer.writeAttribute("members", names.join(QLatin1Char(',')));
}
@@ -1118,7 +1120,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
*/
if (!cn->members().isEmpty()) {
QStringList names;
- foreach (const Node *member, cn->members())
+ const auto &members = cn->members();
+ for (const Node *member : members)
names.append(member->name());
writer.writeAttribute("members", names.join(QLatin1Char(',')));
}
@@ -1143,7 +1146,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
writer.writeAttribute("type", propertyNode->dataType());
if (!brief.isEmpty())
writer.writeAttribute("brief", brief);
- foreach (const Node *fnNode, propertyNode->getters()) {
+ const auto &getters = propertyNode->getters();
+ for (const auto *fnNode : getters) {
if (fnNode) {
const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode);
writer.writeStartElement("getter");
@@ -1151,7 +1155,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
writer.writeEndElement(); // getter
}
}
- foreach (const Node *fnNode, propertyNode->setters()) {
+ const auto &setters = propertyNode->setters();
+ for (const auto *fnNode : setters) {
if (fnNode) {
const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode);
writer.writeStartElement("setter");
@@ -1159,7 +1164,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
writer.writeEndElement(); // setter
}
}
- foreach (const Node *fnNode, propertyNode->resetters()) {
+ const auto &resetters = propertyNode->resetters();
+ for (const auto *fnNode : resetters) {
if (fnNode) {
const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode);
writer.writeStartElement("resetter");
@@ -1167,7 +1173,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
writer.writeEndElement(); // resetter
}
}
- foreach (const Node *fnNode, propertyNode->notifiers()) {
+ const auto &notifiers = propertyNode->notifiers();
+ for (const auto *fnNode : notifiers) {
if (fnNode) {
const FunctionNode *functionNode = static_cast<const FunctionNode *>(fnNode);
writer.writeStartElement("notifier");
@@ -1191,7 +1198,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
const EnumNode *enumNode = static_cast<const EnumNode *>(node);
if (enumNode->flagsType())
writer.writeAttribute("typedef",enumNode->flagsType()->fullDocumentName());
- foreach (const EnumItem &item, enumNode->items()) {
+ const auto &items = enumNode->items();
+ for (const auto &item : items) {
writer.writeStartElement("value");
writer.writeAttribute("name", item.name());
writer.writeAttribute("value", item.value());
@@ -1227,7 +1235,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
bool external = false;
if (node->isExternalPage())
external = true;
- foreach (const Atom *target, node->doc().targets()) {
+ const auto &targets = node->doc().targets();
+ for (const Atom *target : targets) {
QString title = target->string();
QString name = Doc::canonicalTitle(title);
writer.writeStartElement("target");
@@ -1241,7 +1250,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
}
}
if (node->doc().hasKeywords()) {
- foreach (const Atom *keyword, node->doc().keywords()) {
+ const auto &keywords = node->doc().keywords();
+ for (const Atom *keyword : keywords) {
QString title = keyword->string();
QString name = Doc::canonicalTitle(title);
writer.writeStartElement("keyword");
@@ -1277,7 +1287,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
// files/images, as the generator produces them separately
if (node->isExample() && gen_->format() != QLatin1String("WebXML")) {
const ExampleNode *en = static_cast<const ExampleNode *>(node);
- foreach (const QString &file, en->files()) {
+ const auto &files = en->files();
+ for (const QString &file : files) {
writer.writeStartElement("page");
writer.writeAttribute("name", file);
QString href = gen_->linkForExampleFile(file, en);
@@ -1289,7 +1300,8 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
writer.writeAttribute("subtitle", file);
writer.writeEndElement(); // page
}
- foreach (const QString &file, en->images()) {
+ const auto &images = en->images();
+ for (const QString &file : images) {
writer.writeStartElement("page");
writer.writeAttribute("name", file);
QString href = gen_->linkForExampleFile(file, en);
@@ -1370,8 +1382,8 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN
writer.writeAttribute("refness", QString::number(2));
if (fn->hasAssociatedProperties()) {
QStringList associatedProperties;
- foreach (Node *n, fn->associatedProperties()) {
- associatedProperties << n->name();
+ for (const auto *node : qAsConst(fn->associatedProperties())) {
+ associatedProperties << node->name();
}
associatedProperties.sort();
writer.writeAttribute("associated-property", associatedProperties.join(QLatin1Char(',')));
@@ -1464,8 +1476,9 @@ void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node,
Aggregate *aggregate = static_cast<Aggregate *>(node);
// First write the function children, then write the nonfunction children.
generateFunctionSections(writer, aggregate);
- foreach (Node *n, aggregate->nonfunctionList())
- generateIndexSections(writer, n, post);
+ const auto &nonFunctionList = aggregate->nonfunctionList();
+ for (auto *node : nonFunctionList)
+ generateIndexSections(writer, node, post);
}
if (node == root_) {
diff --git a/src/qdoc/qdoctagfiles.cpp b/src/qdoc/qdoctagfiles.cpp
index 41d485444..bdf001469 100644
--- a/src/qdoc/qdoctagfiles.cpp
+++ b/src/qdoc/qdoctagfiles.cpp
@@ -96,7 +96,8 @@ void QDocTagFiles::destroyQDocTagFiles()
*/
void QDocTagFiles::generateTagFileCompounds(QXmlStreamWriter &writer, const Aggregate *parent)
{
- foreach (const Node *node, const_cast<Aggregate *>(parent)->nonfunctionList()) {
+ const auto &nonFunctionList = const_cast<Aggregate *>(parent)->nonfunctionList();
+ for (const auto *node : nonFunctionList) {
if (!node->url().isEmpty() || node->isPrivate())
continue;
@@ -137,8 +138,8 @@ void QDocTagFiles::generateTagFileCompounds(QXmlStreamWriter &writer, const Aggr
// Classes contain information about their base classes.
const ClassNode *classNode = static_cast<const ClassNode *>(node);
- QList<RelatedClass> bases = classNode->baseClasses();
- foreach (const RelatedClass& related, bases) {
+ const QList<RelatedClass> bases = classNode->baseClasses();
+ for (const auto &related : bases) {
ClassNode *n = related.node_;
if (n)
writer.writeTextElement("base", n->name());
@@ -170,7 +171,8 @@ void QDocTagFiles::generateTagFileCompounds(QXmlStreamWriter &writer, const Aggr
*/
void QDocTagFiles::generateTagFileMembers(QXmlStreamWriter &writer, const Aggregate *parent)
{
- foreach (const Node *node, parent->childNodes()) {
+ const auto &childNodes = parent->childNodes();
+ for (const auto *node : childNodes) {
if (!node->url().isEmpty())
continue;
diff --git a/src/qdoc/qmlcodeparser.cpp b/src/qdoc/qmlcodeparser.cpp
index 8b0b4dcaa..1b8688f00 100644
--- a/src/qdoc/qmlcodeparser.cpp
+++ b/src/qdoc/qmlcodeparser.cpp
@@ -147,7 +147,8 @@ void QmlCodeParser::parseSourceFile(const Location &location, const QString &fil
<< "The output is incomplete.";
}
}
- foreach (const QQmlJS::DiagnosticMessage &msg, parser->diagnosticMessages()) {
+ const auto &messages = parser->diagnosticMessages();
+ for (const auto &msg : messages) {
qDebug().nospace() << qPrintable(filePath) << ':'
#if Q_QML_PRIVATE_API_VERSION < 5
<< msg.loc.startLine << ": QML syntax error at col "
diff --git a/src/qdoc/qmlmarkupvisitor.cpp b/src/qdoc/qmlmarkupvisitor.cpp
index 37a23c072..e99bf5fc3 100644
--- a/src/qdoc/qmlmarkupvisitor.cpp
+++ b/src/qdoc/qmlmarkupvisitor.cpp
@@ -192,7 +192,7 @@ void QmlMarkupVisitor::addMarkedUpToken(
return;
output += QString(QLatin1String("<@%1")).arg(tagName);
- foreach (const QString &key, attributes)
+ for (const auto &key : attributes)
output += QString(QLatin1String(" %1=\"%2\"")).arg(key).arg(attributes[key]);
output += QString(QLatin1String(">%2</@%3>")).arg(protect(sourceText(location)), tagName);
cursor += location.length;
diff --git a/src/qdoc/tokenizer.cpp b/src/qdoc/tokenizer.cpp
index ddfe61002..45c33fa7c 100644
--- a/src/qdoc/tokenizer.cpp
+++ b/src/qdoc/tokenizer.cpp
@@ -518,17 +518,18 @@ void Tokenizer::initialize(const Config &config)
ignoredTokensAndDirectives = new QHash<QByteArray, bool>;
- QStringList tokens = config.getStringList(LANGUAGE_CPP + Config::dot + CONFIG_IGNORETOKENS);
- foreach (const QString &t, tokens) {
- const QByteArray tb = t.toLatin1();
+ const QStringList tokens =
+ config.getStringList(LANGUAGE_CPP + Config::dot + CONFIG_IGNORETOKENS);
+ for (const auto &token : tokens) {
+ const QByteArray tb = token.toLatin1();
ignoredTokensAndDirectives->insert(tb, false);
insertKwordIntoHash(tb.data(), -1);
}
- QStringList directives = config.getStringList(LANGUAGE_CPP + Config::dot
+ const QStringList directives = config.getStringList(LANGUAGE_CPP + Config::dot
+ CONFIG_IGNOREDIRECTIVES);
- foreach (const QString &d, directives) {
- const QByteArray db = d.toLatin1();
+ for (const auto &directive : directives) {
+ const QByteArray db = directive.toLatin1();
ignoredTokensAndDirectives->insert(db, true);
insertKwordIntoHash(db.data(), -1);
}
diff --git a/src/qdoc/tree.cpp b/src/qdoc/tree.cpp
index d29d41503..1ae07c52b 100644
--- a/src/qdoc/tree.cpp
+++ b/src/qdoc/tree.cpp
@@ -112,8 +112,8 @@ Tree::~Tree()
while (i != targetListMap_->end()) {
TargetList *tlist = i.value();
if (tlist) {
- foreach (TargetLoc *tloc, *tlist)
- delete tloc;
+ for (auto *location : qAsConst(*tlist))
+ delete location;
}
delete tlist;
++i;
@@ -364,7 +364,7 @@ void Tree::resolveCppToQmlLinks()
{
const NodeList &children = root_.childNodes();
- foreach (Node *child, children) {
+ for (auto *child : children) {
if (child->isQmlType() || child->isJsType()) {
QmlTypeNode *qcn = static_cast<QmlTypeNode *>(child);
ClassNode *cn = const_cast<ClassNode *>(qcn->classNode());
@@ -381,7 +381,7 @@ void Tree::resolveCppToQmlLinks()
void Tree::resolveUsingClauses()
{
const NodeList &children = root_.childNodes();
- foreach (Node *child, children) {
+ for (auto *child : children) {
if (child->isClassNode()) {
ClassNode *cn = static_cast<ClassNode *>(child);
QList<UsingClause> &usingClauses = cn->usingClauses();
@@ -427,10 +427,11 @@ void Tree::removePrivateAndInternalBases(NamespaceNode *rootNode)
ClassList Tree::allBaseClasses(const ClassNode *classNode) const
{
ClassList result;
- foreach (const RelatedClass &r, classNode->baseClasses()) {
- if (r.node_ != nullptr) {
- result += r.node_;
- result += allBaseClasses(r.node_);
+ const auto &baseClasses = classNode->baseClasses();
+ for (const auto &relatedClass : baseClasses) {
+ if (relatedClass.node_ != nullptr) {
+ result += relatedClass.node_;
+ result += allBaseClasses(relatedClass.node_);
}
}
return result;
@@ -477,19 +478,19 @@ Node *Tree::findNodeRecursive(const QStringList &path,
Aggregate *current = static_cast<Aggregate *>(node);
const NodeList &children = current->childNodes();
const QString &name = path.at(pathIndex);
- foreach (Node *n, children) {
- if (n == nullptr)
+ for (auto *node : children) {
+ if (node == nullptr)
continue;
- if (n->name() == name) {
+ if (node->name() == name) {
if (pathIndex+1 >= path.size()) {
- if ((n->*(isMatch))())
- return n;
+ if ((node->*(isMatch))())
+ return node;
continue;
}
else { // Search the children of n for the next name in the path.
- n = findNodeRecursive(path, pathIndex+1, n, isMatch);
- if (n != nullptr)
- return n;
+ node = findNodeRecursive(path, pathIndex+1, node, isMatch);
+ if (node != nullptr)
+ return node;
}
}
}
@@ -633,10 +634,10 @@ const Node *Tree::matchPathAndTarget(const QStringList &path,
if (node->isAggregate()) {
NodeVector nodes;
static_cast<const Aggregate *>(node)->findChildren(name, nodes);
- foreach (const Node *n, nodes) {
- if (genus != Node::DontCare && n->genus() != genus)
+ for (const auto *node : qAsConst(nodes)) {
+ if (genus != Node::DontCare && node->genus() != genus)
continue;
- const Node *t = matchPathAndTarget(path, idx + 1, target, n, flags, genus, ref);
+ const Node *t = matchPathAndTarget(path, idx + 1, target, node, flags, genus, ref);
if (t && !t->isPrivate())
return t;
}
@@ -650,8 +651,8 @@ const Node *Tree::matchPathAndTarget(const QStringList &path,
}
if (((genus == Node::CPP) || (genus == Node::DontCare)) &&
node->isClassNode() && (flags & SearchBaseClasses)) {
- ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
- foreach (const ClassNode *base, bases) {
+ const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
+ for (const auto *base : bases) {
const Node *t = matchPathAndTarget(path, idx, target, base, flags, genus, ref);
if (t && ! t->isPrivate())
return t;
@@ -720,8 +721,8 @@ const Node *Tree::findNode(const QStringList &path,
}
if ((next == nullptr) && ((genus == Node::CPP) || (genus == Node::DontCare)) &&
node->isClassNode() && (flags & SearchBaseClasses)) {
- ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
- foreach (const ClassNode *base, bases) {
+ const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(node));
+ for (const auto *base : bases) {
next = base->findChildNode(path.at(i), genus, tmpFlags);
if ((next == nullptr) && (flags & SearchEnumValues) && i == path.size() - 1)
next = base->findEnumNodeForValue(path.at(i));
@@ -788,7 +789,7 @@ void Tree::insertTarget(const QString &name,
*/
void Tree::resolveTargets(Aggregate *root)
{
- foreach (Node *child, root->childNodes()) {
+ for (auto *child : root->childNodes()) {
if (child->isTextPageNode()) {
PageNode *node = static_cast<PageNode *>(child);
QString key = node->title();
@@ -1284,8 +1285,8 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &path,
next = aggregate->findChildNode(path.at(i), genus);
if ((next == nullptr) && aggregate->isClassNode()) {
- ClassList bases = allBaseClasses(static_cast<const ClassNode *>(aggregate));
- foreach (ClassNode *base, bases) {
+ const ClassList bases = allBaseClasses(static_cast<const ClassNode *>(aggregate));
+ for (auto *base : bases) {
if (i == path.size() - 1)
next = base->findFunctionChild(path.at(i), parameters);
else