aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2019-01-30 16:10:58 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2019-01-30 16:51:04 +0000
commitc0a4d44b22ce813850d6aced10302efcef2e9acd (patch)
tree46787ebdf43876d2b8856b7248fcdf22c7929b62 /sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
parent857b1954051b6d04387958ea005413c51417056e (diff)
parent1c7a0a3668dacafac41c178d0128fcc741c04ec5 (diff)
Merge "Merge remote-tracking branch 'origin/5.12' into dev" into refs/staging/dev
Diffstat (limited to 'sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
index f6724e61d..7498d3a18 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
@@ -1367,17 +1367,21 @@ static bool _compareAbstractMetaFunctions(const AbstractMetaFunction* func, cons
}
AbstractMetaFunctionList AbstractMetaBuilderPrivate::classFunctionList(const ScopeModelItem &scopeItem,
- bool *constructorRejected)
+ AbstractMetaClass::Attributes *constructorAttributes)
{
- *constructorRejected = false;
+ *constructorAttributes = 0;
AbstractMetaFunctionList result;
const FunctionList &scopeFunctionList = scopeItem->functions();
result.reserve(scopeFunctionList.size());
for (const FunctionModelItem &function : scopeFunctionList) {
- if (AbstractMetaFunction *metaFunction = traverseFunction(function))
+ if (AbstractMetaFunction *metaFunction = traverseFunction(function)) {
result.append(metaFunction);
- else if (function->functionType() == CodeModel::Constructor)
- *constructorRejected = true;
+ } else if (function->functionType() == CodeModel::Constructor) {
+ auto arguments = function->arguments();
+ *constructorAttributes |= AbstractMetaAttributes::HasRejectedConstructor;
+ if (arguments.isEmpty() || arguments.constFirst()->defaultValue())
+ *constructorAttributes |= AbstractMetaAttributes::HasRejectedDefaultConstructor;
+ }
}
return result;
}
@@ -1408,12 +1412,10 @@ private:
void AbstractMetaBuilderPrivate::traverseFunctions(ScopeModelItem scopeItem,
AbstractMetaClass *metaClass)
{
- bool constructorRejected = false;
+ AbstractMetaAttributes::Attributes constructorAttributes;
const AbstractMetaFunctionList functions =
- classFunctionList(scopeItem, &constructorRejected);
-
- if (constructorRejected)
- *metaClass += AbstractMetaAttributes::HasRejectedConstructor;
+ classFunctionList(scopeItem, &constructorAttributes);
+ metaClass->setAttributes(metaClass->attributes() | constructorAttributes);
for (AbstractMetaFunction *metaFunction : functions){
metaFunction->setOriginalAttributes(metaFunction->attributes());