From ae61ca60b54b645358ad15111ed5991925edeaeb Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Fri, 28 Jan 2022 15:24:59 +0100 Subject: 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 (cherry picked from commit 8ccf60bfc25504c89ac632f1ddefecabf741fdee) Reviewed-by: Qt Cherry-pick Bot --- src/qdoc/docbookgenerator.cpp | 4 +--- .../properties-docbook/testqdoc-testderived.xml | 17 ++++++++++++++++- .../expected_output/properties/testcpp.index | 2 ++ .../properties/testqdoc-testderived-members.html | 1 + .../properties/testqdoc-testderived.html | 5 +++++ .../generatedoutput/testdata/testcpp/testcpp.cpp | 20 ++++++++++++++++++++ .../qdoc/generatedoutput/testdata/testcpp/testcpp.h | 8 ++++++++ 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 @@ This is a private signal. It can be used in signal connections but cannot be emitted by the user. + +[override virtual] TestDerived::int id() + +virtual +int +id +override + +plain +int id() override +public +active +unspecified + +Reimplements an access function for property: Test::id. [invokable] TestDerived::void invokeMe() const @@ -252,4 +267,4 @@ - + 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 @@ + @@ -65,6 +66,7 @@ + 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 @@
  • funcPtr(bool, const char *) : void (*)(bool)
  • getInt() : int *
  • +
  • id() : int
  • inlineFunction()
  • invokeMe() const
  • name() const : const QString *
  • 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)Reimplemented Public Functions
    +
    virtual int id() override
    virtual void virtualFun() override

    Public Slots

    @@ -142,6 +143,10 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)[override virtual] int TestDerived::id() +

    Reimplements an access function for property: Test::id.

    +

    [invokable] void TestDerived::invokeMe() const

    Something invokable.

    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 @@ -129,6 +129,14 @@ namespace TestQDoc { \ingroup testgroup */ +/*! +\if defined(test_properties) + \property Test::id +\else + \nothing +\endif +*/ + /*! \deprecated [6.0] Use someFunction() instead. */ @@ -276,6 +284,18 @@ void TestDerived::staticObsoleteMember() \endif */ +/*! +\if defined(test_properties) + \reimp +\else + \nothing +\endif +*/ +int TestDerived::id() +{ + return 1; +} + /*! \if defined(test_template) \fn template void TestQDoc::Test::funcTemplate(T1 a, T2 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); -- cgit v1.2.3