summaryrefslogtreecommitdiff
path: root/src/qdoc/node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc/node.cpp')
-rw-r--r--src/qdoc/node.cpp56
1 files changed, 41 insertions, 15 deletions
diff --git a/src/qdoc/node.cpp b/src/qdoc/node.cpp
index 04b220c09..0728ae9e6 100644
--- a/src/qdoc/node.cpp
+++ b/src/qdoc/node.cpp
@@ -1593,7 +1593,7 @@ bool NamespaceNode::isDocumentedHere() const
bool NamespaceNode::hasDocumentedChildren() const
{
foreach (Node *n, children_) {
- if (n->hasDoc() && !n->isPrivate() && !n->isInternal())
+ if (n->isInAPI())
return true;
}
return false;
@@ -1607,7 +1607,7 @@ bool NamespaceNode::hasDocumentedChildren() const
void NamespaceNode::reportDocumentedChildrenInUndocumentedNamespace() const
{
foreach (Node *n, children_) {
- if (n->hasDoc() && !n->isPrivate() && !n->isInternal()) {
+ if (n->isInAPI()) {
QString msg1 = n->name();
if (n->isFunction())
msg1 += "()";
@@ -1625,7 +1625,7 @@ void NamespaceNode::reportDocumentedChildrenInUndocumentedNamespace() const
*/
bool NamespaceNode::docMustBeGenerated() const
{
- if (hasDoc() && !isInternal() && !isPrivate())
+ if (isInAPI())
return true;
return (hasDocumentedChildren() ? true : false);
}
@@ -1705,8 +1705,37 @@ void ClassNode::addUnresolvedUsingClause(const QString& signature)
}
/*!
+ A base class of this class node was private or internal.
+ That node's list of \a bases is traversed in this function.
+ Each of its public base classes is promoted to be a base
+ class of this node for documentation purposes. For each
+ private or internal class node in \a bases, this function
+ is called recursively with the list of base classes from
+ that private or internal class node.
*/
-void ClassNode::fixBaseClasses()
+void ClassNode::promotePublicBases(const QList<RelatedClass>& bases)
+{
+ if (!bases.isEmpty()) {
+ for (int i = bases.size() - 1; i >= 0; --i) {
+ ClassNode* bc = bases.at(i).node_;
+ if (bc == nullptr)
+ bc = QDocDatabase::qdocDB()->findClassNode(bases.at(i).path_);
+ if (bc != nullptr) {
+ if (bc->isPrivate() || bc->isInternal())
+ promotePublicBases(bc->baseClasses());
+ else
+ bases_.append(bases.at(i));
+ }
+ }
+ }
+}
+
+/*!
+ Remove private and internal bases classes from this class's list
+ of base classes. When a base class is removed from the list, add
+ its base classes to this class's list of base classes.
+ */
+void ClassNode::removePrivateAndInternalBases()
{
int i;
i = 0;
@@ -1717,13 +1746,11 @@ void ClassNode::fixBaseClasses()
ClassNode* bc = bases_.at(i).node_;
if (bc == nullptr)
bc = QDocDatabase::qdocDB()->findClassNode(bases_.at(i).path_);
- if (bc != nullptr && (bc->access() == Node::Private || found.contains(bc))) {
+ if (bc != nullptr && (bc->isPrivate() || bc->isInternal() || found.contains(bc))) {
RelatedClass rc = bases_.at(i);
bases_.removeAt(i);
ignoredBases_.append(rc);
- const QList<RelatedClass> &bb = bc->baseClasses();
- for (int j = bb.size() - 1; j >= 0; --j)
- bases_.insert(i, bb.at(j));
+ promotePublicBases(bc->baseClasses());
}
else {
++i;
@@ -1734,7 +1761,7 @@ void ClassNode::fixBaseClasses()
i = 0;
while (i < derived_.size()) {
ClassNode* dc = derived_.at(i).node_;
- if (dc != nullptr && dc->access() == Node::Private) {
+ if (dc != nullptr && (dc->isPrivate() || dc->isInternal())) {
derived_.removeAt(i);
const QList<RelatedClass> &dd = dc->derivedClasses();
for (int j = dd.size() - 1; j >= 0; --j)
@@ -1747,9 +1774,8 @@ void ClassNode::fixBaseClasses()
}
/*!
- Not sure why this is needed.
*/
-void ClassNode::fixPropertyUsingBaseClasses(PropertyNode* pn)
+void ClassNode::resolvePropertyOverriddenFromPtrs(PropertyNode* pn)
{
QList<RelatedClass>::const_iterator bc = baseClasses().constBegin();
while (bc != baseClasses().constEnd()) {
@@ -1758,11 +1784,11 @@ void ClassNode::fixPropertyUsingBaseClasses(PropertyNode* pn)
Node* n = cn->findNonfunctionChild(pn->name(), &Node::isProperty);
if (n) {
PropertyNode* baseProperty = static_cast<PropertyNode*>(n);
- cn->fixPropertyUsingBaseClasses(baseProperty);
+ cn->resolvePropertyOverriddenFromPtrs(baseProperty);
pn->setOverriddenFrom(baseProperty);
}
else
- cn->fixPropertyUsingBaseClasses(pn);
+ cn->resolvePropertyOverriddenFromPtrs(pn);
}
++bc;
}
@@ -1946,7 +1972,7 @@ HeaderNode::HeaderNode(Aggregate* parent, const QString& name) : Aggregate(Heade
*/
bool HeaderNode::docMustBeGenerated() const
{
- if (hasDoc() && !isInternal() && !isPrivate())
+ if (isInAPI())
return true;
return (hasDocumentedChildren() ? true : false);
}
@@ -1958,7 +1984,7 @@ bool HeaderNode::docMustBeGenerated() const
bool HeaderNode::hasDocumentedChildren() const
{
foreach (Node *n, children_) {
- if (n->hasDoc() && !n->isPrivate() && !n->isInternal())
+ if (n->isInAPI())
return true;
}
return false;