aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-18 11:02:44 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-18 13:14:16 +0100
commit3b05862730ca8f5cf674562c438501e8d9877738 (patch)
tree17bb3d983629ca83c59e8c14fb6f69a9e106710f
parent3f55b0f6c6e566bf83a0ffcc626d085ae01d640c (diff)
shiboken6: Preferably search classes by type entry
If a type entry is available, use that to search rather than by name, which has issues with qualified names. Task-number: PYSIDE-1417 Change-Id: I9d9bc1d85481c366d6d7c84879ec2caa9458ac77 Reviewed-by: Christian Tismer <tismer@stackless.com> (cherry picked from commit 768cfefa3d693f682d8c71b085e861c3be9631d7)
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp8
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetalang.cpp22
2 files changed, 11 insertions, 19 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
index d59147d54..5ab6c1976 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
@@ -575,7 +575,8 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
} else if (entry->isEnum() && entry->generateCode()) {
auto enumEntry = static_cast<const EnumTypeEntry *>(entry);
const QString name = enumEntry->targetLangQualifier();
- AbstractMetaClass *cls = AbstractMetaClass::findClass(m_metaClasses, name);
+ AbstractMetaClass *cls = AbstractMetaClass::findClass(m_metaClasses,
+ enumEntry->parent());
const bool enumFound = cls
? cls->findEnum(entry->targetLangEntryName()) != nullptr
@@ -1471,12 +1472,13 @@ bool AbstractMetaBuilderPrivate::setupInheritance(AbstractMetaClass *metaClass)
for (const auto &baseClassName : baseClasses) {
if (!types->isClassRejected(baseClassName)) {
- if (!types->findType(baseClassName)) {
+ auto typeEntry = types->findType(baseClassName);
+ if (typeEntry == nullptr || !typeEntry->isComplex()) {
qCWarning(lcShiboken, "%s",
qPrintable(msgUnknownBase(metaClass, baseClassName)));
return false;
}
- auto baseClass = AbstractMetaClass::findClass(m_metaClasses, baseClassName);
+ auto baseClass = AbstractMetaClass::findClass(m_metaClasses, typeEntry);
if (!baseClass) {
qCWarning(lcShiboken).noquote().nospace()
<< QStringLiteral("class not found for setup inheritance '%1'").arg(baseClassName);
diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
index 3bdac909c..f1f01e02c 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
@@ -2520,28 +2520,18 @@ AbstractMetaEnum *AbstractMetaClass::findEnum(const AbstractMetaClassList &class
{
Q_ASSERT(entry->isEnum());
- QString qualifiedName = entry->qualifiedCppName();
- int pos = qualifiedName.lastIndexOf(QLatin1String("::"));
-
- QString enumName;
- QString className;
-
- if (pos > 0) {
- enumName = qualifiedName.mid(pos + 2);
- className = qualifiedName.mid(0, pos);
- } else {
- enumName = qualifiedName;
- className = TypeDatabase::globalNamespaceClassName(entry);
- }
-
- AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes, className);
+ auto scopeEntry = entry->parent();
+ AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes, scopeEntry);
if (!metaClass) {
qCWarning(lcShiboken).noquote().nospace()
<< QStringLiteral("AbstractMeta::findEnum(), unknown class '%1' in '%2'")
- .arg(className, entry->qualifiedCppName());
+ .arg(scopeEntry->qualifiedCppName(), entry->qualifiedCppName());
return nullptr;
}
+ QString qualifiedName = entry->qualifiedCppName();
+ const int pos = qualifiedName.lastIndexOf(QLatin1String("::"));
+ const QString enumName = pos > 0 ? qualifiedName.mid(pos + 2) : qualifiedName;
return metaClass->findEnum(enumName);
}