From 42979dea7669899b50bef2848d0e450d1258c9c1 Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Wed, 14 Oct 2020 16:47:08 +0200 Subject: qdoc: Allow documenting implicitly generated special member functions Implicitly generated class members such as default constructor are not visible in the Clang AST, and QDoc failed to match \fn commands for such functions. Fix this by visiting the translation unit generated for the \fn command, and constructing a temporary FunctionNode. If this temporary node is of any of the special member types that can be implicit, add that function as a child to the class node. Add 'default' attribute for such functions in the generated docs. Fixes: QTBUG-86984 Change-Id: I6c662e4ca030d80b68dd22f3639526093c27c20b Reviewed-by: Paul Wicking --- .../crossmodule/testtype-members.html | 1 + .../expected_output/docbook/testqdoc-test.xml | 35 ++++++++++++++++++++++ .../expected_output/dontdocument/dontdocument.qhp | 1 + .../expected_output/html/testqdoc-test.webxml | 11 +++++++ .../expected_output/ignoresince/testqdoc-test.html | 10 +++++++ .../expected_output/properties/testcpp.index | 4 +++ .../properties/testqdoc-testderived-members.html | 3 +- .../scopedenum-docbook/testqdoc-test.xml | 35 ++++++++++++++++++++++ .../expected_output/scopedenum/testqdoc-test.html | 10 +++++++ .../expected_output/template/testqdoc-test.html | 10 +++++++ .../qdoc/generatedoutput/expected_output/test.qhp | 1 + .../generatedoutput/expected_output/testcpp.index | 4 +++ .../expected_output/testqdoc-test-members.html | 2 ++ .../expected_output/testqdoc-test.html | 10 +++++++ .../testqdoc-testderived-members.html | 1 + .../expected_output/testtagfile.tags | 14 +++++++++ .../generatedoutput/testdata/testcpp/testcpp.cpp | 12 ++++++++ 17 files changed, 163 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html b/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html index 327176bb9..a0cd1df67 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/crossmodule/testtype-members.html @@ -14,6 +14,7 @@
  • DerivedType
  • NotTypedef
  • typedef SomeType
  • +
  • operator=(TestQDoc::Test &&) : TestQDoc::Test &
  • funcPtr(bool , const char *) : void (*)(bool)
  • inlineFunction()
  • nothing()
  • 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 8e185d26c..ec4930b3f 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml +++ b/tests/auto/qdoc/generatedoutput/expected_output/docbook/testqdoc-test.xml @@ -59,6 +59,41 @@ [protected, since Test 1.2] Test::void overload(bool b) Overloads that share a documentation comment, optionally taking a parameter b. + +[default] Test::Test() + + +Test +default + +constructor +Test() = default +public +active +unspecified +TestCPP + +Default constructor. + + +[default] Test::TestQDoc::Test &operator=(TestQDoc::Test &&other) + +TestQDoc::Test & +operator= +default + +TestQDoc::Test && +other + +move-assign +TestQDoc::Test & operator=(TestQDoc::Test &&other) = default +public +active +unspecified +TestCPP + +Move-assigns other. + Test::void (*)(bool) funcPtr(bool b, const char *s) diff --git a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp index 57bea1d0e..91a59da47 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp +++ b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/dontdocument.qhp @@ -35,6 +35,7 @@ + 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 f84122127..c7b2e8126 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml +++ b/tests/auto/qdoc/generatedoutput/expected_output/html/testqdoc-test.webxml @@ -11,6 +11,11 @@ A macro with argument x. + + + Default constructor. + + Use obsoleteMember() instead. @@ -42,6 +47,12 @@ Use someFunction() instead. + + + + Move-assigns other. + + 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 262020fb1..7775e44c3 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,8 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)

    Public Functions

    + + @@ -83,6 +85,14 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)
    Test()
    TestQDoc::Test &operator=(TestQDoc::Test &&other)
    void (*)(bool) funcPtr(bool b, const char *s)
    void inlineFunction()
    int someFunction(int v = 0)
    [protected] void Test::overload()

    [protected, since Test 1.2] void Test::overload(bool b)

    Overloads that share a documentation comment, optionally taking a parameter b.

    + +

    [default] Test::Test()

    +

    Default constructor.

    + + +

    [default] TestQDoc::Test &Test::operator=(TestQDoc::Test &&other)

    +

    Move-assigns other.

    +

    void (*)(bool) Test::funcPtr(bool b, const char *s)

    Returns a pointer to a function that takes a boolean. Uses b and s.

    diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index index e757ff4de..8d8d7837b 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index +++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index @@ -14,6 +14,7 @@ + @@ -25,6 +26,9 @@ + + + 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 4c6d4bb14..452399c69 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 @@ -17,12 +17,13 @@
  • typedef SomeType
  • bindablePropChanged()
  • boolPropChanged()
  • +
  • operator=(TestQDoc::Test &&) : TestQDoc::Test &
  • resetBoolProp()
  • setBindableProp(const QString &)
  • setBoolProp(bool )
  • bindableProp() : QBindable<QString>
  • -
  • boolProp() : bool
    • +
    • boolProp() : bool
    • funcPtr(bool , const char *) : void (*)(bool)
    • getInt() : int *
    • inlineFunction()
    • 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 7b1efb8e7..76c0acc35 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 @@ -109,6 +109,41 @@ [protected, since Test 1.2] Test::void overload(bool b) Overloads that share a documentation comment, optionally taking a parameter b. + +[default] Test::Test() + + +Test +default + +constructor +Test() = default +public +active +unspecified +TestCPP + +Default constructor. + + +[default] Test::TestQDoc::Test &operator=(TestQDoc::Test &&other) + +TestQDoc::Test & +operator= +default + +TestQDoc::Test && +other + +move-assign +TestQDoc::Test & operator=(TestQDoc::Test &&other) = default +public +active +unspecified +TestCPP + +Move-assigns other. + Test::void (*)(bool) funcPtr(bool b, const char *s) 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 1cf5c2d18..f61a05b3b 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html @@ -42,6 +42,8 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)

    Public Functions

    + + @@ -92,6 +94,14 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)
    Test()
    TestQDoc::Test &operator=(TestQDoc::Test &&other)
    void (*)(bool) funcPtr(bool b, const char *s)
    void inlineFunction()
    int someFunction(int v = 0)
    [protected] void Test::overload()

    [protected, since Test 1.2] void Test::overload(bool b)

    Overloads that share a documentation comment, optionally taking a parameter b.

    + +

    [default] Test::Test()

    +

    Default constructor.

    + + +

    [default] TestQDoc::Test &Test::operator=(TestQDoc::Test &&other)

    +

    Move-assigns other.

    +

    void (*)(bool) Test::funcPtr(bool b, const char *s)

    Returns a pointer to a function that takes a boolean. Uses b and s.

    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 b1939c994..1d12cc64d 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html @@ -43,6 +43,8 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)

    Public Functions

    + + @@ -90,6 +92,14 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)
    Test()
    TestQDoc::Test &operator=(TestQDoc::Test &&other)
    void (*)(bool) funcPtr(bool b, const char *s)
    void inlineFunction()
    int someFunction(int v = 0)
    [protected] void Test::overload()

    [protected, since Test 1.2] void Test::overload(bool b)

    Overloads that share a documentation comment, optionally taking a parameter b.

    + +

    [default] Test::Test()

    +

    Default constructor.

    + + +

    [default] TestQDoc::Test &Test::operator=(TestQDoc::Test &&other)

    +

    Move-assigns other.

    +

    void (*)(bool) Test::funcPtr(bool b, const char *s)

    Returns a pointer to a function that takes a boolean. Uses b and s.

    diff --git a/tests/auto/qdoc/generatedoutput/expected_output/test.qhp b/tests/auto/qdoc/generatedoutput/expected_output/test.qhp index 5745fdc64..e87431660 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/test.qhp +++ b/tests/auto/qdoc/generatedoutput/expected_output/test.qhp @@ -111,6 +111,7 @@ + diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index index 1f7d21c0c..ef3dd6cbd 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index +++ b/tests/auto/qdoc/generatedoutput/expected_output/testcpp.index @@ -13,6 +13,7 @@ + @@ -24,6 +25,9 @@ + + + diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html index 4dbdd1e41..03e834d7b 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html @@ -12,6 +12,8 @@

    This is the complete list of members for TestQDoc::Test, including inherited members.

    • typedef SomeType
    • +
    • Test()
    • +
    • operator=(TestQDoc::Test &&) : TestQDoc::Test &
    • funcPtr(bool , const char *) : void (*)(bool)
    • inlineFunction()
    • overload()
    • diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html index 23627fc9d..ada97f741 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html @@ -41,6 +41,8 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)

    Public Functions

    + + @@ -83,6 +85,14 @@ target_link_libraries(mytarget PUBLIC Qt::QDocTest)
    Test()
    TestQDoc::Test &operator=(TestQDoc::Test &&other)
    void (*)(bool) funcPtr(bool b, const char *s)
    void inlineFunction()
    int someFunction(int v = 0)
    [protected] void Test::overload()

    [protected, since Test 1.2] void Test::overload(bool b)

    Overloads that share a documentation comment, optionally taking a parameter b.

    + +

    [default] Test::Test()

    +

    Default constructor.

    + + +

    [default] TestQDoc::Test &Test::operator=(TestQDoc::Test &&other)

    +

    Move-assigns other.

    +

    void (*)(bool) Test::funcPtr(bool b, const char *s)

    Returns a pointer to a function that takes a boolean. Uses b and s.

    diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html index efd0a279c..e66538510 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html @@ -14,6 +14,7 @@
  • DerivedType
  • NotTypedef
  • typedef SomeType
  • +
  • operator=(TestQDoc::Test &&) : TestQDoc::Test &
  • funcPtr(bool , const char *) : void (*)(bool)
  • inlineFunction()
  • overload()
  • diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testtagfile.tags b/tests/auto/qdoc/generatedoutput/expected_output/testtagfile.tags index 1a035c855..67b710d68 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/testtagfile.tags +++ b/tests/auto/qdoc/generatedoutput/expected_output/testtagfile.tags @@ -186,6 +186,20 @@ overload-1 (bool b) + + + Test + testqdoc-test.html + Test + () + + + TestQDoc::Test & + operator= + testqdoc-test.html + operator-eq + (TestQDoc::Test &&other) + QDOCTEST_MACRO2 diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp index f7ff3e8ed..f38e4a367 100644 --- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp +++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp @@ -65,6 +65,18 @@ namespace TestQDoc { \ingroup testgroup */ +/*! + \fn TestQDoc::Test::Test() + + Default constructor. +*/ + +/*! + \fn Test &Test::operator=(Test &&other) + + Move-assigns \a other. +*/ + /*! \class TestQDoc::TestDerived \inmodule TestCPP -- cgit v1.2.3