diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-12-21 17:26:40 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-12-22 15:42:31 +0000 |
commit | c2710a07e01b761c2f6892dc25b9fa83475e8c82 (patch) | |
tree | b405d8e289a1edd4ff86cf98fe92d0fe32655bf4 | |
parent | 72afb0c30642c9f1d15a6271d25e0bef97a42f3b (diff) |
shiboken6/ApiExtractorResult: Use const AbstractMetaClass * for the class list
Add the missing overloads of AbstractMetaClass::findClass()
and adapt some types.
Change-Id: I65851248b4b6a2e1d4f57fc58ecaf75fb4c00b29
Reviewed-by: Christian Tismer <tismer@stackless.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(cherry picked from commit 6d25758babd8ccad4fbc7effe561c29cbd692434)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetalang.cpp | 17 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetalang.h | 4 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/apiextractor.cpp | 13 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/apiextractorresult.h | 8 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.cpp | 2 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.h | 2 | ||||
-rw-r--r-- | sources/shiboken6/generator/generator.cpp | 6 | ||||
-rw-r--r-- | sources/shiboken6/generator/generator.h | 2 | ||||
-rw-r--r-- | sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp | 9 | ||||
-rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator.cpp | 2 | ||||
-rw-r--r-- | sources/shiboken6/generator/shiboken/headergenerator.cpp | 6 |
11 files changed, 51 insertions, 20 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp index 114433163..1875bf862 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp @@ -1409,6 +1409,13 @@ AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &cla return it != classes.cend() ? *it : nullptr; } +const AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassCList &classes, + const QString &name) +{ + auto it = findClassHelper(classes.cbegin(), classes.cend(), name); + return it != classes.cend() ? *it : nullptr; +} + AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &classes, const TypeEntry *typeEntry) { @@ -1419,6 +1426,16 @@ AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &cla return nullptr; } +const AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassCList &classes, + const TypeEntry *typeEntry) +{ + for (auto c : classes) { + if (c->typeEntry() == typeEntry) + return c; + } + return nullptr; +} + // Query functions for generators bool AbstractMetaClass::isObjectType() const { diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.h b/sources/shiboken6/ApiExtractor/abstractmetalang.h index 61b5a092c..3626ba469 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetalang.h +++ b/sources/shiboken6/ApiExtractor/abstractmetalang.h @@ -293,8 +293,12 @@ public: static AbstractMetaClass *findClass(const AbstractMetaClassList &classes, const QString &name); + static const AbstractMetaClass *findClass(const AbstractMetaClassCList &classes, + const QString &name); static AbstractMetaClass *findClass(const AbstractMetaClassList &classes, const TypeEntry* typeEntry); + static const AbstractMetaClass *findClass(const AbstractMetaClassCList &classes, + const TypeEntry* typeEntry); static std::optional<AbstractMetaEnumValue> findEnumValue(const AbstractMetaClassList &classes, const QString &string); static std::optional<AbstractMetaEnum> findEnum(const AbstractMetaClassList &classes, diff --git a/sources/shiboken6/ApiExtractor/apiextractor.cpp b/sources/shiboken6/ApiExtractor/apiextractor.cpp index 8e4501c74..da868d182 100644 --- a/sources/shiboken6/ApiExtractor/apiextractor.cpp +++ b/sources/shiboken6/ApiExtractor/apiextractor.cpp @@ -45,6 +45,9 @@ #include "typedatabase.h" #include "typesystem.h" +#include <algorithm> +#include <iterator> + ApiExtractor::ApiExtractor() { // Environment TYPESYSTEMPATH @@ -222,13 +225,19 @@ bool ApiExtractor::runHelper(bool usePySideExtensions) return result; } +static inline void classListToCList(const AbstractMetaClassList &list, AbstractMetaClassCList *target) +{ + target->reserve(list.size()); + std::copy(list.cbegin(), list.cend(), std::back_inserter(*target)); +} + std::optional<ApiExtractorResult> ApiExtractor::run(bool usePySideExtensions) { if (!runHelper(usePySideExtensions)) return {}; ApiExtractorResult result; - result.m_metaClasses = m_builder->classes(); - result.m_smartPointers = m_builder->smartPointers(); + classListToCList(m_builder->classes(), &result.m_metaClasses); + classListToCList(m_builder->smartPointers(), &result.m_smartPointers); result.m_globalFunctions = m_builder->globalFunctions(); result.m_globalEnums = m_builder->globalEnums(); result.m_enums = m_builder->typeEntryToEnumsHash(); diff --git a/sources/shiboken6/ApiExtractor/apiextractorresult.h b/sources/shiboken6/ApiExtractor/apiextractorresult.h index 5d30073e9..18b07a1b7 100644 --- a/sources/shiboken6/ApiExtractor/apiextractorresult.h +++ b/sources/shiboken6/ApiExtractor/apiextractorresult.h @@ -49,8 +49,8 @@ class ApiExtractorResult public: const AbstractMetaEnumList &globalEnums() const { return m_globalEnums; } const AbstractMetaFunctionCList &globalFunctions() const { return m_globalFunctions; } - const AbstractMetaClassList &classes() const { return m_metaClasses; } - const AbstractMetaClassList &smartPointers() const { return m_smartPointers; } + const AbstractMetaClassCList &classes() const { return m_metaClasses; } + const AbstractMetaClassCList &smartPointers() const { return m_smartPointers; } // Query functions for the generators std::optional<AbstractMetaEnum> findAbstractMetaEnum(const TypeEntry* typeEntry) const; @@ -64,8 +64,8 @@ public: AbstractMetaFunctionCList implicitConversions(const AbstractMetaType &metaType) const; private: - AbstractMetaClassList m_metaClasses; - AbstractMetaClassList m_smartPointers; + AbstractMetaClassCList m_metaClasses; + AbstractMetaClassCList m_smartPointers; AbstractMetaFunctionCList m_globalFunctions; AbstractMetaEnumList m_globalEnums; diff --git a/sources/shiboken6/ApiExtractor/messages.cpp b/sources/shiboken6/ApiExtractor/messages.cpp index 664db57eb..9da96de1a 100644 --- a/sources/shiboken6/ApiExtractor/messages.cpp +++ b/sources/shiboken6/ApiExtractor/messages.cpp @@ -576,7 +576,7 @@ QString msgConversionTypesDiffer(const QString &varType, const QString &conversi } QString msgCannotFindSmartPointer(const QString &instantiationType, - const AbstractMetaClassList &pointers) + const AbstractMetaClassCList &pointers) { QString result; QTextStream str(&result); diff --git a/sources/shiboken6/ApiExtractor/messages.h b/sources/shiboken6/ApiExtractor/messages.h index e3a89319f..d2aae484f 100644 --- a/sources/shiboken6/ApiExtractor/messages.h +++ b/sources/shiboken6/ApiExtractor/messages.h @@ -184,7 +184,7 @@ QString msgCannotUseEnumAsInt(const QString &name); QString msgConversionTypesDiffer(const QString &varType, const QString &conversionType); QString msgCannotFindSmartPointer(const QString &instantiationType, - const AbstractMetaClassList &pointers); + const AbstractMetaClassCList &pointers); QString msgLeftOverArguments(const QMap<QString, QString> &remainingArgs); diff --git a/sources/shiboken6/generator/generator.cpp b/sources/shiboken6/generator/generator.cpp index deb27de80..ca33fac02 100644 --- a/sources/shiboken6/generator/generator.cpp +++ b/sources/shiboken6/generator/generator.cpp @@ -177,7 +177,7 @@ struct Generator::GeneratorPrivate QStringList instantiatedContainersNames; AbstractMetaTypeList instantiatedContainers; AbstractMetaTypeList instantiatedSmartPointers; - AbstractMetaClassList m_invisibleTopNamespaces; + AbstractMetaClassCList m_invisibleTopNamespaces; }; Generator::Generator() : m_d(new GeneratorPrivate) @@ -353,7 +353,7 @@ bool Generator::handleOption(const QString & /* key */, const QString & /* value return false; } -const AbstractMetaClassList &Generator::invisibleTopNamespaces() const +const AbstractMetaClassCList &Generator::invisibleTopNamespaces() const { return m_d->m_invisibleTopNamespaces; } @@ -460,7 +460,7 @@ bool Generator::generate() const auto smartPointers = m_d->api.smartPointers(); for (const AbstractMetaType &type : qAsConst(m_d->instantiatedSmartPointers)) { - AbstractMetaClass *smartPointerClass = + const AbstractMetaClass *smartPointerClass = AbstractMetaClass::findClass(smartPointers, type.typeEntry()); if (!smartPointerClass) { qCWarning(lcShiboken, "%s", diff --git a/sources/shiboken6/generator/generator.h b/sources/shiboken6/generator/generator.h index 5773d4097..0d8d0c475 100644 --- a/sources/shiboken6/generator/generator.h +++ b/sources/shiboken6/generator/generator.h @@ -217,7 +217,7 @@ public: virtual bool handleOption(const QString &key, const QString &value); /// Returns the top namespace made invisible - const AbstractMetaClassList &invisibleTopNamespaces() const; + const AbstractMetaClassCList &invisibleTopNamespaces() const; /// Returns the output directory QString outputDirectory() const; diff --git a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp index ad0e9e78d..74badd024 100644 --- a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp +++ b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp @@ -215,10 +215,11 @@ void QtDocGenerator::writeFormattedText(TextStream &s, const Documentation &doc, s << '\n'; } -static void writeInheritedByList(TextStream& s, const AbstractMetaClass* metaClass, const AbstractMetaClassList& allClasses) +static void writeInheritedByList(TextStream& s, const AbstractMetaClass* metaClass, + const AbstractMetaClassCList& allClasses) { - AbstractMetaClassList res; - for (AbstractMetaClass *c : allClasses) { + AbstractMetaClassCList res; + for (auto c : allClasses) { if (c != metaClass && c->inheritsFrom(metaClass)) res << c; } @@ -228,7 +229,7 @@ static void writeInheritedByList(TextStream& s, const AbstractMetaClass* metaCla s << "**Inherited by:** "; QStringList classes; - for (AbstractMetaClass *c : qAsConst(res)) + for (auto c : qAsConst(res)) classes << QLatin1String(":ref:`") + c->name() + QLatin1Char('`'); s << classes.join(QLatin1String(", ")) << "\n\n"; } diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index cb4f9c890..3168490aa 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -5749,7 +5749,7 @@ QString CppGenerator::qObjectGetAttroFunction() const { static QString result; if (result.isEmpty()) { - AbstractMetaClass *qobjectClass = AbstractMetaClass::findClass(api().classes(), qObjectT()); + auto qobjectClass = AbstractMetaClass::findClass(api().classes(), qObjectT()); Q_ASSERT(qobjectClass); result = QLatin1String("PySide::getMetaDataFromQObject(") + cpythonWrapperCPtr(qobjectClass, QLatin1String("self")) diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp index fb7e36524..b7719f803 100644 --- a/sources/shiboken6/generator/shiboken/headergenerator.cpp +++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp @@ -396,9 +396,9 @@ bool HeaderGenerator::finishGeneration() } macrosStream << "// Type indices\nenum : int {\n"; - AbstractMetaClassList classList = api().classes(); + AbstractMetaClassCList classList = api().classes(); - std::sort(classList.begin(), classList.end(), [](AbstractMetaClass *a, AbstractMetaClass *b) { + std::sort(classList.begin(), classList.end(), [](const AbstractMetaClass *a, const AbstractMetaClass *b) { return a->typeEntry()->sbkIndex() < b->typeEntry()->sbkIndex(); }); @@ -489,7 +489,7 @@ bool HeaderGenerator::finishGeneration() } StringStream protEnumsSurrogates(TextStream::Language::Cpp); - for (AbstractMetaClass *metaClass : classList) { + for (auto metaClass : classList) { if (!shouldGenerate(metaClass)) continue; |