diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-09-18 13:56:03 +0200 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2017-09-25 13:19:28 +0000 |
commit | e79b99edca1a8d38b81c929934ec4093c1292e74 (patch) | |
tree | 9c5c3d341a1aca7361f0b31064b943bd30f2c6e1 /sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp | |
parent | 269eebb9fa81d77977ce5307a849108c5291197d (diff) |
CodeModel: Handle access of inherited classes
Store the access of the base class in the code model.
Remove protected/private base classes in the abstract meta builder
as otherwise invalid code will be generated for classes like
QAbstract3DGraph : public QWindow, protected QOpenGLFunctions
when the protected hack is not in use (on Windows).
Task-number: PYSIDE-487
Change-Id: I5bc2dad16f903da86e6e41450c2f9a76726ac028
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp')
-rw-r--r-- | sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp index b235d9bd9..3d2afd8bf 100644 --- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp @@ -1284,7 +1284,15 @@ AbstractMetaClass *AbstractMetaBuilderPrivate::traverseClass(const FileModelItem AbstractMetaClass *metaClass = q->createMetaClass(); metaClass->setTypeEntry(type); - metaClass->setBaseClassNames(classItem->baseClasses()); + + QStringList baseClassNames; + const QVector<_ClassModelItem::BaseClass> &baseClasses = classItem->baseClasses(); + for (const _ClassModelItem::BaseClass &baseClass : baseClasses) { + if (baseClass.accessPolicy == CodeModel::Public) + baseClassNames.append(baseClass.name); + } + + metaClass->setBaseClassNames(baseClassNames); *metaClass += AbstractMetaAttributes::Public; if (type->stream()) metaClass->setStream(true); @@ -2877,19 +2885,19 @@ bool AbstractMetaBuilderPrivate::isQObject(const FileModelItem &dom, const QStri classItem = ns->findClass(names.at(names.size() - 1)); } - bool isqobject = classItem && classItem->extendsClass(QLatin1String("QObject")); + if (classItem == nullptr) + return false; - if (classItem && !isqobject) { - QStringList baseClasses = classItem->baseClasses(); - for (int i = 0; i < baseClasses.count(); ++i) { + if (classItem->extendsClass(QLatin1String("QObject"))) + return true; - isqobject = isQObject(dom, baseClasses.at(i)); - if (isqobject) - break; - } + const QVector<_ClassModelItem::BaseClass> &baseClasses = classItem->baseClasses(); + for (const _ClassModelItem::BaseClass &baseClass : baseClasses) { + if (isQObject(dom, baseClass.name)) + return true; } - return isqobject; + return false; } |