summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2022-01-28 15:24:59 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-01-31 09:34:23 +0000
commitae61ca60b54b645358ad15111ed5991925edeaeb (patch)
treef8d4130f8d077a7829edf7885f4ab740beb51c4b
parentcafdb2dbcc1efd2744649550d62d7475d7191e4a (diff)
qdoc: DocBook generator: Fix reimplements clause generation
Fixes ASSERT: "actualNode" in file qttools/src/qdoc/docbookgenerator.cpp, line 4246 There was an apparent copy-paste error in DocBookGenerator::generateReimplementsClause(), causing an assert in DocBookGenerator::generateFullName(). Fixes: QTBUG-100316 Change-Id: I7ca6ba53fbf814a65e6f37ff91ee2aea7fa01643 Reviewed-by: Paul Wicking <paul.wicking@qt.io> (cherry picked from commit 8ccf60bfc25504c89ac632f1ddefecabf741fdee) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/qdoc/docbookgenerator.cpp4
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml17
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html5
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp20
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h8
7 files changed, 53 insertions, 4 deletions
diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp
index 2f1fd27ff..6c7d1e81a 100644
--- a/src/qdoc/docbookgenerator.cpp
+++ b/src/qdoc/docbookgenerator.cpp
@@ -2343,7 +2343,7 @@ void DocBookGenerator::generateReimplementsClause(const FunctionNode *fn)
m_writer->writeStartElement(dbNamespace, "para");
m_writer->writeCharacters("Reimplements an access function for property: ");
QString fullName = sameName->parent()->name() + "::" + sameName->name();
- generateFullName(sameName->parent(), fullName, overrides);
+ generateFullName(sameName->parent(), fullName, sameName);
m_writer->writeCharacters(".");
return;
}
@@ -4246,8 +4246,6 @@ void DocBookGenerator::generateFullName(const Node *apparentNode, const QString
Q_ASSERT(actualNode);
// From Generator::appendFullName.
- if (actualNode == nullptr)
- actualNode = apparentNode;
m_writer->writeStartElement(dbNamespace, "link");
m_writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(actualNode));
m_writer->writeAttribute("type", targetType(actualNode));
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml b/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml
index 5dd6c8886..757b475df 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml
+++ b/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml
@@ -195,6 +195,21 @@
<db:note>
<db:para>This is a private signal. It can be used in signal connections but cannot be emitted by the user.</db:para></db:note>
</db:section>
+<db:section xml:id="id">
+<db:title>[override virtual] TestDerived::int id()</db:title>
+<db:methodsynopsis>
+<db:modifier>virtual</db:modifier>
+<db:type>int</db:type>
+<db:methodname>id</db:methodname>
+<db:modifier>override</db:modifier>
+<db:void/>
+<db:synopsisinfo db:role="meta">plain</db:synopsisinfo>
+<db:synopsisinfo db:role="signature">int id() override</db:synopsisinfo>
+<db:synopsisinfo db:role="access">public</db:synopsisinfo>
+<db:synopsisinfo db:role="status">active</db:synopsisinfo>
+<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo>
+</db:methodsynopsis>
+<db:para>Reimplements an access function for property: <db:link xlink:href="testqdoc-test.xml#id-prop" type="property">Test::id</db:link>.</db:para>
<db:section xml:id="invokeMe">
<db:title>[invokable] TestDerived::void invokeMe() const</db:title>
<db:methodsynopsis>
@@ -252,4 +267,4 @@
</db:section>
</db:section>
</db:section>
-</db:section></db:article>
+</db:section></db:section></db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index
index 4ac50b93e..4a6de7b7d 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index
+++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index
@@ -57,6 +57,7 @@
</function>
<function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void" signature="void virtualFun()"/>
<typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/>
+ <property name="id" fullname="TestQDoc::Test::id" href="testqdoc-test.html#id-prop" status="active" access="public" location="testcpp.h" documented="true"/>
</class>
<class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A derived class in a namespace">
<function name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" associated-property="bindableProp" type="QBindable&lt;QString&gt;" signature="QBindable&lt;QString&gt; bindableProp()"/>
@@ -65,6 +66,7 @@
<function name="boolPropChanged" fullname="TestQDoc::TestDerived::boolPropChanged" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="signal" virtual="non" const="false" static="false" final="false" override="false" associated-property="boolProp" type="void" signature="void boolPropChanged()"/>
<function name="emitSomething" fullname="TestQDoc::TestDerived::emitSomething" href="testqdoc-testderived.html#emitSomething" status="active" access="public" location="testcpp.h" documented="true" meta="signal" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void emitSomething()"/>
<function name="getInt" fullname="TestQDoc::TestDerived::getInt" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" associated-property="intProp" type="int *" signature="int * getInt()"/>
+ <function name="id" fullname="TestQDoc::TestDerived::id" href="testqdoc-testderived.html#id" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="true" type="int" signature="int id() override"/>
<function name="invokeMe" fullname="TestQDoc::TestDerived::invokeMe" href="testqdoc-testderived.html#invokeMe" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="true" static="false" final="false" override="false" type="void" brief="Something invokable" signature="void invokeMe() const"/>
<function name="name" fullname="TestQDoc::TestDerived::name" href="testqdoc-testderived.html#name-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="true" static="false" final="false" override="false" associated-property="name" type="const QString *" signature="const QString * name() const"/>
<function name="resetBoolProp" fullname="TestQDoc::TestDerived::resetBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" virtual="non" const="false" static="false" final="false" override="false" associated-property="boolProp" type="void" signature="void resetBoolProp()"/>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html
index 44ac132be..f10eec781 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html
@@ -27,6 +27,7 @@
</ul></td><td class="topAlign"><ul>
<li class="fn"><span class="name"><b><a href="testqdoc-test.html#funcPtr">funcPtr</a></b></span>(bool, const char *) : void (*)(bool)</li>
<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#intProp-prop">getInt</a></b></span>() : int *</li>
+<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#id">id</a></b></span>() : int</li>
<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li>
<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#invokeMe">invokeMe</a></b></span>() const</li>
<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#name-prop">name</a></b></span>() const : const QString *</li>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html
index f6fd4a662..f18860982 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html
@@ -62,6 +62,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr><tr><td class="me
</table></div>
<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2>
<div class="table"><table class="alignedsummary">
+<tr><td class="memItemLeft rightAlign topAlign"> virtual int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#id">id</a></b>() override</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b>() override</td></tr>
</table></div>
<h2 id="public-slots">Public Slots</h2>
@@ -142,6 +143,10 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr><tr><td class="me
<p>Emitted when things happen.</p>
<p><b>Note: </b>This is a private signal. It can be used in signal connections but cannot be emitted by the user.</p>
<!-- @@@emitSomething -->
+<!-- $$$id[overload1]$$$id -->
+<h3 class="fn" id="id"><code>[override virtual] </code><span class="type">int</span> TestDerived::<span class="name">id</span>()</h3>
+<p>Reimplements an access function for property: <a href="testqdoc-test.html#id-prop">Test::id</a>.</p>
+<!-- @@@id -->
<!-- $$$invokeMe[overload1]$$$invokeMe -->
<h3 class="fn" id="invokeMe"><code>[invokable] </code><span class="type">void</span> TestDerived::<span class="name">invokeMe</span>() const</h3>
<p>Something invokable.</p>
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
index d80267154..9d321c65c 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
+++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
@@ -130,6 +130,14 @@ namespace TestQDoc {
*/
/*!
+\if defined(test_properties)
+ \property Test::id
+\else
+ \nothing
+\endif
+*/
+
+/*!
\deprecated [6.0] Use someFunction() instead.
*/
void Test::deprecatedMember()
@@ -277,6 +285,18 @@ void TestDerived::staticObsoleteMember()
*/
/*!
+\if defined(test_properties)
+ \reimp
+\else
+ \nothing
+\endif
+*/
+int TestDerived::id()
+{
+ return 1;
+}
+
+/*!
\if defined(test_template)
\fn template <typename T1, typename T2> void TestQDoc::Test::funcTemplate(T1 a, T2 b)
\brief Function template with two parameters, \a a and \a b.
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h
index 80077da63..fd80b8c99 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h
+++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h
@@ -39,6 +39,10 @@
namespace TestQDoc {
class Test {
+#ifdef test_properties
+ Q_OBJECT
+ Q_PROPERTY(int id READ id)
+#endif
public:
#ifdef test_template
@@ -95,6 +99,9 @@ protected:
a = b;
}
#endif
+#ifdef test_properties
+ virtual int id() { return 0; }
+#endif
};
class TestDerived : public Test {
@@ -122,6 +129,7 @@ public:
const QString *name() const;
Q_INVOKABLE void invokeMe() const {}
+ int id() override;
Q_SIGNALS:
void emitSomething(QPrivateSignal);