diff options
Diffstat (limited to 'sources')
-rw-r--r-- | sources/shiboken2/generator/shiboken2/shibokengenerator.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp index 69d7d5a53..6165ef009 100644 --- a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp @@ -2395,7 +2395,18 @@ AbstractMetaType *ShibokenGenerator::buildAbstractMetaTypeFromString(QString typ } } - TypeEntry* typeEntry = TypeDatabase::instance()->findType(adjustedTypeName); + TypeEntry *typeEntry = nullptr; + AbstractMetaType::TypeUsagePattern pattern = AbstractMetaType::InvalidPattern; + + if (instantiations.size() == 1 + && instantiations.at(0)->typeUsagePattern() == AbstractMetaType::EnumPattern + && adjustedTypeName == QLatin1String("QFlags")) { + pattern = AbstractMetaType::FlagsPattern; + typeEntry = TypeDatabase::instance()->findType(typeSignature); + } else { + typeEntry = TypeDatabase::instance()->findType(adjustedTypeName); + } + if (!typeEntry) { if (errorMessage) { QTextStream(errorMessage) << "Cannot find type \"" << adjustedTypeName @@ -2410,8 +2421,17 @@ AbstractMetaType *ShibokenGenerator::buildAbstractMetaTypeFromString(QString typ metaType->setReferenceType(refType); metaType->setConstant(isConst); metaType->setTypeUsagePattern(AbstractMetaType::ContainerPattern); - metaType->setInstantiations(instantiations); - metaType->decideUsagePattern(); + switch (pattern) { + case AbstractMetaType::FlagsPattern: + metaType->setTypeUsagePattern(pattern); + break; + default: + metaType->setInstantiations(instantiations); + metaType->setTypeUsagePattern(AbstractMetaType::ContainerPattern); + metaType->decideUsagePattern(); + break; + } + m_metaTypeFromStringCache.insert(typeSignature, metaType); return metaType; } |