aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-07-19 21:38:31 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-07-21 15:42:29 +0200
commit4ebb970f497fe14f279e6dddd38090362ccf044a (patch)
treeb351ebe295bbba7b52493777f3cfb7929297c58a
parent5af6a8eb5e25a0c0de1761adff0752788354dfb5 (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. Change-Id: I6b3bf143d32addbbb6b8332bed5e86e1677b0e28 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit b1b2cc2ebed2fcf6e31c1fbbdd3638216e34717b)
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang.cpp11
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang.h1
-rw-r--r--sources/shiboken6/generator/shiboken/shibokengenerator.cpp14
3 files changed, 20 insertions, 6 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
index 3c33f52bc..360868020 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;
+}
+
bool AbstractMetaClass::hasProtectedFunctions() const
{
for (const auto &func : d->m_functions) {
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.h b/sources/shiboken6/ApiExtractor/abstractmetalang.h
index daa9eba1e..c401518a7 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;
bool hasSignal(const AbstractMetaFunction *f) const;
bool hasConstructors() const;
diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
index 883a57978..89379a310 100644
--- a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
@@ -2290,12 +2290,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);
+ }
}
}
}