aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2019-06-17 10:09:40 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2019-06-18 10:04:21 +0200
commit7dba09d7c4007e96fb0a39bf6f6e740cd207324a (patch)
treea9b0d69632e8eaf784a35d120e4152405a603950
parent6e77dec18651a023b8447ed7ce64c2a1db6e2462 (diff)
Fix type name for lookup of QFlags<> converters
For enum/flags registration, the converters were registered under invalid names like: Shiboken::Conversions::registerConverterName(converter, "QFlags<QFlags<QUrl::ComponentFormattingOption>"); Shiboken::Conversions::registerConverterName(converter, "QFlags<ComponentFormattingOption>"); In addition, QFlags<> is not used for type names in Python. Use the flags name as specified in the typesystem instead: Shiboken::Conversions::registerConverterName(converter, "QUrl::ComponentFormattingOptions"); Shiboken::Conversions::registerConverterName(converter, "ComponentFormattingOptions"); Change-Id: I79525643850bf4296516dfb9576f75b51adf6414 Fixes: PYSIDE-1029 Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
index d1da3a4ba..c033b8a21 100644
--- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
+++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
@@ -3686,14 +3686,29 @@ void CppGenerator::writeEnumConverterInitialization(QTextStream& s, const TypeEn
}
s << INDENT << "Shiboken::Enum::setTypeConverter(" << enumPythonType << ", converter);" << endl;
- QStringList cppSignature = enumType->qualifiedCppName().split(QLatin1String("::"), QString::SkipEmptyParts);
- while (!cppSignature.isEmpty()) {
- QString signature = cppSignature.join(QLatin1String("::"));
- s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"";
- if (flags)
- s << "QFlags<";
- s << signature << "\");" << endl;
- cppSignature.removeFirst();
+
+ QString signature = enumType->qualifiedCppName();
+ // Replace "QFlags<Class::Option>" by "Class::Options"
+ if (flags && signature.startsWith(QLatin1String("QFlags<")) && signature.endsWith(QLatin1Char('>'))) {
+ signature.chop(1);
+ signature.remove(0, 7);
+ const int lastQualifierPos = signature.lastIndexOf(QLatin1String("::"));
+ if (lastQualifierPos != -1) {
+ signature.replace(lastQualifierPos + 2, signature.size() - lastQualifierPos - 2,
+ flags->flagsName());
+ } else {
+ signature = flags->flagsName();
+ }
+ }
+
+ while (true) {
+ s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \""
+ << signature << "\");\n";
+ const int qualifierPos = signature.indexOf(QLatin1String("::"));
+ if (qualifierPos != -1)
+ signature.remove(0, qualifierPos + 2);
+ else
+ break;
}
}
s << INDENT << '}' << endl;