summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qdoc/configure.pri8
-rw-r--r--src/qdoc/cppcodeparser.cpp3
-rw-r--r--src/qdoc/node.h4
-rw-r--r--src/qdoc/sections.cpp40
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html12
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html25
-rw-r--r--tests/auto/qdoc/generatedoutput/qmlpropertygroups/parent.qdoc52
-rw-r--r--tests/auto/qdoc/generatedoutput/qmlpropertygroups/qmlpropertygroups.qdocconf7
-rw-r--r--tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp7
9 files changed, 117 insertions, 41 deletions
diff --git a/src/qdoc/configure.pri b/src/qdoc/configure.pri
index e9d7667c0..670ad5e7b 100644
--- a/src/qdoc/configure.pri
+++ b/src/qdoc/configure.pri
@@ -1,7 +1,7 @@
-defineReplace(extractVersion) { return($$replace(1, ^(\\d+\\.\\d+\\.\\d+)(svn)?$, \\1)) }
-defineReplace(extractMajorVersion) { return($$replace(1, ^(\\d+)\\.\\d+\\.\\d+(svn)?$, \\1)) }
-defineReplace(extractMinorVersion) { return($$replace(1, ^\\d+\\.(\\d+)\\.\\d+(svn)?$, \\1)) }
-defineReplace(extractPatchVersion) { return($$replace(1, ^\\d+\\.\\d+\\.(\\d+)(svn)?$, \\1)) }
+defineReplace(extractVersion) { return($$replace(1, ^(\\d+\\.\\d+\\.\\d+)(svn|git)?$, \\1)) }
+defineReplace(extractMajorVersion) { return($$replace(1, ^(\\d+)\\.\\d+\\.\\d+(svn|git)?$, \\1)) }
+defineReplace(extractMinorVersion) { return($$replace(1, ^\\d+\\.(\\d+)\\.\\d+(svn|git)?$, \\1)) }
+defineReplace(extractPatchVersion) { return($$replace(1, ^\\d+\\.\\d+\\.(\\d+)(svn|git)?$, \\1)) }
defineTest(versionIsAtLeast) {
actual_major_version = $$extractMajorVersion($$1)
diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp
index 6a5087583..c60957793 100644
--- a/src/qdoc/cppcodeparser.cpp
+++ b/src/qdoc/cppcodeparser.cpp
@@ -455,6 +455,7 @@ void CppCodeParser::processQmlProperties(const Doc &doc, NodeList &nodes, DocLis
docs.append(doc);
for (const auto n : sharedNodes)
scn->append(n);
+ scn->sort();
}
}
@@ -947,6 +948,8 @@ void CppCodeParser::processTopicArgs(const Doc &doc, const QString &topic, NodeL
}
}
}
+ for (auto *scn : sharedCommentNodes)
+ scn->sort();
}
}
}
diff --git a/src/qdoc/node.h b/src/qdoc/node.h
index 5a97d194a..739c262b4 100644
--- a/src/qdoc/node.h
+++ b/src/qdoc/node.h
@@ -952,6 +952,10 @@ public:
n->setSharedCommentNode(this);
setGenus(n->genus());
}
+ void sort()
+ {
+ std::sort(collective_.begin(), collective_.end(), Node::nodeNameLessThan);
+ }
const QVector<Node *> &collective() const { return collective_; }
void setOverloadFlags();
void setRelatedNonmember(bool b) override;
diff --git a/src/qdoc/sections.cpp b/src/qdoc/sections.cpp
index edfa212ce..64bef16b4 100644
--- a/src/qdoc/sections.cpp
+++ b/src/qdoc/sections.cpp
@@ -30,6 +30,7 @@
#include "config.h"
#include "generator.h"
+#include "loggingcategory.h"
#include <QtCore/qdebug.h>
#include <QtCore/qobjectdefs.h>
@@ -979,7 +980,6 @@ void Sections::buildStdCppClassRefPageSections()
allMembers.insert(n);
if (!documentAll && !n->hasDoc())
continue;
- // distributeNodeInSummaryVector(sv, n); Why was this here? mws 03/07/2019
}
pushBaseClasses(stack, cn);
}
@@ -1000,51 +1000,29 @@ void Sections::buildStdQmlTypeRefPageSections()
Section &allMembers = allMembersSection();
const Aggregate *qtn = aggregate_;
- while (true) {
+ while (qtn) {
if (!qtn->isAbstract() || !classMap)
classMap = allMembers.newClassMap(qtn);
- for (auto it = qtn->constBegin(); it != qtn->constEnd(); ++it) {
- Node *n = *it;
+ for (const auto n : qtn->childNodes()) {
if (n->isInternal())
continue;
if (!n->isSharedCommentNode() || n->isPropertyGroup())
allMembers.add(classMap, n);
- distributeQmlNodeInSummaryVector(summarySections, n);
- distributeQmlNodeInDetailsVector(detailsSections, n);
+ if (qtn == aggregate_ || qtn->isAbstract()) {
+ distributeQmlNodeInSummaryVector(summarySections, n);
+ distributeQmlNodeInDetailsVector(detailsSections, n);
+ }
}
if (qtn->qmlBaseNode() == qtn) {
- qDebug() << "qdoc internal error: circular type definition."
- << "QML type" << qtn->name() << "can't be its own base type";
- qtn = nullptr;
+ qCDebug(lcQdoc, "error: circular type definition: '%s' inherits itself",
+ qPrintable(qtn->name()));
break;
}
qtn = static_cast<QmlTypeNode *>(qtn->qmlBaseNode());
- if (qtn == nullptr)
- break;
- if (!qtn->isAbstract())
- break;
}
- while (qtn != nullptr) {
- if (!qtn->isAbstract() || !classMap)
- classMap = allMembers.newClassMap(qtn);
- for (auto it = qtn->constBegin(); it != qtn->constEnd(); ++it) {
- Node *n = *it;
- if (n->isInternal() || n->isSharedCommentNode())
- continue;
-
- allMembers.add(classMap, n);
- }
- if (qtn->qmlBaseNode() == qtn) {
- qDebug() << "qdoc internal error: circular type definition."
- << "QML type" << qtn->name() << "can't be its own base type";
- qtn = nullptr;
- break;
- }
- qtn = static_cast<QmlTypeNode *>(qtn->qmlBaseNode());
- }
reduce(summarySections);
reduce(detailsSections);
allMembers.reduce();
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
index d4c278659..363a4bf16 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
@@ -73,12 +73,12 @@
<div class="qmlitem"><div class="fngroup">
<div class="qmlproto">
<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="fourth-prop">
-<td class="tblQmlPropNode"><p>
-<span class="name">fourth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
<tr valign="top" class="odd" id="fifth-prop">
<td class="tblQmlPropNode"><p>
<span class="name">fifth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
+<tr valign="top" class="odd" id="fourth-prop">
+<td class="tblQmlPropNode"><p>
+<span class="name">fourth</span> : <span class="type"><a href="qml-int.html">int</a></span></p></td></tr>
</table></div></div>
</div><div class="qmldoc"><p>A group of properties sharing a documentation comment.</p>
</div></div><!-- @@@ -->
@@ -161,12 +161,12 @@
<div class="qmlitem"><div class="fngroup">
<div class="qmlproto">
<div class="table"><table class="qmlname">
-<tr valign="top" class="odd" id="enable-method">
-<td class="tblQmlFuncNode"><p>
-<span class="name">enable</span>()</p></td></tr>
<tr valign="top" class="odd" id="disable-method">
<td class="tblQmlFuncNode"><p>
<span class="name">disable</span>()</p></td></tr>
+<tr valign="top" class="odd" id="enable-method">
+<td class="tblQmlFuncNode"><p>
+<span class="name">enable</span>()</p></td></tr>
</table></div></div>
</div><div class="qmldoc"><p>Enables or disables this type.</p>
</div></div><!-- @@@ -->
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
new file mode 100644
index 000000000..aa80b49df
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- parent.qdoc -->
+ <title>List of All Members for AnotherChild | Test</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">List of All Members for AnotherChild</h1>
+<p>This is the complete list of members for <a href="qml-qdoc-test-anotherchild.html">AnotherChild</a>, including inherited members.</p>
+<ul>
+<li class="fn"><b><b><a href="qml-qdoc-test-anotherchild.html#name-prop">name</a></b></b> : string</li>
+</ul>
+<p>The following members are inherited from <a href="qml-qdoc-test-parent.html">Parent</a>.</p>
+<ul>
+<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group-prop">group</a></b></b><ul>
+<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.a-prop">group.a</a></b></b> : int</li>
+<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.b-prop">group.b</a></b></b> : int</li>
+<li class="fn"><b><b><a href="qml-qdoc-test-parent.html#group.c-prop">group.c</a></b></b> : int</li>
+</ul>
+</li>
+</ul>
+</body>
+</html>
diff --git a/tests/auto/qdoc/generatedoutput/qmlpropertygroups/parent.qdoc b/tests/auto/qdoc/generatedoutput/qmlpropertygroups/parent.qdoc
new file mode 100644
index 000000000..c7002e96b
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/qmlpropertygroups/parent.qdoc
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \qmltype Parent
+ \inqmlmodule QDoc.Test
+ \brief Base QML type.
+*/
+
+/*!
+ \qmlproperty int Parent::group.c
+ \qmlproperty int Parent::group.a
+ \qmlproperty int Parent::group.b
+ \brief Property group.
+*/
+
+/*!
+ \qmltype AnotherChild
+ \inqmlmodule QDoc.Test
+ \inherits Parent
+ \brief Just another child inheriting a parent.
+*/
+
+/*!
+ \qmlproperty string AnotherChild::name
+ \brief Name of this child.
+*/
diff --git a/tests/auto/qdoc/generatedoutput/qmlpropertygroups/qmlpropertygroups.qdocconf b/tests/auto/qdoc/generatedoutput/qmlpropertygroups/qmlpropertygroups.qdocconf
new file mode 100644
index 000000000..6ed830c82
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/qmlpropertygroups/qmlpropertygroups.qdocconf
@@ -0,0 +1,7 @@
+include(../testqml.qdocconf)
+
+includepaths += ..
+sourcedirs += .
+
+HTML.nosubdirs = true
+HTML.outputsubdir = qmlpropertygroups
diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
index a56e0fd7d..ce4aefa99 100644
--- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
+++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
@@ -48,6 +48,7 @@ private slots:
void webXmlFromCppBug80259();
void examplesManifestXml();
+ void inheritedQmlPropertyGroups();
private:
QScopedPointer<QTemporaryDir> m_outputDir;
@@ -244,6 +245,12 @@ void tst_generatedOutput::examplesManifestXml()
"examples-manifest.xml");
}
+void tst_generatedOutput::inheritedQmlPropertyGroups()
+{
+ testAndCompare("qmlpropertygroups/qmlpropertygroups.qdocconf",
+ "qmlpropertygroups/qml-qdoc-test-anotherchild-members.html");
+}
+
QTEST_APPLESS_MAIN(tst_generatedOutput)
#include "tst_generatedoutput.moc"