diff options
Diffstat (limited to 'src/qdoc/node.cpp')
-rw-r--r-- | src/qdoc/node.cpp | 56 |
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; |