diff options
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" |