diff options
Diffstat (limited to 'src/tools/qdoc/tree.h')
-rw-r--r-- | src/tools/qdoc/tree.h | 141 |
1 files changed, 88 insertions, 53 deletions
diff --git a/src/tools/qdoc/tree.h b/src/tools/qdoc/tree.h index 26dd982abd..a953751968 100644 --- a/src/tools/qdoc/tree.h +++ b/src/tools/qdoc/tree.h @@ -46,6 +46,7 @@ #ifndef TREE_H #define TREE_H +#include <QtCore/qstack.h> #include "node.h" QT_BEGIN_NAMESPACE @@ -53,81 +54,76 @@ QT_BEGIN_NAMESPACE class QStringList; class QDocDatabase; +struct TargetRec +{ + public: + enum Type { Unknown, Target, Keyword, Contents, Class, Function, Page, Subtitle }; + TargetRec() : node_(0), priority_(INT_MAX), type_(Unknown) { } + bool isEmpty() const { return ref_.isEmpty(); } + Node* node_; + QString ref_; + int priority_; + Type type_; +}; + +typedef QMultiMap<QString, TargetRec> TargetMap; +typedef QMultiMap<QString, DocNode*> DocNodeMultiMap; +typedef QMap<QString, QmlClassNode*> QmlTypeMap; +typedef QMultiMap<QString, const ExampleNode*> ExampleNodeMap; + class Tree { private: + friend class QDocForest; friend class QDocDatabase; typedef QMap<PropertyNode::FunctionRole, QString> RoleMap; typedef QMap<PropertyNode*, RoleMap> PropertyMap; - struct InheritanceBound - { - Node::Access access; - QStringList basePath; - QString dataTypeWithTemplateArgs; - InnerNode* parent; - - InheritanceBound() : access(Node::Public) { } - InheritanceBound(Node::Access access0, - const QStringList& basePath0, - const QString& dataTypeWithTemplateArgs0, - InnerNode* parent) - : access(access0), basePath(basePath0), - dataTypeWithTemplateArgs(dataTypeWithTemplateArgs0), - parent(parent) { } - }; - - Tree(QDocDatabase* qdb); + Tree(const QString& module, QDocDatabase* qdb); ~Tree(); - EnumNode* findEnumNode(const QStringList& path, Node* start = 0); ClassNode* findClassNode(const QStringList& path, Node* start = 0) const; - QmlClassNode* findQmlTypeNode(const QStringList& path); NamespaceNode* findNamespaceNode(const QStringList& path) const; - - Node* findNodeByNameAndType(const QStringList& path, - Node::Type type, - Node::SubType subtype, - Node* start, - bool acceptCollision = false); + FunctionNode* findFunctionNode(const QStringList& parentPath, const FunctionNode* clone); + const Node* resolveFunctionTarget(const QString& target, const Node* relative); Node* findNodeRecursive(const QStringList& path, int pathIndex, + const Node* start, + Node::Type type) const; + Node* findNodeRecursive(const QStringList& path, + int pathIndex, Node* start, - Node::Type type, - Node::SubType subtype, - bool acceptCollision = false) const; + const NodeTypeList& types) const; const Node* findNode(const QStringList &path, const Node* relative = 0, - int findFlags = 0, - const Node* self=0) const; + int findFlags = 0) const; const Node* findNode(const QStringList& path, const Node* start, int findFlags, - const Node* self, bool qml) const; - NameCollisionNode* checkForCollision(const QString& name) const; + QmlClassNode* findQmlTypeNode(const QStringList& path); + + Node* findNodeByNameAndType(const QStringList& path, Node::Type type) const; + InnerNode* findRelatesNode(const QStringList& path); + NameCollisionNode* checkForCollision(const QString& name); NameCollisionNode* findCollisionNode(const QString& name) const; - FunctionNode *findFunctionNode(const QStringList &path, - Node *relative = 0, - int findFlags = 0); - FunctionNode *findFunctionNode(const QStringList &parentPath, - const FunctionNode *clone, - Node *relative = 0, - int findFlags = 0); - void addBaseClass(ClassNode *subclass, - Node::Access access, - const QStringList &basePath, - const QString &dataTypeWithTemplateArgs, - InnerNode *parent); + QString findTarget(const QString& target, const Node* node) const; + void insertTarget(const QString& name, TargetRec::Type type, Node* node, int priority); + const Node* resolveTarget(const QString& target, const Node* start); + void resolveTargets(InnerNode* root); + const Node* findUnambiguousTarget(const QString& target, QString& ref); + const DocNode* findDocNodeByTitle(const QString& title) const; + void addPropertyFunction(PropertyNode *property, const QString &funcName, PropertyNode::FunctionRole funcRole); - void resolveInheritance(NamespaceNode *rootNode = 0); + void resolveInheritance(InnerNode* n = 0); + void resolveInheritanceHelper(int pass, ClassNode* cn); void resolveProperties(); void resolveCppToQmlLinks(); void fixInheritance(NamespaceNode *rootNode = 0); @@ -136,23 +132,62 @@ class Tree const FunctionNode *findFunctionNode(const QStringList &path, const Node *relative = 0, int findFlags = 0) const; - const FunctionNode *findFunctionNode(const QStringList &parentPath, - const FunctionNode *clone, - const Node *relative = 0, - int findFlags = 0) const; const NamespaceNode *root() const { return &root_; } - void resolveInheritance(int pass, ClassNode *classe); FunctionNode *findVirtualFunctionInBaseClasses(ClassNode *classe, FunctionNode *clone); - void fixPropertyUsingBaseClasses(ClassNode *classe, PropertyNode *property); NodeList allBaseClasses(const ClassNode *classe) const; + QString refForAtom(const Atom* atom); + + const CNMap& groups() const { return groups_; } + const CNMap& modules() const { return modules_; } + const CNMap& qmlModules() const { return qmlModules_; } + const CNMap& getCollections(Node::Type t) const { + if (t == Node::Group) + return groups_; + if (t == Node::Module) + return modules_; + return qmlModules_; + } + + CollectionNode* getCorrespondingCollection(CollectionNode* cn); + + GroupNode* getGroup(const QString& name); + ModuleNode* getModule(const QString& name); + QmlModuleNode* getQmlModule(const QString& name); + + GroupNode* findGroup(const QString& name); + ModuleNode* findModule(const QString& name); + QmlModuleNode* findQmlModule(const QString& name); + + GroupNode* addGroup(const QString& name); + ModuleNode* addModule(const QString& name); + QmlModuleNode* addQmlModule(const QString& name); + + GroupNode* addToGroup(const QString& name, Node* node); + ModuleNode* addToModule(const QString& name, Node* node); + QmlModuleNode* addToQmlModule(const QString& name, Node* node); + + QmlClassNode* lookupQmlType(const QString& name) const { return qmlTypeMap_.value(name); } + void insertQmlType(const QString& key, QmlClassNode* n); + void addExampleNode(ExampleNode* n) { exampleNodeMap_.insert(n->title(), n); } + ExampleNodeMap& exampleNodeMap() { return exampleNodeMap_; } + + public: + const QString& moduleName() const { return module_; } private: + QString module_; QDocDatabase* qdb_; NamespaceNode root_; - QMap<ClassNode* , QList<InheritanceBound> > unresolvedInheritanceMap; PropertyMap unresolvedPropertyMap; + DocNodeMultiMap docNodesByTitle_; + TargetMap nodesByTarget_; + CNMap groups_; + CNMap modules_; + CNMap qmlModules_; + QmlTypeMap qmlTypeMap_; + ExampleNodeMap exampleNodeMap_; }; QT_END_NAMESPACE |