diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-07-19 21:38:31 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-07-21 10:01:45 +0200 |
commit | b1b2cc2ebed2fcf6e31c1fbbdd3638216e34717b (patch) | |
tree | 02df3a6225998ed332b5f75bef0352c87e19696d | |
parent | 947a7f5f5d55b6f72b449578d905e9a4b5feb6ea (diff) |
shiboken6: Fix missing functions from base classes
Add all occurrences found by name in getInheritedOverloads().
This manifested in missing overloads of QWidget::addAction()
introduced by qtbase/08e4d2db084f6abbf1840ffb694b15bd215ad069.
Pick-to: 6.1
Change-Id: I6b3bf143d32addbbb6b8332bed5e86e1677b0e28
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetalang.cpp | 11 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetalang.h | 1 | ||||
-rw-r--r-- | sources/shiboken6/generator/shiboken/shibokengenerator.cpp | 14 |
3 files changed, 20 insertions, 6 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp index 0caf4812e..080257346 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp @@ -607,6 +607,17 @@ AbstractMetaFunctionCPtr AbstractMetaClass::findFunction(const QString &function return AbstractMetaFunction::find(d->m_functions, functionName); } +AbstractMetaFunctionCList AbstractMetaClass::findFunctions(const QString &functionName) const +{ + AbstractMetaFunctionCList result; + std::copy_if(d->m_functions.cbegin(), d->m_functions.cend(), + std::back_inserter(result), + [&functionName](const AbstractMetaFunctionCPtr &f) { + return f->name() == functionName; + }); + return result; +} + AbstractMetaFunctionCPtr AbstractMetaClass::findOperatorBool() const { auto it = std::find_if(d->m_functions.cbegin(), d->m_functions.cend(), diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.h b/sources/shiboken6/ApiExtractor/abstractmetalang.h index 7b5ef4cc2..6f1971df9 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetalang.h +++ b/sources/shiboken6/ApiExtractor/abstractmetalang.h @@ -95,6 +95,7 @@ public: void addFunction(const AbstractMetaFunctionCPtr &function); bool hasFunction(const QString &str) const; AbstractMetaFunctionCPtr findFunction(const QString& functionName) const; + AbstractMetaFunctionCList findFunctions(const QString& functionName) const; AbstractMetaFunctionCPtr findOperatorBool() const; // Find a Qt-style isNull() method suitable for nb_bool AbstractMetaFunctionCPtr findQtIsNullMethod() const; diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp index f4c1bb4e1..0202dc619 100644 --- a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp +++ b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp @@ -2299,12 +2299,14 @@ AbstractMetaFunctionCList AbstractMetaClass *basis; if (func->ownerClass() && (basis = func->ownerClass()->baseClass())) { for (; basis; basis = basis->baseClass()) { - const auto inFunc = basis->findFunction(func->name()); - if (!inFunc.isNull() && !seen->contains(inFunc->minimalSignature())) { - seen->insert(inFunc->minimalSignature()); - AbstractMetaFunction *newFunc = inFunc->copy(); - newFunc->setImplementingClass(func->implementingClass()); - results << AbstractMetaFunctionCPtr(newFunc); + const auto inFunctions = basis->findFunctions(func->name()); + for (const auto &inFunc : inFunctions) { + if (!seen->contains(inFunc->minimalSignature())) { + seen->insert(inFunc->minimalSignature()); + AbstractMetaFunction *newFunc = inFunc->copy(); + newFunc->setImplementingClass(func->implementingClass()); + results << AbstractMetaFunctionCPtr(newFunc); + } } } } |