| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
Task-number: QTBUG-84578
Change-Id: Ic5e0adbbeb27266ba1a55132a54310021f98fc21
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84578
Change-Id: Iffc7c002f888f527370e200f44099eaf3934bf96
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84578
Change-Id: Ia3a0010e9791b69ca73d12a1e98322477e1569aa
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move Node::Access out of Node and make it a scoped enum,
to break circular dependency issues between Node and
RelatedClass.
This is a requirement to extract struct RelatedClass
from Node.
Task-number: QTBUG-84578
Change-Id: I13a1ac275d46abcd04f5f712291c77c2f24a65db
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84578
Change-Id: If9a8eed6a01c6c7682a47572a16213f0d174087e
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84578
Change-Id: I088ffba80e191723c06c6518435afabb0ffd7a4d
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84578
Change-Id: I5967054a1c802ac6daf2622dcd4e4c8c4b3977ac
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The current implementation suffers from lack of maintenance. This
causes a poor user experience that adds little value, or is even
detrimental to perceived value. Work to improve the situation would
have to be done at the expense of something else.
This patch removes the Q_DECLARE_TR_FUNCTIONS macros from QDoc, and
replaces calls to tr() with QStringLiteral().
Fixes: QTBUG-84568
Change-Id: I2df71c27246ca5de816608c887cf359db8f85900
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|\
| |
| |
| | |
Change-Id: I8c1fc05462e1b99b16d52e4f43b2b4b1aa645152
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
\typealias was already a command recognized by QDoc, but it was simply
treated as a synonym for \typedef and was not documented. Implement
proper support for the command:
- Add [alias] designation both in type summary and details.
- Auto-generate information about the aliased type, including a link
if aliasing a public, documented type.
- Auto-convert aliases documented with \typedef to type aliases.
- Add basic support for aliases also to DocBook and WebXML generators.
- Document \typealias.
Fixes: QTBUG-82712
Change-Id: Iafa8c7def0a7488d7521fbc2862290a9bb3167ff
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Use auto when assigning with new to avoid type name repetition.
* Prefer ranged-for loop.
* Call empty() on QStringList instead size() with comparison.
* Prefer 'm_' prefix over '_' postfix in members.
* Remove unused constructor.
* Update copyright year.
Task-number: QTBUG-71176
Change-Id: If979501aa58cbaa5388e2b98407f2b9845d77b83
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Reviewed-by: hjk <hjk@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This introduces a new command to QDoc, \qtcmakepackage. The command
works exactly like the \qtvariable command.
The command adds a table row in class and namespace documentation
pages. This entry contains
CMake: find_package(Qt6 COMPONENT Foo)
target_link_libraries(mytarget PUBLIC Qt::Foo)
...immediately preceding the existing "qmake: += Foo" row.
[ChangeLog][qdoc] Added a new QDoc command, \qtcmakepackage, that
adds CMake snippets to class and namespace documentation.
Fixes: QTBUG-84024
Pick-to: 5.15
Change-Id: I687813c76d92f20ec1eac6229ca2c5ef22ca3591
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Reviewed-by: Thibaut Cuvelier <cuvelier.thibaut@gmail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Drop the Q_GLOBAL_STATIC and return QSet<QString> on the stack
if we don't already have one. Do not return const-ref as the
QSet is implicitly shared anyway.
const-qualify a receiving container.
Task-number: QTBUG-84004
Change-Id: I8e06eb32f6ba82aeae1b727c777c5118c1f1d24f
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Remove unused includes
* Replace deprecated C++ includes with counterpart.
Task-number: QTBUG-71176
Change-Id: Ie3224d9f9c19fd8f93879de6c7604a8db421b88b
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
a bunch of .pro and configure.json file adjustments
and some conflicting cherry-picks from dev -> 5.15
that are merged into dev again
src/assistant/assistant/main.cpp
Change-Id: I174c00b6a300c6d46c4e081bdcb2f15f23ae9ef2
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A recent refactoring of code related to generation of example file
lists caused a regression; if the parameter passed to an \example
command contained subdirectories, e.g.
\example tutorials/gettingstarted
only the immediate example directory ('gettingstarted' above) was
recorded in generated example lists and manifest files.
Ensure that the file paths are prefixed with the full example
location, and add a test to cover this.
Fixes: QTBUG-83130
Change-Id: I061dcf6cd4e94a2c65e5a50a39f379759d7cd06f
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ie3c74010c62fa6c468732364bd1be77024fcca5b
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
QDoc looks for project file(s) in the example directories
before generating docs for the example. Now that we are
moving towards CMake, it's ideal that qdoc is aware of this
new project file type.
Refactor the code that looks for project files - add a new
function to Config for this purpose, and store the project
file name into ExampleNode. This allows removal of
duplicated logic when generating the example-manifest.xml
file.
Add a unit test for Config::getExampleProjectFile(), and
modify the generatedoutput test to cover output for a
CMake-based example.
[ChangeLog][qdoc] Added support for CMake-based example projects.
Fixes: QTBUG-82908
Change-Id: If9f061c613fee94b35df277043c2f4df93da7ec0
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|/
|
|
|
|
|
|
|
|
|
|
| |
The \contentspage command has been unused since Qt 5.3, and
the documentation was removed in 5.15. Remove the related
code.
[ChangeLog][qdoc] - The \contentspage command is removed.
Fixes: QTBUG-75170
Change-Id: I47c7e5c35154ed0d16f7a4584015b4a338735bbe
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
The \contentspage command doesn't produce nav links to the contents page
between the next and previous pages. QDoc hasn't generated these links
in html output since Qt 5.3. Remove the documentation that refers to the
command and add a warning that it should not be used..
Task-number: QTBUG-75170
Change-Id: Ib16fc1cbb1e661a7519ba650e655e209c3b45b68
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
| |
This undocumented command was storing a list of keywords in a node.
Those keywords were never accessed.
Task-number: QTBUG-82310
Change-Id: I144454667c78329a8a03ca81b9b90b047971d301
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|\
| |
| |
| | |
Change-Id: I30a35e0998cd2538406ae5e11e2991f855f4ecb5
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Nodes sharing a comment will be listed together as a group, so
sort them alphabetically.
Fixes: QTBUG-81265
Change-Id: Ia8dcba92d74116bf6757bfc9aaded1c65d7271fd
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|/
|
|
|
|
|
|
|
|
|
|
| |
There is no need to pass a pointer to Config throughout
the API; the only instance of it is created in main()
so we can turn it into a singleton.
Having access to Config without API changes makes
implementation of configurable features easier.
Change-Id: Ida47e067865082dfe036a7a97f7f1ffc736db346
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch is the result of formatting all of QDoc's source with
clang-format. The clang-format style is from the qt5 super repo's
_clang-format definition.
The purpose is unify the style across the code, to avoid spending too
much time on style related issues in reviews and cleanup patches. Future
changes to QDoc can benefit from using git-clang-format in combination
with the git commit hook provided in qtrepotools.git as mentioned in
this email to the dev list:
https://lists.qt-project.org/pipermail/development/2019-October/037682.html
Change-Id: I8af6a051c8334b5f35862a4dcd3becce8ac500c2
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Replace the use of QVector in most of QDoc.
Also, remove one redundant C-style cast to int for result from method
call that returns an int. As this happened in a macro, the result is
removing a whole bunch of nagging from code inspection.
Fixes: QTBUG-80669
Change-Id: Ib1aed95e01eaddd1e1213a145e815a0c4753ac67
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
|
|
|
|
|
|
|
|
| |
There's no change in output by not sorting the container, so it seems to
be entirely unnecessary.
Also const qualify the container that is no longer sorted.
Change-Id: I8d5186a70623b8db6397eb88b9b0a9b53465a34a
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
- Use ranged-based fors where applicable.
- Use auto keyword for iterators.
- Move a few variable declarations to where they're to be used.
- Update docs where applicable.
Fixes: QTBUG-80536
Change-Id: I859440b96428dec4ef108b01d391479d3f8dbd83
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
QDoc stores <sharedcomment> elements to the .index correctly, but
the nodes that were sharing a comment were added after the
shared comment. This meant that a shared comment node (SCN) could
not find any of its members as they hadn't been read in yet.
Fix this by delaying the creation of a new SCN until we have a list
of sharing nodes.
Also fix other related issues:
- Generate content also for non-function SCN members.
- Make SCN adopt the genus of a member when adding one.
- Fix Node::isPropertyGroup() to return true for actual property
groups (not all QML properties that share a comment) and fix usage
of that method.
- Fix linking to property groups when searching by the group name.
- Restore indentation of property group members both in the summary
section and in the All Members file.
Fixes: QTBUG-79204
Change-Id: I1702f39b178f52444436b800d4fe9cb99f976a60
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change replaces the use of foreach with range-based for throughout
QDoc. It also ensures that the loop body doesn't modify the container
being iterated over, by:
- Making a const copy when the container is a member variable or the
result of an expression, and iterating over that copy. This is the
preferred approach.
- Using qAsConst() when the container is a (static) member variable
or local to the method and not const. The latter is typical where
the collection is sorted immediately before the loop.
In two cases (doc.cpp), replaced Q_FOREACH + delete with qDeleteAll.
In two cases (cppcodeparser.cpp), the range declaration is replaced
within the loop statement. These rewrites express the behavior clearer
than the original code.
In two cases (codeparser.cpp), use a range-based for instead of a while
loop where the condition is an iterator, for more expressive code.
Finally, use the auto keyword where appropriate and improve a few
variable names.
QDoc warning count and generated output is unchanged after this
refactoring.
Change-Id: I64f02d24dca373a3a41402d535382e2c526bb55e
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Ensure that QDoc conforms to Qt style, whitespace edition.
For the most part, the change involves moving the pointer operators.
Also remove whitespace following an opening parenthesis, or
immediately preceding a closing one. In some cases, adjust the
following line accordingly in methods that span multiple lines.
Change-Id: I56ae125a2acf09c669c0a73dc814d05f13575f39
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Housekeeping. Includes are organized after recommended best practice and
organized in the following order:
- include self (i.e. include own header)
- include local files
- include Qt, e.g. <QtCore/qstring.h>
- include Qt private
- include externals, e.g. stdio.h
in alphabetic order within each block, aside from accommodating #if-ery,
in which includes follow the block they belong to.
Also, updated copyright notice to year of latest edit in each file.
Change-Id: I1e6b215f172fd5373d57016f7678b88b9e73231e
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
|
|
|
|
| |
Change-Id: If39e90e516017b21454a85bf6a88489f470894ae
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
... and of QLinkedList.
The change in QDesignerAbstractPropertySheetFactory is
straight-forward.
The rest are little buggers:
- In macdeployqt, the code iterates inside an if. Weird, but portable.
- In CppCodeParser, it's still somewhat harmless: just a call to
std::remove_if to avoid running into quadratic complexity, even
though the original loop had a good idea of iterating backwards,
saving at least some copies in the process. Need to take care there
that we continue to find the _first_ main.cpp, not the last, so add
a check for mainCpp.isEmpty().
- In QtGradientStopsModel, however, needed to work around the absence
of QMap::rbegin()/rend(), and it shows why they're missing: QMap's
funky op* makes it impossible to just use std::reverse_iterator to
do the heavy lifting. Use the recently-added QKeyValueIterator to
get an approximation. I say 'approximation', because that one lacks
operator->, so we need to use (*it).first, which brings back
memories of Qt 2's iterators...
Change-Id: I051e64b8d36b04ed2e7cf7695d9b797f08efaccb
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
| |
Fix warnings introduced by
qtbase/92f984273262531f909ede17a324f546fe502b5c.
Change-Id: Iaca85ad36591f7208f63305b885e7ff59c014a72
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
QDoc was marking all undocumented public API elements as
"internal" and "private" because most of these undocumented
elements should not be documented. The standard way to tell
QDoc not to warn about an undocumented elemewnt in the public
API is to give it a QDoc comment with the command "\internl"
in it. But it was decided this would require too much work
to eliminate all the warnings, because there are so many
undocumented elements in the Qt public API that we really
don't want to be documented. So we decided to just mark them
all as both internal and private in QDoc itself, and that
eliminated a great many useless QDoc warnings.
But it also meant that QDoc would no longer warn when a
public element was left undocumented by mistake. This is
most often seen in C++ classes that are in the public API
but are not documented. QFutureInterface is an example of
a class that is not documented but should be documented
because it is useful.
This change lets QDoc warn that a class in the public API
was not documented with a \class comment.
Special cases:
1. If the undocumented class has no members, don't warn that it was
not documented with a \class comment.
2. If the undocumented class's name contains the word "Private" it
is probably not meant to be in the public API, so don't warn that
it has no \class comment.
3. If the undocumented class has no function members, then don't
warn that it has no \class comment.
4. If the undocumented class is marked DontDocument, then don't
warn that it has no \class comment.
The other part of this change relates to item 4 above. To mark a
class or struct as DontDocument required adding a new topic
command to QDoc. The new topic command is \dontdocument. The
argument to this command is a list of class and struct names. The
list is enclosed in parentheses. For example:
\dontdocument (QMacAutoReleasePool QIncompatibleFlag
...
QTextCodec::ConverterState QThreadStorageData)
QDoc looks up each name in the list and marks it DontDocument.
The documentation generator then sees the node is marked
DontDocument and ignores the node. This makes it a lot easier to
tell QDoc which public classes and structs should not generate
the warning about no documentation.
Task-number: QTBUG-57183
Change-Id: I7eee48de03ca7aeb72c63ae90ba373503d41612d
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
QtMultimedia QML module contains a QML type QtMultimedia. QDoc
was overriding one with the other because the search function
returns both types of nodes (as they have the same genus, 'QML').
Fix this by checking that we actually found an existing type, not
a module.
Task-number: QTBUG-75186
Change-Id: Id7a151d6db137fd337e4dd68ebe7c8aa08ed80e0
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
It had been required that \relates could only be used to
relate global entities to a class. This change allows \relates
to be used in the comments of entities in a named namespace.
There are several cases in qtextstream.cpp
Change-Id: I17b61dbdaf6b6bd8c420a2fa1fd9deef6b7125dc
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Because we have QML types that represent C++ classes,
it is possible for qdoc to process a \qmlproperty command
before it has processed the \qmltype for the QML type
where the QML property belongs. This is because the
\qmlproperty command can appear in a different .cpp file
from the one containing the \qmltype command. If the .cpp
file is parsed first, the QML type node won't exist when
the \qmlproperty is processed, resulting in a qdoc error.
This update forces qdoc to always check for the exist of
the QML type before creating it and before creating any
QML properties for it, and if the QML type does not exist,
create it. If it does exist, use it.
Change-Id: I78705aa95ee5bf3abc2e17fb2b6cd52191d54b68
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We have been using the \qmlpropertygroup command to document complex
properties. we also have the \jspropertygroup but it hasn't been used.
However, we also have the shared comment concept, which we have used
for documenting groups of functions. This update changes qdoc to use
the shared comment concept for QML and JS property groups. The property
groups commands are therefore no longer needed. But there are several
uses of the \qmlpropertygroup command, and qdoc still recognizes these,
although it uses the shared comment concept to handle them. The property
group commands will be removed from the qdoc manual in a later update.
Change-Id: Ie98638546756fd1a70067a7cd483c3b962c02954
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
At the moment, qdoc cannot generate documentation
for python examples as it expects a .pro or
.qmlproject file for every \example command it
finds. Since Qt Creator v4.9, developers can create
a python project using the New Project wizard, which
means qdoc could use the .pyproject file to verify
the python example.
Change-Id: Idcecdffe4f798bd1409123f988e3b826247aed72
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When QDoc calls Aggregate::normalizeOverloads(), process \internal
function nodes last. This ensures that they get assigned overload
numbers higher than the public ones, and adding internal overloads
no longer shuffle around the public HTML anchors (that are based on
the overload numbers).
Also, when searching for functions, ensure that we don't return an
\internal overload if a matching public one exists. This gets rid of
a number of linking warnings.
Change-Id: Idaac077e2f88d310e3261bf5b4c3df33ca02f873
Reviewed-by: Martin Smith <martin.smith@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Replace 0 as nullptr constant with nullptr.
Remove reduntant semi-colons after member function definitions.
Adjust whitespace on lines otherwise touched.
Change-Id: I6af218ca8377611040360e0a3da392e7cffd29e9
Reviewed-by: Martin Smith <martin.smith@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This update corrects the documentation pages for classes,
structs, and unions that are declared inside a class or a
struct. In Qt, a struct is often declared inside a class.
For such internal declarations, the requirements for
making the inner entity available were incorrectly shown.
All that is really necessary is to include the parent class.
So the requirements for including the inner entity are now
replaced with, for example, "Struct State is declared in
class QAccessible," where QAccessible becomes a link to the
reference page for that class.
It was easier to implement this change by teaching qdoc to
recognize structs and unions in addition to classes, so that
is also included in this change.
Change-Id: I1a0d46ef19a130506c7bcbf77b46e298f6ab2f71
Task-number: QTBUG-66872
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This update was motivated by the need to correct two known issues
in qdoc. First, linking to overloaded functions failed in some cases
because the overloads were not numbered consistently, causing links
to go to the wrong overload or to nowhere at all. Second, the
mechanism for handling the \relates command didn't support using it to
relate a function to more than one class.
For example, there are many global qHash() functions spread
around QtBase. Each is meant to compute a hash index for an
object of some class type, so the object can be inserted into a
QHash map for that class type. It is then desired to relate
qHash(type Xxx, int seed) to both QHash<type> and class Xxx, so
that the documentation for that qHash() function appears as a
related non-member function of both QHash<type> and class Xxx.
The example above also illustrates the overload numbering problem,
because all these qHash() functions are overloads of the name
qHash. To make matters worse, they are not all in the same module.
Most of them are in QtCore, but a few are in QtNetwork, and this
distribution problem will become worse over time as more qHash()
functions are added. Prior to this update, qdoc was unable to
relate a function to something in a different module, or it didn't
always work.
While designing a fix for these issues, it became clear that the
processing of the FunctionNode and the function parameters would
have to be rewritten. That's what this update does. These are
the main points:
1. A new subclass of Node is added to act as a proxy for a class
in another module. This ProxyNode acts as a place holder for the
functions (and possibly other elements) that are related to a
class in another module. This is used for the qHash() functions
in QtNetwork that are related to QHash in QtCore. qdoc generates
an html file named qtnetwork/qhash-proxy.html that contains the
documentation for these functions. But these functions are listed
as related non-members on the QHash class reference page in the
qtcore output directory. They are listed there in the summary,
but they link to the qhash-proxy.html page in qtnetwork.
2. A new, Parameters class is added to qdoc (parameters.h and
parameters.cpp), and the class Parameter is moved there from
node.h. class Parameters replaces the old QVector<Parameter>
wherever it was used. This encapsulates all the parameter
processing and matching in the Parameters class and simplifies
the code at all the places where QVector<Parameter> had been
used.
3. The assignment of overload numbers is now done in the
normalizeOverloads() function, which is called after all the
headers and sources have been processed but before the
generate phase begins. This assignment is a simple renumbering
now because all the overloads of a function are linked to
each other via a nextOverload_ link in the FunctionNode. The
first function named qHash() is inserted into the Aggregate
node's function map, but subsequent qHash() FunctionNodes
are not entered into the function map but are linked to the
first qHash() via its nextOverload_ link.
4. The \relates command can now be used multiple times in a
single qdoc comment. There remains some work to be done here
because this currently only works for global entities, but
there are several cases where \relates has been used in the
qdoc comment of a member of a class. This will be fixed soon,
I believe.
When qdoc sees the first \relates Xxx command, for example
for qHash(Yyy, seed), that qHash() is a child of the global
namespace. qdoc allows it to remain as a child of the global
namespace but it tells class Xxx to "adopt" that child (see
Node::adoptChild()). This function makes this instance of
qHash() be a child of class Xxx (in this case QHash<type>),
so that the parent of this qHash() becomes Xxx. After this
"adoption," qHash() is a child of both the global namespace
and class Xxx, but qHash() only knows it is a child of Xxx,
i.e. its parent pointer is Xxx. If this is the first qHash()
to become a child of Xxx, it is inserted into the function
map of Xxx, but its nextOverload_ link is not changed. This
is because all the global qHash() functions have already been
linked into the nextOverload_ linked list, and this list must
not be changed. Hence, when qdoc searches for qHash(something)
to make a link to it, it will find it as a child of the global
namespace, but it will correctly link to it using its actual
parent pointer.
When qdoc sees the second \relates Yyy for this qHash()
function, qdoc sees that this FunctionNode has already been
made a related non-member of Xxx, so it can't let Yyy "adopt"
it. Instead, it tells Yyy to clone this qHash(), which creates
a shallow copy of it but resets its nextOverload_ pointer to
nullptr. I believe this clone of qHash() won't be found in a
search for a function named qHash(), because the global one
(the adopted one) will be found first. Or, if it is found, a
link to the clone will be generated, but that's ok because
the documentation is identical.
Note that the existence of qHash in two child lists is taken
into account at destruction time. The only place where a Node
is destroyed is in the destructor of Tree, which destroys the
Node tree from the root down to the leaves. Each aggregate
node is responsible for deleting each of its child nodes, but
it only deletes a child node if it is the parent of that child
node.
All of the above revealed that some of the findFunctionNode()
functions were either no longer needed or weren't being called
in the first place, so they were deleted.
This change is now ready for testing.
Change-Id: I6da3e2e9e71d39a29d90e073ed614309a49e3d4c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
| |
Change-Id: Ia715d6f5685363e4ccc22172ea45e43f1da72a17
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
| |
An early return lets it declare its returned pointer later and a
terser name for this variable is entirely sufficient. (This also
prepares the ground for changing its return type and de-virtualising.)
Change-Id: Ia94d810d341535d2d81aa28820696bfb2eec1652
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
| |
Add a missing null-check to a loop over nodes. Tidied up handling of
the case where the node is an Aggregate, in the process.
Change-Id: Iec39efdc9565c730baa8e0118de7cef50acd84f8
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
|
|
|
|
| |
Change-Id: Ie2ea694bd319f483e9a70f5934031028e0894976
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
CppCodeParser::processTopicArgs() neglected to check whether nodes are
internal (or internals are to be included) before including them.
Add Doc::isInternal() and CodeParser::showInternal() to let it check
this and add the check. Tidied up surrounding code in the process.
Change-Id: I9e1ca379a8e58c1519c345bbf98f441915998061
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|