aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp')
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp b/sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp
index f41104a77..68eef737a 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp
+++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder_helpers.cpp
@@ -9,6 +9,8 @@
#include "enumtypeentry.h"
#include "flagstypeentry.h"
+using namespace Qt::StringLiterals;
+
using QStringViewList = QList<QStringView>;
// Return a prefix to fully qualify value, eg:
@@ -19,7 +21,7 @@ static QString resolveScopePrefixHelper(const QStringViewList &scopeList,
{
QString name;
for (qsizetype i = scopeList.size() - 1 ; i >= 0; --i) {
- const QString prefix = scopeList.at(i).toString() + u"::"_qs;
+ const QString prefix = scopeList.at(i).toString() + u"::"_s;
if (value.startsWith(prefix))
name.clear();
else
@@ -28,14 +30,14 @@ static QString resolveScopePrefixHelper(const QStringViewList &scopeList,
return name;
}
-QString AbstractMetaBuilder::resolveScopePrefix(const AbstractMetaClass *scope,
+QString AbstractMetaBuilder::resolveScopePrefix(const AbstractMetaClassCPtr &scope,
QStringView value)
{
if (!scope)
return {};
const QString &qualifiedCppName = scope->qualifiedCppName();
const QStringViewList scopeList =
- QStringView{qualifiedCppName}.split(u"::"_qs, Qt::SkipEmptyParts);
+ QStringView{qualifiedCppName}.split(u"::"_s, Qt::SkipEmptyParts);
return resolveScopePrefixHelper(scopeList, value);
}
@@ -43,13 +45,13 @@ QString AbstractMetaBuilder::resolveScopePrefix(const AbstractMetaClass *scope,
static QString resolveEnumValueScopePrefix(const AbstractMetaEnum &metaEnum,
QStringView value)
{
- const AbstractMetaClass *scope = metaEnum.enclosingClass();
+ AbstractMetaClassCPtr scope = metaEnum.enclosingClass();
if (!scope)
return {}; // global enum, value should work as is
const QString &qualifiedCppName = scope->qualifiedCppName();
const QString &enumName = metaEnum.name();
QStringViewList parts =
- QStringView{qualifiedCppName}.split(u"::"_qs, Qt::SkipEmptyParts);
+ QStringView{qualifiedCppName}.split(u"::"_s, Qt::SkipEmptyParts);
// Append the type (as required for enum classes) unless it is an anonymous enum.
if (!metaEnum.isAnonymous())
parts.append(QStringView{enumName});
@@ -83,21 +85,26 @@ static bool isFloatConstant(const QStringView expr)
// to the default value, making it usable from Python wrapper code outside the
// owner class hierarchy. See TestEnum::testEnumDefaultValues().
QString AbstractMetaBuilderPrivate::fixEnumDefault(const AbstractMetaType &type,
- const QString &expr) const
+ const QString &expr,
+ const AbstractMetaClassCPtr &klass) const
{
// QFlags construct from integers, do not fix that
if (isIntegerConstant(expr))
return expr;
- const auto *typeEntry = type.typeEntry();
- const EnumTypeEntry *enumTypeEntry = nullptr;
- const FlagsTypeEntry *flagsTypeEntry = nullptr;
+ const QString field = qualifyStaticField(klass, expr);
+ if (!field.isEmpty())
+ return field;
+
+ const auto typeEntry = type.typeEntry();
+ EnumTypeEntryCPtr enumTypeEntry;
+ FlagsTypeEntryCPtr flagsTypeEntry;
if (typeEntry->isFlags()) {
- flagsTypeEntry = static_cast<const FlagsTypeEntry *>(typeEntry);
+ flagsTypeEntry = std::static_pointer_cast<const FlagsTypeEntry>(typeEntry);
enumTypeEntry = flagsTypeEntry->originator();
} else {
Q_ASSERT(typeEntry->isEnum());
- enumTypeEntry = static_cast<const EnumTypeEntry *>(typeEntry);
+ enumTypeEntry = std::static_pointer_cast<const EnumTypeEntry>(typeEntry);
}
// Use the enum's qualified name (would otherwise be "QFlags<Enum>")
if (!enumTypeEntry->qualifiedCppName().contains(u"::"))
@@ -157,7 +164,7 @@ QString AbstractMetaBuilderPrivate::fixEnumDefault(const AbstractMetaType &type,
qualified.prepend(resolveEnumValueScopePrefix(metaEnum, token));
qualifiedTokens.append(qualified);
}
- const QString qualifiedExpression = qualifiedTokens.join(u" | "_qs);
+ const QString qualifiedExpression = qualifiedTokens.join(u" | "_s);
if (!typeCast)
return qualifiedExpression;
@@ -175,7 +182,7 @@ bool AbstractMetaBuilder::dontFixDefaultValue(QStringView expr)
|| isIntegerConstant(expr) || isFloatConstant(expr);
}
-QString AbstractMetaBuilderPrivate::qualifyStaticField(const AbstractMetaClass *c,
+QString AbstractMetaBuilderPrivate::qualifyStaticField(const AbstractMetaClassCPtr &c,
QStringView field)
{
if (!c || c->fields().isEmpty())