diff options
Diffstat (limited to 'src/tools/qdoc/node.h')
-rw-r--r-- | src/tools/qdoc/node.h | 306 |
1 files changed, 183 insertions, 123 deletions
diff --git a/src/tools/qdoc/node.h b/src/tools/qdoc/node.h index 236b495bd0..e0f6e5202d 100644 --- a/src/tools/qdoc/node.h +++ b/src/tools/qdoc/node.h @@ -55,18 +55,27 @@ QT_BEGIN_NAMESPACE class Node; +class EnumNode; class ClassNode; class InnerNode; class ExampleNode; +class TypedefNode; class QmlClassNode; class QDocDatabase; +class FunctionNode; +class PropertyNode; class QmlModuleNode; +class CollectionNode; class QmlPropertyNode; +class NameCollisionNode; typedef QList<Node*> NodeList; typedef QMap<QString, Node*> NodeMap; typedef QMultiMap<QString, Node*> NodeMultiMap; -typedef QMultiMap<QString, const ExampleNode*> ExampleNodeMap; +typedef QPair<int, int> NodeTypePair; +typedef QList<NodeTypePair> NodeTypeList; +typedef QMap<QString, CollectionNode*> CNMap; +typedef QMultiMap<QString, CollectionNode*> CNMultiMap; class Node { @@ -82,6 +91,9 @@ public: Function, Property, Variable, + Group, + Module, + QmlModule, QmlPropertyGroup, QmlProperty, QmlSignal, @@ -96,13 +108,10 @@ public: HeaderFile, File, Image, - Group, - Module, Page, ExternalPage, QmlClass, QmlBasicType, - QmlModule, DitaMap, Collision, LastSubtype @@ -165,10 +174,11 @@ public: QString plainName() const; QString plainFullName(const Node* relative = 0) const; QString fullName(const Node* relative=0) const; - const QString& baseName() const { return baseName_; } - bool hasBaseName() const { return !baseName_.isEmpty(); } - void setBaseName(const QString& bn) { baseName_ = bn; } + const QString& fileNameBase() const { return fileNameBase_; } + bool hasFileNameBase() const { return !fileNameBase_.isEmpty(); } + void setFileNameBase(const QString& t) { fileNameBase_ = t; } + void setAccess(Access access) { access_ = access; } void setLocation(const Location& location) { loc_ = location; } void setDoc(const Doc& doc, bool replace = false); @@ -181,8 +191,7 @@ public: void setSince(const QString &since); void setRelates(InnerNode* pseudoParent); void setModuleName(const QString &name) { moduleName_ = name; } - void setLink(LinkType linkType, const QString &link, const QString &desc); - void setUrl(const QString &url); + void setUrl(const QString& url) { url_ = url; } void setTemplateStuff(const QString &templateStuff) { templateStuff_ = templateStuff; } void setReconstitutedBrief(const QString &t) { reconstitutedBrief_ = t; } void setPageType(PageType t) { pageType_ = t; } @@ -190,14 +199,18 @@ public: void setParent(InnerNode* n) { parent_ = n; } void setIndexNodeFlag() { indexNodeFlag_ = true; } virtual void setOutputFileName(const QString& ) { } - void markSeen() { seen_ = true; } - void markNotSeen() { seen_ = false; } virtual bool isInnerNode() const = 0; + virtual bool isDocNode() const { return false; } + virtual bool isCollectionNode() const { return false; } + virtual bool isGroup() const { return false; } + virtual bool isModule() const { return false; } virtual bool isQmlModule() const { return false; } virtual bool isQmlType() const { return false; } + virtual bool isQmlBasicType() const { return false; } virtual bool isExample() const { return false; } virtual bool isExampleFile() const { return false; } + virtual bool isHeaderFile() const { return false; } virtual bool isLeaf() const { return false; } virtual bool isReimp() const { return false; } virtual bool isFunction() const { return false; } @@ -210,7 +223,6 @@ public: virtual bool isCollisionNode() const { return false; } virtual bool isAttached() const { return false; } virtual bool isAlias() const { return false; } - virtual bool isGroup() const { return false; } virtual bool isWrapper() const; virtual bool isReadOnly() const { return false; } virtual bool isDefault() const { return false; } @@ -221,34 +233,47 @@ public: virtual bool hasClasses() const { return false; } virtual void setAbstract(bool ) { } virtual void setWrapper() { } - virtual QString title() const { return QString(); } + virtual QString title() const { return name(); } + virtual QString fullTitle() const { return name(); } + virtual QString subTitle() const { return QString(); } + virtual void setTitle(const QString& ) { } + virtual void setSubTitle(const QString& ) { } virtual QmlPropertyNode* hasQmlProperty(const QString& ) const { return 0; } virtual void getMemberNamespaces(NodeMap& ) { } virtual void getMemberClasses(NodeMap& ) { } virtual bool isInternal() const; virtual void setDataType(const QString& ) { } virtual void setReadOnly(bool ) { } + virtual Node* disambiguate(Type , SubType ) { return this; } + virtual bool wasSeen() const { return false; } + virtual void appendGroupName(const QString& ) { } bool isIndexNode() const { return indexNodeFlag_; } - bool wasSeen() const { return seen_; } Type type() const { return nodeType_; } virtual SubType subType() const { return NoSubType; } + bool match(const NodeTypeList& types) const; InnerNode* parent() const { return parent_; } InnerNode* relates() const { return relatesTo_; } const QString& name() const { return name_; } - const QMap<LinkType, QPair<QString,QString> >& links() const { return linkMap_; } QString moduleName() const; - QString url() const; + QString url() const { return url_; } virtual QString nameForLists() const { return name_; } virtual QString outputFileName() const { return QString(); } virtual QString obsoleteLink() const { return QString(); } virtual void setObsoleteLink(const QString& ) { }; + virtual void setQtVariable(const QString& ) { } + virtual QString qtVariable() const { return QString(); } + + const QMap<LinkType, QPair<QString,QString> >& links() const { return linkMap_; } + void setLink(LinkType linkType, const QString &link, const QString &desc); Access access() const { return access_; } QString accessString() const; const Location& location() const { return loc_; } const Doc& doc() const { return doc_; } + bool hasDoc() const { return !doc_.isEmpty(); } Status status() const { return status_; } Status inheritedStatus() const; + bool isObsolete() const { return (status_ == Obsolete); } ThreadSafeness threadSafeness() const; ThreadSafeness inheritedThreadSafeness() const; QString since() const { return since_; } @@ -274,7 +299,6 @@ public: virtual void setQmlModule(QmlModuleNode* ) { } virtual ClassNode* classNode() { return 0; } virtual void setClassNode(ClassNode* ) { } - virtual void clearCurrentChild() { } virtual const Node* applyModuleName(const Node* ) const { return 0; } virtual QString idNumber() { return "0"; } QmlClassNode* qmlClassNode(); @@ -305,7 +329,6 @@ private: PageType pageType_; Status status_; bool indexNodeFlag_; - bool seen_; InnerNode* parent_; InnerNode* relatesTo_; @@ -313,7 +336,7 @@ private: Location loc_; Doc doc_; QMap<LinkType, QPair<QString, QString> > linkMap_; - QString baseName_; + QString fileNameBase_; QString moduleName_; QString url_; QString since_; @@ -325,49 +348,31 @@ private: static int propertyGroupCount_; }; -class FunctionNode; -class EnumNode; -class NameCollisionNode; - class InnerNode : public Node { public: virtual ~InnerNode(); - Node* findChildNodeByName(const QString& name); - Node* findChildNodeByName(const QString& name, bool qml); - Node* findChildNodeByNameAndType(const QString& name, Type type); + Node* findChildNode(const QString& name) const; + Node* findChildNode(const QString& name, bool qml) const; + Node* findChildNode(const QString& name, Type type); void findNodes(const QString& name, QList<Node*>& n); - FunctionNode* findFunctionNode(const QString& name); + FunctionNode* findFunctionNode(const QString& name) const; FunctionNode* findFunctionNode(const FunctionNode* clone); void addInclude(const QString &include); void setIncludes(const QStringList &includes); void setOverload(const FunctionNode* func, bool overlode); void normalizeOverloads(); void makeUndocumentedChildrenInternal(); - void clearCurrentChildPointers(); void deleteChildren(); void removeFromRelated(); virtual bool isInnerNode() const { return true; } virtual bool isLeaf() const { return false; } - const Node* findChildNodeByName(const QString& name) const; - const Node* findChildNodeByName(const QString& name, bool qml) const; - const Node* findChildNodeByNameAndType(const QString& name, Type type) const; - const FunctionNode* findFunctionNode(const QString& name) const; - const FunctionNode* findFunctionNode(const FunctionNode* clone) const; const EnumNode* findEnumNodeForValue(const QString &enumValue) const; const NodeList & childNodes() const { return children_; } const NodeList & relatedNodes() const { return related_; } - virtual void addMember(Node* node); - const NodeList& members() const { return members_; } - virtual bool hasMembers() const; - virtual bool hasNamespaces() const; - virtual bool hasClasses() const; - virtual void getMemberNamespaces(NodeMap& out); - virtual void getMemberClasses(NodeMap& out); - int count() const { return children_.size(); } int overloadNumber(const FunctionNode* func) const; NodeList overloads(const QString &funcName) const; @@ -377,14 +382,13 @@ public: QStringList secondaryKeys(); const QStringList& pageKeywords() const { return pageKeywds; } virtual void addPageKeywords(const QString& t) { pageKeywds << t; } - virtual void setCurrentChild() { } - virtual void setCurrentChild(InnerNode* ) { } virtual void setOutputFileName(const QString& f) { outputFileName_ = f; } virtual QString outputFileName() const { return outputFileName_; } virtual QmlPropertyNode* hasQmlProperty(const QString& ) const; - + void addChild(Node* child, const QString& title); + const QStringList& groupNames() const { return groupNames_; } + virtual void appendGroupName(const QString& t) { groupNames_.append(t); } void printChildren(const QString& title); - void printMembers(const QString& title); protected: InnerNode(Type type, InnerNode* parent, const QString& name); @@ -401,8 +405,8 @@ private: QString outputFileName_; QStringList pageKeywds; QStringList includes_; + QStringList groupNames_; NodeList children_; - NodeList members_; NodeList enumChildren_; NodeList related_; QMap<QString, Node*> childMap; @@ -432,26 +436,24 @@ public: virtual bool isNamespace() const { return true; } }; -class ClassNode; - struct RelatedClass { RelatedClass() { } - RelatedClass(Node::Access access0, - ClassNode* node0, - const QString& dataTypeWithTemplateArgs0 = QString()) - : access(access0), - node(node0), - dataTypeWithTemplateArgs(dataTypeWithTemplateArgs0) { } + // constructor for resolved base class + RelatedClass(Node::Access access, ClassNode* node) + : access_(access), node_(node) { } + // constructor for unresolved base class + RelatedClass(Node::Access access, const QStringList& path, const QString& signature) + : access_(access), node_(0), path_(path), signature_(signature) { } QString accessString() const; + bool isPrivate() const { return (access_ == Node::Private); } - Node::Access access; - ClassNode* node; - QString dataTypeWithTemplateArgs; + Node::Access access_; + ClassNode* node_; + QStringList path_; + QString signature_; }; -class PropertyNode; - class ClassNode : public InnerNode { public: @@ -463,14 +465,19 @@ public: virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; } virtual void setWrapper() { wrapper_ = true; } - void addBaseClass(Access access, - ClassNode* node, - const QString &dataTypeWithTemplateArgs = QString()); + void addResolvedBaseClass(Access access, ClassNode* node); + void addDerivedClass(Access access, ClassNode* node); + void addUnresolvedBaseClass(Access access, const QStringList& path, const QString& signature); void fixBaseClasses(); + void fixPropertyUsingBaseClasses(PropertyNode* pn); + + QList<RelatedClass>& baseClasses() { return bases_; } + QList<RelatedClass>& derivedClasses() { return derived_; } + QList<RelatedClass>& ignoredBaseClasses() { return ignoredBases_; } - const QList<RelatedClass> &baseClasses() const { return bases; } - const QList<RelatedClass> &derivedClasses() const { return derived; } - const QList<RelatedClass> &ignoredBaseClasses() const { return ignoredBases; } + const QList<RelatedClass> &baseClasses() const { return bases_; } + const QList<RelatedClass> &derivedClasses() const { return derived_; } + const QList<RelatedClass> &ignoredBaseClasses() const { return ignoredBases_; } QString serviceName() const { return sname; } void setServiceName(const QString& value) { sname = value; } @@ -482,9 +489,9 @@ public: QmlClassNode* findQmlBaseNode(); private: - QList<RelatedClass> bases; - QList<RelatedClass> derived; - QList<RelatedClass> ignoredBases; + QList<RelatedClass> bases_; + QList<RelatedClass> derived_; + QList<RelatedClass> ignoredBases_; bool abstract_; bool wrapper_; QString sname; @@ -502,49 +509,26 @@ public: PageType ptype); virtual ~DocNode() { } - void setQtVariable(const QString &variable) { qtVariable_ = variable; } - void setTitle(const QString &title) { title_ = title; } - void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; } + virtual void setTitle(const QString &title); + virtual void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; } - QString qtVariable() const { return qtVariable_; } SubType subType() const { return nodeSubtype_; } - virtual QString title() const; + virtual QString title() const { return title_; } virtual QString fullTitle() const; virtual QString subTitle() const; virtual QString imageFileName() const { return QString(); } virtual QString nameForLists() const { return title(); } virtual void setImageFileName(const QString& ) { } - virtual bool isGroup() const { return (subType() == Node::Group); } + virtual bool isHeaderFile() const { return (subType() == Node::HeaderFile); } virtual bool isExample() const { return (subType() == Node::Example); } virtual bool isExampleFile() const { return (parent() && parent()->isExample()); } virtual bool isExternalPage() const { return nodeSubtype_ == ExternalPage; } + virtual bool isDocNode() const { return true; } protected: SubType nodeSubtype_; QString title_; QString subtitle_; - -private: - QString qtVariable_; -}; - -class QmlModuleNode : public DocNode -{ - public: - QmlModuleNode(InnerNode* parent, const QString& name) - : DocNode(parent, name, Node::QmlModule, Node::OverviewPage) { } - virtual ~QmlModuleNode() { } - - virtual bool isQmlModule() const { return true; } - virtual QString qmlModuleName() const { return qmlModuleName_; } - virtual QString qmlModuleVersion() const { return qmlModuleVersionMajor_ + "." + qmlModuleVersionMinor_; } - virtual QString qmlModuleIdentifier() const { return qmlModuleName_ + qmlModuleVersionMajor_; } - virtual void setQmlModuleInfo(const QString& ); - - private: - QString qmlModuleName_; - QString qmlModuleVersionMajor_; - QString qmlModuleVersionMinor_; }; class NameCollisionNode : public DocNode @@ -552,35 +536,28 @@ class NameCollisionNode : public DocNode public: NameCollisionNode(InnerNode* child); ~NameCollisionNode(); - const InnerNode* currentChild() const { return current; } - virtual void setCurrentChild(InnerNode* child) { current = child; } - virtual void clearCurrentChild() { current = 0; } virtual bool isQmlNode() const; virtual bool isCollisionNode() const { return true; } virtual const Node* applyModuleName(const Node* origin) const; + virtual Node* disambiguate(Type t, SubType st); InnerNode* findAny(Node::Type t, Node::SubType st); void addCollision(InnerNode* child); const QMap<QString,QString>& linkTargets() const { return targets; } void addLinkTarget(const QString& t, const QString& v) { targets.insert(t,v); } private: - InnerNode* current; QMap<QString,QString> targets; }; class ExampleNode : public DocNode { public: - ExampleNode(InnerNode* parent, const QString& name); + ExampleNode(InnerNode* parent, const QString& name) + : DocNode(parent, name, Node::Example, Node::ExamplePage) { } virtual ~ExampleNode() { } virtual QString imageFileName() const { return imageFileName_; } virtual void setImageFileName(const QString& ifn) { imageFileName_ = ifn; } - static void terminate() { exampleNodeMap.clear(); } - -public: - static ExampleNodeMap exampleNodeMap; - private: QString imageFileName_; }; @@ -615,8 +592,6 @@ public: virtual bool isQtQuickNode() const { return (qmlModuleName() == QLatin1String("QtQuick")); } virtual ClassNode* classNode() { return cnode_; } virtual void setClassNode(ClassNode* cn) { cnode_ = cn; } - virtual void setCurrentChild(); - virtual void clearCurrentChild(); virtual bool isAbstract() const { return abstract_; } virtual bool isWrapper() const { return wrapper_; } virtual void setAbstract(bool b) { abstract_ = b; } @@ -632,10 +607,11 @@ public: virtual void setQmlModule(QmlModuleNode* t) { qmlModule_ = t; } const ImportList& importList() const { return importList_; } void setImportList(const ImportList& il) { importList_ = il; } - const QString& qmlBaseName() const { return baseName_; } - void setQmlBaseName(const QString& name) { baseName_ = name; } - const QmlClassNode* qmlBaseNode() const { return baseNode_; } - void setQmlBaseNode(QmlClassNode* b) { baseNode_ = b; } + const QString& qmlBaseName() const { return qmlBaseName_; } + void setQmlBaseName(const QString& name) { qmlBaseName_ = name; } + bool qmlBaseNodeNotSet() const { return (qmlBaseNode_ == 0); } + QmlClassNode* qmlBaseNode(); + void setQmlBaseNode(QmlClassNode* b) { qmlBaseNode_ = b; } void requireCppClass() { cnodeRequired_ = true; } bool cppClassRequired() const { return cnodeRequired_; } static void addInheritedBy(const QString& base, Node* sub); @@ -651,10 +627,10 @@ private: bool cnodeRequired_; bool wrapper_; ClassNode* cnode_; - QString baseName_; + QString qmlBaseName_; QString obsoleteLink_; QmlModuleNode* qmlModule_; - QmlClassNode* baseNode_; + QmlClassNode* qmlBaseNode_; ImportList importList_; }; @@ -665,6 +641,7 @@ public: const QString& name); virtual ~QmlBasicTypeNode() { } virtual bool isQmlNode() const { return true; } + virtual bool isQmlBasicType() const { return true; } }; class QmlPropertyGroupNode : public InnerNode @@ -687,8 +664,6 @@ public: int idNumber_; }; -class QmlPropertyNode; - class QmlPropertyNode : public LeafNode { Q_DECLARE_TR_FUNCTIONS(QDoc::QmlPropertyNode) @@ -711,7 +686,7 @@ public: bool isReadOnlySet() const { return (readOnly_ != FlagValueDefault); } bool isStored() const { return fromFlagValue(stored_,true); } bool isDesignable() const { return fromFlagValue(designable_,false); } - bool isWritable(QDocDatabase* qdb); + bool isWritable(); virtual bool isDefault() const { return isdefault_; } virtual bool isReadOnly() const { return fromFlagValue(readOnly_,false); } virtual bool isAlias() const { return isAlias_; } @@ -723,10 +698,11 @@ public: virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); } virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); } - PropertyNode* correspondingProperty(QDocDatabase* qdb); - const QString& element() const { return static_cast<QmlPropertyGroupNode*>(parent())->element(); } + private: + PropertyNode* findCorrespondingCppProperty(); + private: QString type_; FlagValue stored_; @@ -756,8 +732,6 @@ private: Text txt; }; -class TypedefNode; - class EnumNode : public LeafNode { public: @@ -831,8 +805,6 @@ private: QString def; }; -class PropertyNode; - class FunctionNode : public LeafNode { public: @@ -1049,6 +1021,94 @@ public: const DitaRefList& map() const { return doc().ditamap(); } }; +class CollectionNode : public InnerNode +{ + public: + CollectionNode(Type type, InnerNode* parent, const QString& name) + : InnerNode(type, parent, name), seen_(false) { + setPageType(Node::OverviewPage); + } + virtual ~CollectionNode() { } + + virtual bool isCollectionNode() const { return true; } + virtual void addMember(Node* node); + virtual bool hasMembers() const; + virtual bool hasNamespaces() const; + virtual bool hasClasses() const; + virtual void getMemberNamespaces(NodeMap& out); + virtual void getMemberClasses(NodeMap& out); + virtual bool wasSeen() const { return seen_; } + virtual QString title() const { return title_; } + virtual QString subTitle() const { return subtitle_; } + virtual QString fullTitle() const { return title_; } + virtual QString nameForLists() const { return title_; } + virtual void setTitle(const QString &title); + virtual void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; } + + const NodeList& members() const { return members_; } + void printMembers(const QString& title); + + void markSeen() { seen_ = true; } + void markNotSeen() { seen_ = false; } + + private: + bool seen_; + QString title_; + QString subtitle_; + NodeList members_; +}; + +class GroupNode : public CollectionNode +{ + public: + GroupNode(InnerNode* parent, const QString& name) + : CollectionNode(Node::Group, parent, name) { } + virtual ~GroupNode() { } + + virtual bool isGroup() const { return true; } +}; + +class ModuleNode : public CollectionNode +{ + public: + ModuleNode(InnerNode* parent, const QString& name) + : CollectionNode(Node::Module, parent, name) { } + virtual ~ModuleNode() { } + + virtual bool isModule() const { return true; } + virtual void setQtVariable(const QString& v) { qtVariable_ = v; } + virtual QString qtVariable() const { return qtVariable_; } + + private: + QString qtVariable_; +}; + +class QmlModuleNode : public CollectionNode +{ + public: + QmlModuleNode(InnerNode* parent, const QString& name) + : CollectionNode(Node::QmlModule, parent, name) { } + virtual ~QmlModuleNode() { } + + virtual bool isQmlModule() const { return true; } + virtual QString qmlModuleName() const { return qmlModuleName_; } + virtual QString qmlModuleVersion() const { + return qmlModuleVersionMajor_ + "." + qmlModuleVersionMinor_; + } + virtual QString qmlModuleIdentifier() const { + return qmlModuleName_ + qmlModuleVersionMajor_; + } + virtual void setQmlModuleInfo(const QString& ); + virtual void setQtVariable(const QString& v) { qtVariable_ = v; } + virtual QString qtVariable() const { return qtVariable_; } + + private: + QString qmlModuleName_; + QString qmlModuleVersionMajor_; + QString qmlModuleVersionMinor_; + QString qtVariable_; +}; + QT_END_NAMESPACE #endif |