diff options
author | Topi Reinio <topi.reinio@qt.io> | 2023-08-17 19:25:59 +0000 |
---|---|---|
committer | Topi Reinio <topi.reinio@qt.io> | 2023-08-22 07:01:46 +0000 |
commit | 5c73f697368fa41ca842fea178933a47bfa82349 (patch) | |
tree | 213dac2e8e7b31199bd737a019a980030ebb0293 | |
parent | 276bf3c3f45867f2968cad6092f9848d931a6062 (diff) |
qdoc: Fix missing arguments in Node::signature() output
As part of a previous cleanup commit 4c3108e5c2, an overload of
Node::signature() was introduced. This overload took two arguments,
but it was not overridden by FunctionNode, causing the base
implementation to be called at multiple call sites. This base
implementation simply called Node::plainName(), causing a plain
function name to be listed instead of the full signature that
includes argument types and names.
Remove the problematic overload, and modify the remaining signature()
to accept a single argument; a new flag type that controls the parts
to include in the reconstructed signature. This makes the call site
code more readable, compared to three boolean arguments.
Add a test case for the \reentrant command as this problem (missing
arguments in the signature) was associated with its output.
Fixes: QTBUG-115116
Change-Id: I70352532297b25b4c38249c0a724050cad47b07f
(cherry picked from commit e47cb8bb01dd450d00937520022f25dd3d34dde0)
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
19 files changed, 109 insertions, 39 deletions
diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp index 756570dd1..305bb81c8 100644 --- a/src/qdoc/docbookgenerator.cpp +++ b/src/qdoc/docbookgenerator.cpp @@ -3006,7 +3006,7 @@ void DocBookGenerator::generateSignatureList(const NodeList &nodes) m_writer->writeStartElement(dbNamespace, "para"); generateSimpleLink(currentGenerator()->fullDocumentLocation(*n), - (*n)->signature(false, true)); + (*n)->signature(Node::SignaturePlain)); m_writer->writeEndElement(); // para newLine(); @@ -3429,7 +3429,7 @@ void DocBookGenerator::generateReimplementsClause(const FunctionNode *fn) m_writer->writeStartElement(dbNamespace, "para"); m_writer->writeCharacters("Reimplements: "); QString fullName = - overrides->parent()->name() + "::" + overrides->signature(false, true); + overrides->parent()->name() + "::" + overrides->signature(Node::SignaturePlain); generateFullName(overrides->parent(), fullName, overrides); m_writer->writeCharacters("."); m_writer->writeEndElement(); // para @@ -3877,7 +3877,7 @@ void DocBookGenerator::generateDocBookSynopsis(const Node *node) associatedProperties.join(QLatin1Char(','))); } - QString signature = functionNode->signature(false, false); + QString signature = functionNode->signature(Node::SignatureReturnType); // 'const' is already part of FunctionNode::signature() if (functionNode->isFinal()) signature += " final"; diff --git a/src/qdoc/functionnode.cpp b/src/qdoc/functionnode.cpp index f212fdb47..03785801f 100644 --- a/src/qdoc/functionnode.cpp +++ b/src/qdoc/functionnode.cpp @@ -410,24 +410,34 @@ bool FunctionNode::isDeprecated() const */ /*! - Reconstructs and returns the function's signature. If \a values - is \c true, the default values of the parameters are included. - The return type is included unless \a noReturnType is \c true. - Function templates are prefixed with \c {template <parameter_list>} - if \a templateParams is \c true. + Reconstructs and returns the function's signature. + + Specific parts of the signature are included according to + flags in \a options: + + \value Node::SignaturePlain + Plain signature + \value Node::SignatureDefaultValues + Include any default argument values + \value Node::SignatureReturnType + Include return type + \value Node::SignatureTemplateParams + Include \c {template <parameter_list>} if one exists */ -QString FunctionNode::signature(bool values, bool noReturnType, bool templateParams) const +QString FunctionNode::signature(Node::SignatureOptions options) const { QStringList elements; - if (templateParams) + if (options & Node::SignatureTemplateParams) elements << templateDecl(); - if (!noReturnType) + if (options & Node::SignatureReturnType) elements << m_returnType; elements.removeAll(QString()); if (!isMacroWithoutParams()) { - elements << name() + QLatin1Char('(') + m_parameters.signature(values) + QLatin1Char(')'); + elements << name() + QLatin1Char('(') + + m_parameters.signature(options & Node::SignatureDefaultValues) + + QLatin1Char(')'); if (!isMacro()) { if (isConst()) elements << QStringLiteral("const"); @@ -497,7 +507,7 @@ bool FunctionNode::isIgnored() const || name() == QLatin1String("d_func")) { return true; } - QString s = signature(false, false); + QString s = signature(Node::SignatureReturnType); if (s.contains(QLatin1String("enum_type")) && s.contains(QLatin1String("operator|"))) return true; } diff --git a/src/qdoc/functionnode.h b/src/qdoc/functionnode.h index 64f22307e..e720f1522 100644 --- a/src/qdoc/functionnode.h +++ b/src/qdoc/functionnode.h @@ -108,8 +108,7 @@ public: [[nodiscard]] const Parameters ¶meters() const { return m_parameters; } [[nodiscard]] bool isPrivateSignal() const { return m_parameters.isPrivateSignal(); } void setParameters(const QString &signature) { m_parameters.set(signature); } - [[nodiscard]] QString signature(bool values, bool noReturnType, - bool templateParams = false) const override; + [[nodiscard]] QString signature(Node::SignatureOptions options) const override; [[nodiscard]] const QString &overridesThis() const { return m_overridesThis; } [[nodiscard]] const QList<PropertyNode *> &associatedProperties() const { return m_associatedProperties; } diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp index d368dfa98..5da779781 100644 --- a/src/qdoc/generator.cpp +++ b/src/qdoc/generator.cpp @@ -112,7 +112,7 @@ void Generator::appendSignature(Text &text, const Node *node) { text << Atom(Atom::LinkNode, CodeMarker::stringForNode(node)) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << Atom(Atom::String, node->signature(false, true)) + << Atom(Atom::String, node->signature(Node::SignaturePlain)) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); } @@ -1130,7 +1130,8 @@ void Generator::generateReimplementsClause(const FunctionNode *fn, CodeMarker *m Text text; text << Atom::ParaLeft << "Reimplements: "; QString fullName = - overrides->parent()->name() + "::" + overrides->signature(false, true); + overrides->parent()->name() + + "::" + overrides->signature(Node::SignaturePlain); appendFullName(text, overrides->parent(), fullName, overrides); text << "." << Atom::ParaRight; generateText(text, fn, marker); diff --git a/src/qdoc/node.cpp b/src/qdoc/node.cpp index c3c8ac4e8..10b09238c 100644 --- a/src/qdoc/node.cpp +++ b/src/qdoc/node.cpp @@ -68,7 +68,8 @@ bool Node::nodeNameLessThan(const Node *n1, const Node *n2) const auto *f2 = static_cast<const FunctionNode *>(n2); LT_RETURN_IF_NOT_EQUAL(f1->isConst(), f2->isConst()); - LT_RETURN_IF_NOT_EQUAL(f1->signature(false, false), f2->signature(false, false)); + LT_RETURN_IF_NOT_EQUAL(f1->signature(Node::SignatureReturnType), + f2->signature(Node::SignatureReturnType)); } LT_RETURN_IF_NOT_EQUAL(n1->nodeType(), n2->nodeType()); @@ -474,7 +475,7 @@ QString Node::plainSignature() const QString fullName; const Node *node = this; while (node) { - fullName.prepend(node->signature(false, true)); + fullName.prepend(node->signature(Node::SignaturePlain)); if (node->parent()->name().isEmpty()) break; fullName.prepend(QLatin1String("::")); @@ -1015,15 +1016,14 @@ void Node::setDeprecatedSince(const QString &sinceVersion) Sets this node's Genus to \a t. */ -/*! \fn QString Node::signature(bool values, bool noReturnType, bool templateParams) const +/*! \fn QString Node::signature(Node::SignatureOptions options) const - If this node is a FunctionNode, this function returns the function's - signature, including default values if \a values is \c true, - function's return type if \a noReturnType is \c false, and - prefixed with 'template <parameter_list>' for function templates - if templateParams is \true. + Specific parts of the signature are included according to flags in + \a options. If this node is not a FunctionNode, this function returns plainName(). + + \sa FunctionNode::signature() */ /*! \fn const QString &Node::fileNameBase() const diff --git a/src/qdoc/node.h b/src/qdoc/node.h index 85643add6..9c1bef439 100644 --- a/src/qdoc/node.h +++ b/src/qdoc/node.h @@ -99,6 +99,14 @@ public: ThreadSafe }; + enum SignatureOption : unsigned char { + SignaturePlain = 0x0, + SignatureDefaultValues = 0x1, + SignatureReturnType = 0x2, + SignatureTemplateParams = 0x4 + }; + Q_DECLARE_FLAGS(SignatureOptions, SignatureOption) + enum LinkType : unsigned char { StartLink, NextLink, PreviousLink, ContentsLink }; enum FlagValue { FlagValueDefault = -1, FlagValueFalse = 0, FlagValueTrue = 1 }; @@ -186,8 +194,7 @@ public: QString plainFullName(const Node *relative = nullptr) const; [[nodiscard]] QString plainSignature() const; QString fullName(const Node *relative = nullptr) const; - [[nodiscard]] virtual QString signature(bool, bool) const { return plainName(); } - [[nodiscard]] virtual QString signature(bool, bool, bool) const { return plainName(); } + [[nodiscard]] virtual QString signature(Node::SignatureOptions) const { return plainName(); } [[nodiscard]] const QString &fileNameBase() const { return m_fileNameBase; } [[nodiscard]] bool hasFileNameBase() const { return !m_fileNameBase.isEmpty(); } @@ -334,6 +341,8 @@ private: QString m_deprecatedSince {}; }; +Q_DECLARE_OPERATORS_FOR_FLAGS(Node::SignatureOptions) + QT_END_NAMESPACE #endif diff --git a/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdocindexfiles.cpp index 6631eb3af..74de90835 100644 --- a/src/qdoc/qdocindexfiles.cpp +++ b/src/qdoc/qdocindexfiles.cpp @@ -1247,7 +1247,7 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN index file, but it is not read back in by qdoc. However, we need it for the webxml generator. */ - QString signature = fn->signature(false, false); + QString signature = fn->signature(Node::SignatureReturnType); // 'const' is already part of FunctionNode::signature() if (fn->isFinal()) signature += " final"; diff --git a/src/qdoc/tagfilewriter.cpp b/src/qdoc/tagfilewriter.cpp index bef0c693d..53cfcc599 100644 --- a/src/qdoc/tagfilewriter.cpp +++ b/src/qdoc/tagfilewriter.cpp @@ -205,7 +205,7 @@ void TagFileWriter::generateTagFileMembers(QXmlStreamWriter &writer, const Aggre m_generator->fullDocumentLocation(node, false).split(QLatin1Char('#')); writer.writeTextElement("anchorfile", pieces[0]); writer.writeTextElement("anchor", pieces[1]); - QString signature = functionNode->signature(false, false); + QString signature = functionNode->signature(Node::SignatureReturnType); signature = signature.mid(signature.indexOf(QChar('('))).trimmed(); if (functionNode->isConst()) signature += " const"; diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml index 9186b87a1..86a0790b0 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml +++ b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml @@ -8,6 +8,15 @@ <db:abstract> <db:para>A class in a namespace.</db:para> <db:para>This class was introduced in Qt 2.0.</db:para> +<db:note> +<db:para>All functions in this class are <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link> with the following exceptions:</db:para> +<db:para>These functions are not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>:</db:para> +<db:itemizedlist> +<db:listitem> +<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg(int i, bool b)</db:link></db:para> +</db:listitem> +</db:itemizedlist> +</db:note> </db:abstract> </db:info> <db:variablelist> @@ -216,10 +225,12 @@ <db:synopsisinfo role="signature">void someFunctionDefaultArg(int i, bool b)</db:synopsisinfo> <db:synopsisinfo role="access">public</db:synopsisinfo> <db:synopsisinfo role="status">active</db:synopsisinfo> -<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo role="threadsafeness">non-reentrant</db:synopsisinfo> </db:methodsynopsis> <db:para>Function that takes a parameter <db:code role="parameter">i</db:code> and <db:code role="parameter">b</db:code>.</db:para> -</db:section> +<db:warning> +<db:para>This function is not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>.</db:para> +</db:warning></db:section> <db:section xml:id="virtualFun"> <db:title>[virtual] void Test::virtualFun()</db:title> <db:methodsynopsis> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml b/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml index 38a1c6817..a8c4faffc 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml +++ b/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <WebXML> <document> - <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace"> + <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace"> <description> <brief>A class in a namespace.</brief> </description> @@ -99,7 +99,7 @@ <para>Function that takes a parameter <argument>v</argument>. Also returns the value of <argument>v</argument>.</para> </description> </function> - <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)" groups="testgroup"> + <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)" groups="testgroup"> <parameter type="int" name="i" default=""/> <parameter type="bool" name="b" default="false"/> <description> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html index 368591c64..62e5a0e13 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html @@ -41,6 +41,10 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li> <li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li> </ul> +<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p> +<ul> +<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b)</li> +</ul> <h2 id="public-types">Public Types</h2> <div class="table"><table class="alignedsummary" translate="no"> <tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef" translate="no">SomeType</a></b></td></tr> @@ -129,6 +133,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool --> <h3 class="fn" translate="no" id="someFunctionDefaultArg"><code translate="no">[since 2.0] </code><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false)</h3> <p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p> +<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p> <p>This function was introduced in Qt 2.0.</p> <!-- @@@someFunctionDefaultArg --> <!-- $$$virtualFun[overload1]$$$virtualFun --> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index index a159c898d..71b625a9e 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index +++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index @@ -21,7 +21,7 @@ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace"> <contents name="usage" title="Usage" level="1"/> <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/> - <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace"> + <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace"> <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="1" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2(int &x)" groups="testgroup"> <parameter type="int &" name="x" default=""/> </function> @@ -53,7 +53,7 @@ <parameter type="int" name="" default=""/> <parameter type="int" name="v" default="0"/> </function> - <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)" groups="testgroup"> + <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)" groups="testgroup"> <parameter type="int" name="i" default=""/> <parameter type="bool" name="b" default="false"/> </function> @@ -109,6 +109,7 @@ <qmlclass name="TheType" href="qml-thetype.html" status="active" access="public" location="properties.qdoc" documented="true" title="TheType" fulltitle="TheType" subtitle=""> <qmlproperty name="name" fullname="TheType::name" href="qml-thetype.html#name-prop" status="active" access="public" location="properties.qdoc" documented="true" type="string" attached="false" writable="false" brief="Read-only status of this property is resolved from Q_PROPERTY"/> </qmlclass> + <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/> <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/> <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/> <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page"> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml index e693982f3..a9cc63306 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml +++ b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum-docbook/testqdoc-test.xml @@ -8,6 +8,15 @@ <db:abstract> <db:para>A class in a namespace.</db:para> <db:para>This class was introduced in Qt 2.0.</db:para> +<db:note> +<db:para>All functions in this class are <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link> with the following exceptions:</db:para> +<db:para>These functions are not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>:</db:para> +<db:itemizedlist> +<db:listitem> +<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg(int i, bool b)</db:link></db:para> +</db:listitem> +</db:itemizedlist> +</db:note> </db:abstract> </db:info> <db:variablelist> @@ -342,10 +351,12 @@ <db:synopsisinfo role="signature">void someFunctionDefaultArg(int i, bool b)</db:synopsisinfo> <db:synopsisinfo role="access">public</db:synopsisinfo> <db:synopsisinfo role="status">active</db:synopsisinfo> -<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo role="threadsafeness">non-reentrant</db:synopsisinfo> </db:methodsynopsis> <db:para>Function that takes a parameter <db:code role="parameter">i</db:code> and <db:code role="parameter">b</db:code>.</db:para> -</db:section> +<db:warning> +<db:para>This function is not <db:link xlink:href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</db:link>.</db:para> +</db:warning></db:section> <db:section xml:id="virtualFun"> <db:title>[virtual] void Test::virtualFun()</db:title> <db:methodsynopsis> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html index 9027d5d44..a8d0799d4 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html @@ -41,6 +41,10 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li> <li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li> </ul> +<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p> +<ul> +<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b)</li> +</ul> <h2 id="public-types">Public Types</h2> <div class="table"><table class="alignedsummary" translate="no"> <tr><td class="memItemLeft rightAlign topAlign"> enum </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#ClassicEnum-enum" translate="no">ClassicEnum</a></b> { Yee, Haw, Howdy, Partner }</td></tr> @@ -148,6 +152,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool --> <h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false)</h3> <p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p> +<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p> <!-- @@@someFunctionDefaultArg --> <!-- $$$virtualFun[overload1]$$$virtualFun --> <h3 class="fn" translate="no" id="virtualFun"><code translate="no">[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html index a52a987ed..cbe201447 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html @@ -41,6 +41,10 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li> <li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li> </ul> +<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p> +<ul> +<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b)</li> +</ul> <h2 id="public-types">Public Types</h2> <div class="table"><table class="alignedsummary" translate="no"> <tr><td class="memItemLeft rightAlign topAlign"> struct </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test-struct.html" translate="no">Struct</a></b></td></tr> @@ -139,6 +143,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool --> <h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false)</h3> <p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p> +<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p> <!-- @@@someFunctionDefaultArg --> <!-- $$$virtualFun[overload1]$$$virtualFun --> <h3 class="fn" translate="no" id="virtualFun"><code translate="no">[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index index cda202ac8..3509e2834 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index +++ b/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index @@ -20,7 +20,7 @@ <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" module="TestCPP" brief="A namespace"> <contents name="usage" title="Usage" level="1"/> <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="0" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/> - <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace"> + <class threadsafety="reentrant" name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" since="2.0" documented="true" groups="cpptypes,testgroup" module="TestCPP" brief="A class in a namespace"> <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="1" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2(int &x)" groups="testgroup"> <parameter type="int &" name="x" default=""/> </function> @@ -52,7 +52,7 @@ <parameter type="int" name="" default=""/> <parameter type="int" name="v" default="0"/> </function> - <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)" groups="testgroup"> + <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" threadsafety="non-reentrant" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)" groups="testgroup"> <parameter type="int" name="i" default=""/> <parameter type="bool" name="b" default="false"/> </function> @@ -67,6 +67,7 @@ <typedef name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-typedef" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/> </class> </namespace> + <page name="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" status="active" location="classlists.qdoc" documented="true" subtype="externalpage" title="reentrant" fulltitle="reentrant" subtitle=""/> <group name="cpptypes" href="cpptypes.html" status="active" location="classlists.qdoc" documented="true" seen="true" title="Test C++ Types"/> <group name="testgroup" href="testgroup.html" status="internal" seen="false" title=""/> <module name="TestCPP" href="testcpp-module.html" status="active" since="2.0" documented="true" seen="true" title="QDoc Test C++ Classes" brief="A test module page"> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html index 345a97221..81e2782cb 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html @@ -41,6 +41,10 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li> <li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li> </ul> +<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p> +<ul> +<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b)</li> +</ul> <h2 id="public-types">Public Types</h2> <div class="table"><table class="alignedsummary" translate="no"> <tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#SomeType-typedef" translate="no">SomeType</a></b></td></tr> @@ -128,6 +132,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr> <!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool --> <h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false)</h3> <p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p> +<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p> <!-- @@@someFunctionDefaultArg --> <!-- $$$virtualFun[overload1]$$$virtualFun --> <h3 class="fn" translate="no" id="virtualFun"><code translate="no">[virtual] </code><span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3> diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/classlists.qdoc b/tests/auto/qdoc/generatedoutput/testdata/testcpp/classlists.qdoc index 8f6e9b6b7..89ed2a1b5 100644 --- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/classlists.qdoc +++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/classlists.qdoc @@ -41,3 +41,8 @@ \generatelist testgroup */ + +/*! + \externalpage https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command + \title reentrant +*/ diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp index 68bd598d5..61ba19fdb 100644 --- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp +++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp @@ -70,6 +70,7 @@ namespace TestQDoc { \endif \ingroup testgroup \ingroup cpptypes + \reentrant */ /*! @@ -143,6 +144,7 @@ void Test::anotherObsoleteMember() } /*! + \nonreentrant Function that takes a parameter \a i and \a b. \if defined(test_ignoresince) \since 2.0 |