diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-01-30 16:10:58 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2019-01-30 16:51:04 +0000 |
commit | c0a4d44b22ce813850d6aced10302efcef2e9acd (patch) | |
tree | 46787ebdf43876d2b8856b7248fcdf22c7929b62 /sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp | |
parent | 857b1954051b6d04387958ea005413c51417056e (diff) | |
parent | 1c7a0a3668dacafac41c178d0128fcc741c04ec5 (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.cpp | 22 |
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()); |