aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-12-21 17:26:40 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-12-22 15:42:31 +0000
commitc2710a07e01b761c2f6892dc25b9fa83475e8c82 (patch)
treeb405d8e289a1edd4ff86cf98fe92d0fe32655bf4
parent72afb0c30642c9f1d15a6271d25e0bef97a42f3b (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.cpp17
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang.h4
-rw-r--r--sources/shiboken6/ApiExtractor/apiextractor.cpp13
-rw-r--r--sources/shiboken6/ApiExtractor/apiextractorresult.h8
-rw-r--r--sources/shiboken6/ApiExtractor/messages.cpp2
-rw-r--r--sources/shiboken6/ApiExtractor/messages.h2
-rw-r--r--sources/shiboken6/generator/generator.cpp6
-rw-r--r--sources/shiboken6/generator/generator.h2
-rw-r--r--sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp9
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp2
-rw-r--r--sources/shiboken6/generator/shiboken/headergenerator.cpp6
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;