aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-02-20 12:30:47 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-02-21 10:03:20 +0000
commitb461e45a8e3b6f80f9e6a3b4505867ece6799355 (patch)
tree39989795d1d6d8474a444648258cddb3fe839d08 /sources/shiboken2/ApiExtractor
parent5e4e428210742d252fe73e46e4c3393375173e0c (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>
Diffstat (limited to 'sources/shiboken2/ApiExtractor')
-rw-r--r--sources/shiboken2/ApiExtractor/docparser.cpp30
-rw-r--r--sources/shiboken2/ApiExtractor/docparser.h6
-rw-r--r--sources/shiboken2/ApiExtractor/doxygenparser.cpp5
-rw-r--r--sources/shiboken2/ApiExtractor/qtdocparser.cpp5
4 files changed, 38 insertions, 8 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