diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/qdoc/cppcodemarker.cpp | 15 | ||||
-rw-r--r-- | src/tools/qdoc/generator.cpp | 3 | ||||
-rw-r--r-- | src/tools/qdoc/node.cpp | 6 | ||||
-rw-r--r-- | src/tools/qdoc/node.h | 6 | ||||
-rw-r--r-- | src/tools/qdoc/qdocdatabase.cpp | 23 |
5 files changed, 44 insertions, 9 deletions
diff --git a/src/tools/qdoc/cppcodemarker.cpp b/src/tools/qdoc/cppcodemarker.cpp index 1546b5226e..4c1e84fe3c 100644 --- a/src/tools/qdoc/cppcodemarker.cpp +++ b/src/tools/qdoc/cppcodemarker.cpp @@ -807,6 +807,21 @@ QList<Section> CppCodeMarker::sections(const InnerNode *inner, } ++n; } + if (inner->isNamespace()) { + const NamespaceNode* ns = static_cast<const NamespaceNode*>(inner); + if (!ns->orphans().isEmpty()) { + foreach (Node* n, ns->orphans()) { + // Use inner as a temporary parent when inserting orphans + InnerNode* p = n->parent(); + n->setParent(const_cast<InnerNode*>(inner)); + if (n->isClass()) + insert(classes, n, style, status); + else if (n->isNamespace()) + insert(namespaces, n, style, status); + n->setParent(p); + } + } + } append(sections, namespaces); append(sections, classes); append(sections, types); diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp index ac5a6295ae..70ade3aabd 100644 --- a/src/tools/qdoc/generator.cpp +++ b/src/tools/qdoc/generator.cpp @@ -1006,7 +1006,8 @@ void Generator::generateInnerNode(InnerNode* node) CodeMarker *marker = CodeMarker::markerForFileName(node->location().filePath()); if (node->parent() != 0) { - if (node->isNamespace() || node->isClass()) { + if ((node->isNamespace() && node->status() != Node::Intermediate) + || node->isClass()) { beginSubPage(node, fileName(node)); generateClassLikeNode(node, marker); endSubPage(); diff --git a/src/tools/qdoc/node.cpp b/src/tools/qdoc/node.cpp index 7fb8f72c51..92a7c7b1df 100644 --- a/src/tools/qdoc/node.cpp +++ b/src/tools/qdoc/node.cpp @@ -883,12 +883,14 @@ void InnerNode::setOverload(FunctionNode *func, bool overlode) /*! Mark all child nodes that have no documentation as having private access and internal status. qdoc will then ignore - them for documentation purposes. + them for documentation purposes. Some nodes have an + Intermediate status, meaning that they should be ignored, + but not their children. */ void InnerNode::makeUndocumentedChildrenInternal() { foreach (Node *child, childNodes()) { - if (child->doc().isEmpty()) { + if (child->doc().isEmpty() && child->status() != Node::Intermediate) { child->setAccess(Node::Private); child->setStatus(Node::Internal); } diff --git a/src/tools/qdoc/node.h b/src/tools/qdoc/node.h index 78f3d9eb6e..fc9d33edc2 100644 --- a/src/tools/qdoc/node.h +++ b/src/tools/qdoc/node.h @@ -116,7 +116,8 @@ public: Deprecated, Preliminary, Commendable, - Internal + Internal, + Intermediate }; // don't reorder this enum enum ThreadSafeness { @@ -458,10 +459,13 @@ public: void markSeen() { seen_ = true; } void markNotSeen() { seen_ = false; } void setTree(Tree* t) { tree_ = t; } + const NodeList& orphans() const { return orphans_; } + void addOrphan(Node* child) { orphans_.append(child); } private: bool seen_; Tree* tree_; + NodeList orphans_; }; struct RelatedClass diff --git a/src/tools/qdoc/qdocdatabase.cpp b/src/tools/qdoc/qdocdatabase.cpp index a0b91a9c72..f1afb92eff 100644 --- a/src/tools/qdoc/qdocdatabase.cpp +++ b/src/tools/qdoc/qdocdatabase.cpp @@ -1310,11 +1310,24 @@ void QDocDatabase::resolveNamespaces() foreach (Node* n, nodes) { if (n->isNamespace()) { NamespaceNode* NS = static_cast<NamespaceNode*>(n); - if (NS != ns) { - while (!NS->childNodes().isEmpty()) { - Node* child = NS->childNodes().first(); - NS->removeChild(child); - ns->addChild(child); + if ((NS != ns) && !NS->childNodes().isEmpty()) { + const NodeList& children = NS->childNodes(); + int i = children.size() - 1; + while (i >= 0) { + Node* child = children.at(i--); + if (!child) + continue; + if (!child->isClass() + && !child->isQmlType() + && !child->isNamespace()) { + NS->removeChild(child); + ns->addChild(child); + } + else { + NS->setStatus(Node::Intermediate); + NS->setAccess(Node::Public); + ns->addOrphan(child); + } } } } |