diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-02-20 12:30:47 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-02-21 10:03:20 +0000 |
commit | b461e45a8e3b6f80f9e6a3b4505867ece6799355 (patch) | |
tree | 39989795d1d6d8474a444648258cddb3fe839d08 | |
parent | 5e4e428210742d252fe73e46e4c3393375173e0c (diff) |
DocParser: Add helper function to create list of documentable functions
Move code from shouldSkip() helper of the doc generator
into the doc parser and use that for the qdoc/doxygen parsers.
The additional checks (most importantly the check for
declaringClass != ownerClass excluding the virtual functions
added by AbstractMetaClass::fixFunctions() to derived classes)
avoid running unneeded XPATH queries.
Task-number: PYSIDE-363
Change-Id: Ib1141a348c96b269a50c63dd94fe93931c12d1ec
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r-- | sources/shiboken2/ApiExtractor/docparser.cpp | 30 | ||||
-rw-r--r-- | sources/shiboken2/ApiExtractor/docparser.h | 6 | ||||
-rw-r--r-- | sources/shiboken2/ApiExtractor/doxygenparser.cpp | 5 | ||||
-rw-r--r-- | sources/shiboken2/ApiExtractor/qtdocparser.cpp | 5 | ||||
-rw-r--r-- | sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp | 53 |
5 files changed, 64 insertions, 35 deletions
diff --git a/sources/shiboken2/ApiExtractor/docparser.cpp b/sources/shiboken2/ApiExtractor/docparser.cpp index bae438f18..50a08d7c9 100644 --- a/sources/shiboken2/ApiExtractor/docparser.cpp +++ b/sources/shiboken2/ApiExtractor/docparser.cpp @@ -69,6 +69,36 @@ QString DocParser::execXQuery(QXmlQuery& xquery, const QString& query) const return result; } +bool DocParser::skipForQuery(const AbstractMetaFunction *func) +{ + // Skip private functions and copies created by AbstractMetaClass::fixFunctions() + if (!func || func->isPrivate() + || func->isModifiedRemoved() + || func->declaringClass() != func->ownerClass() + || func->isCastOperator()) { + return true; + } + switch (func->functionType()) { + case AbstractMetaFunction::MoveConstructorFunction: + case AbstractMetaFunction::AssignmentOperatorFunction: + case AbstractMetaFunction::MoveAssignmentOperatorFunction: + return true; + default: + break; + } + return false; +} + +AbstractMetaFunctionList DocParser::documentableFunctions(const AbstractMetaClass *metaClass) +{ + AbstractMetaFunctionList result = metaClass->functionsInTargetLang(); + for (int i = result.size() - 1; i >= 0; --i) { + if (DocParser::skipForQuery(result.at(i)) || result.at(i)->isUserAdded()) + result.removeAt(i); + } + return result; +} + namespace { diff --git a/sources/shiboken2/ApiExtractor/docparser.h b/sources/shiboken2/ApiExtractor/docparser.h index 5573f6851..afca254a4 100644 --- a/sources/shiboken2/ApiExtractor/docparser.h +++ b/sources/shiboken2/ApiExtractor/docparser.h @@ -29,6 +29,7 @@ #define DOCPARSER_H #include "typesystem_typedefs.h" +#include "abstractmetalang_typedefs.h" #include <QtCore/QString> @@ -110,10 +111,15 @@ public: */ virtual Documentation retrieveModuleDocumentation(const QString& name) = 0; + static bool skipForQuery(const AbstractMetaFunction *func); + protected: QString getDocumentation(QXmlQuery& xquery, const QString& query, const DocModificationList& mods) const; + + static AbstractMetaFunctionList documentableFunctions(const AbstractMetaClass *metaClass); + private: QString m_packageName; QString m_docDataDir; diff --git a/sources/shiboken2/ApiExtractor/doxygenparser.cpp b/sources/shiboken2/ApiExtractor/doxygenparser.cpp index 6b90fe6fc..0361445fd 100644 --- a/sources/shiboken2/ApiExtractor/doxygenparser.cpp +++ b/sources/shiboken2/ApiExtractor/doxygenparser.cpp @@ -105,11 +105,8 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass) metaClass->setDocumentation(classDoc); //Functions Documentation - const AbstractMetaFunctionList &funcs = metaClass->functionsInTargetLang(); + const AbstractMetaFunctionList &funcs = DocParser::documentableFunctions(metaClass); for (AbstractMetaFunction *func : funcs) { - if (!func || func->isPrivate()) - continue; - QString query = QLatin1String("/doxygen/compounddef/sectiondef"); // properties if (func->isPropertyReader() || func->isPropertyWriter() diff --git a/sources/shiboken2/ApiExtractor/qtdocparser.cpp b/sources/shiboken2/ApiExtractor/qtdocparser.cpp index 99cf15e48..b8a718ddc 100644 --- a/sources/shiboken2/ApiExtractor/qtdocparser.cpp +++ b/sources/shiboken2/ApiExtractor/qtdocparser.cpp @@ -91,11 +91,8 @@ void QtDocParser::fillDocumentation(AbstractMetaClass* metaClass) //Functions Documentation - const AbstractMetaFunctionList &funcs = metaClass->functionsInTargetLang(); + const AbstractMetaFunctionList &funcs = DocParser::documentableFunctions(metaClass); for (AbstractMetaFunction *func : funcs) { - if (!func || func->isPrivate()) - continue; - QString query = QLatin1String("/WebXML/document/") + type + QLatin1String("[@name=\"") + className + QLatin1String("\"]"); // properties diff --git a/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp index f33cebfae..76dac2683 100644 --- a/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp +++ b/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp @@ -47,37 +47,36 @@ static Indentor INDENT; static bool shouldSkip(const AbstractMetaFunction* func) { - bool skipable = func->isConstructor() - || func->isModifiedRemoved() - || func->declaringClass() != func->ownerClass() - || func->isCastOperator() - || func->name() == QLatin1String("operator="); - - // Search a const clone - if (!skipable && !func->isConstant()) { - const AbstractMetaArgumentList funcArgs = func->arguments(); - const AbstractMetaFunctionList &ownerFunctions = func->ownerClass()->functions(); - for (AbstractMetaFunction *f : ownerFunctions) { - if (f != func - && f->isConstant() - && f->name() == func->name() - && f->arguments().count() == funcArgs.count()) { - // Compare each argument - bool cloneFound = true; - - const AbstractMetaArgumentList fargs = f->arguments(); - for (int i = 0, max = funcArgs.count(); i < max; ++i) { - if (funcArgs.at(i)->type()->typeEntry() != fargs.at(i)->type()->typeEntry()) { - cloneFound = false; - break; - } + // Constructors go to separate section + if (DocParser::skipForQuery(func) || func->isConstructor()) + return true; + + // Search a const clone (QImage::bits() vs QImage::bits() const) + if (func->isConstant()) + return false; + + const AbstractMetaArgumentList funcArgs = func->arguments(); + const AbstractMetaFunctionList &ownerFunctions = func->ownerClass()->functions(); + for (AbstractMetaFunction *f : ownerFunctions) { + if (f != func + && f->isConstant() + && f->name() == func->name() + && f->arguments().count() == funcArgs.count()) { + // Compare each argument + bool cloneFound = true; + + const AbstractMetaArgumentList fargs = f->arguments(); + for (int i = 0, max = funcArgs.count(); i < max; ++i) { + if (funcArgs.at(i)->type()->typeEntry() != fargs.at(i)->type()->typeEntry()) { + cloneFound = false; + break; } - if (cloneFound) - return true; } + if (cloneFound) + return true; } } - return skipable; + return false; } static bool functionSort(const AbstractMetaFunction* func1, const AbstractMetaFunction* func2) |