diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-01-26 09:49:25 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-01-26 17:43:37 +0100 |
commit | b7a8f3ff1f41ba0e863b7f9609e98b9486440651 (patch) | |
tree | 4f0a17a62fc95baddf36318a414f60b9a8cc26a0 | |
parent | 019ab0d2388e30def0cb982c14e011af119d2409 (diff) |
shiboken6: Improve error messages of added funcs
Pass the innner message out so that it appears in the qFatal()
message.
Change-Id: Ib38d54de58647037204d76bc7c78fcb3bf82fca5
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp | 53 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h | 9 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.cpp | 20 |
3 files changed, 48 insertions, 34 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp index 34eb89a6b..c01ef602a 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp @@ -606,12 +606,11 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom) sortLists(); // Functions added to the module on the type system. + QString errorMessage; const AddedFunctionList &globalUserFunctions = types->globalUserFunctions(); for (const AddedFunctionPtr &addedFunc : globalUserFunctions) { - if (!traverseAddedGlobalFunction(addedFunc)) { - qFatal("Unable to traverse added global function \"%s\".", - qPrintable(addedFunc->name())); - } + if (!traverseAddedGlobalFunction(addedFunc, &errorMessage)) + qFatal("%s", qPrintable(errorMessage)); } m_itemToClass.clear(); @@ -1344,12 +1343,11 @@ void AbstractMetaBuilderPrivate::traverseFunctions(ScopeModelItem scopeItem, void AbstractMetaBuilderPrivate::fillAddedFunctions(AbstractMetaClass *metaClass) { // Add the functions added by the typesystem + QString errorMessage; const AddedFunctionList &addedFunctions = metaClass->typeEntry()->addedFunctions(); for (const AddedFunctionPtr &addedFunc : addedFunctions) { - if (!traverseAddedMemberFunction(addedFunc, metaClass)) { - qFatal("Unable to traverse function \"%s\" added to \"%s\".", - qPrintable(addedFunc->name()), qPrintable(metaClass->name())); - } + if (!traverseAddedMemberFunction(addedFunc, metaClass, &errorMessage)) + qFatal("%s", qPrintable(errorMessage)); } } @@ -1543,9 +1541,11 @@ static void applyDefaultExpressionModifications(const FunctionModificationList & static AbstractMetaFunction::FunctionType functionTypeFromName(const QString &); -bool AbstractMetaBuilderPrivate::traverseAddedGlobalFunction(const AddedFunctionPtr &addedFunc) +bool AbstractMetaBuilderPrivate::traverseAddedGlobalFunction(const AddedFunctionPtr &addedFunc, + QString *errorMessage) { - AbstractMetaFunction *metaFunction = traverseAddedFunctionHelper(addedFunc); + AbstractMetaFunction *metaFunction = + traverseAddedFunctionHelper(addedFunc, nullptr, errorMessage); if (metaFunction == nullptr) return false; m_globalFunctions << AbstractMetaFunctionCPtr(metaFunction); @@ -1554,17 +1554,15 @@ bool AbstractMetaBuilderPrivate::traverseAddedGlobalFunction(const AddedFunction AbstractMetaFunction * AbstractMetaBuilderPrivate::traverseAddedFunctionHelper(const AddedFunctionPtr &addedFunc, - AbstractMetaClass *metaClass) + AbstractMetaClass *metaClass /* = nullptr */, + QString *errorMessage) { - QString errorMessage; - - auto returnType = translateType(addedFunc->returnType(), metaClass, {}, &errorMessage); + auto returnType = translateType(addedFunc->returnType(), metaClass, {}, errorMessage); if (!returnType.has_value()) { - qCWarning(lcShiboken, "%s", - qPrintable(msgAddedFunctionInvalidReturnType(addedFunc->name(), - addedFunc->returnType().qualifiedName(), - errorMessage, - metaClass))); + *errorMessage = + msgAddedFunctionInvalidReturnType(addedFunc->name(), + addedFunc->returnType().qualifiedName(), + *errorMessage, metaClass); return nullptr; } @@ -1576,13 +1574,12 @@ AbstractMetaFunction * for (int i = 0; i < args.count(); ++i) { const AddedFunction::Argument &arg = args.at(i); - auto type = translateType(arg.typeInfo, metaClass, {}, &errorMessage); + auto type = translateType(arg.typeInfo, metaClass, {}, errorMessage); if (Q_UNLIKELY(!type.has_value())) { - qCWarning(lcShiboken, "%s", - qPrintable(msgAddedFunctionInvalidArgType(addedFunc->name(), - arg.typeInfo.qualifiedName(), i + 1, - errorMessage, - metaClass))); + *errorMessage = + msgAddedFunctionInvalidArgType(addedFunc->name(), + arg.typeInfo.qualifiedName(), i + 1, + *errorMessage, metaClass); delete metaFunction; return nullptr; } @@ -1638,9 +1635,11 @@ AbstractMetaFunction * } bool AbstractMetaBuilderPrivate::traverseAddedMemberFunction(const AddedFunctionPtr &addedFunc, - AbstractMetaClass *metaClass) + AbstractMetaClass *metaClass, + QString *errorMessage) { - AbstractMetaFunction *metaFunction = traverseAddedFunctionHelper(addedFunc, metaClass); + AbstractMetaFunction *metaFunction = + traverseAddedFunctionHelper(addedFunc, metaClass, errorMessage); if (metaFunction == nullptr) return false; diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h b/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h index 975e294b4..8191bc161 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h +++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h @@ -110,10 +110,13 @@ public: void traverseOperatorFunction(const FunctionModelItem &item, AbstractMetaClass *currentClass); AbstractMetaFunction *traverseAddedFunctionHelper(const AddedFunctionPtr &addedFunc, - AbstractMetaClass *metaClass = nullptr); - bool traverseAddedGlobalFunction(const AddedFunctionPtr &addedFunc); + AbstractMetaClass *metaClass, + QString *errorMessage); + bool traverseAddedGlobalFunction(const AddedFunctionPtr &addedFunc, + QString *errorMessage); bool traverseAddedMemberFunction(const AddedFunctionPtr &addedFunc, - AbstractMetaClass *metaClass); + AbstractMetaClass *metaClass, + QString *errorMessage); AbstractMetaFunction *traverseFunction(const FunctionModelItem &function, const AbstractMetaClass *currentClass); std::optional<AbstractMetaField> traverseField(const VariableModelItem &field, diff --git a/sources/shiboken6/ApiExtractor/messages.cpp b/sources/shiboken6/ApiExtractor/messages.cpp index c929eb5be..0386eccb8 100644 --- a/sources/shiboken6/ApiExtractor/messages.cpp +++ b/sources/shiboken6/ApiExtractor/messages.cpp @@ -114,6 +114,20 @@ static void msgFormatEnumType(Stream &str, str << " (class: " << className << ')'; } +static void formatAddedFuncError(const QString &addedFuncName, + const AbstractMetaClass *context, + QTextStream &str) +{ + if (context) { + str << context->typeEntry()->sourceLocation() + << "Unable to traverse function \"" << addedFuncName + << "\" added to \"" << context->name() << "\": "; + } else { + str << "Unable to traverse added global function \"" + << addedFuncName << "\": "; + } +} + QString msgAddedFunctionInvalidArgType(const QString &addedFuncName, const QStringList &typeName, int pos, const QString &why, @@ -121,8 +135,7 @@ QString msgAddedFunctionInvalidArgType(const QString &addedFuncName, { QString result; QTextStream str(&result); - if (context) - str << context->typeEntry()->sourceLocation(); + formatAddedFuncError(addedFuncName, context, str); str << "Unable to translate type \"" << typeName.join(colonColon()) << "\" of argument " << pos << " of added function \"" << addedFuncName << "\": " << why; @@ -135,8 +148,7 @@ QString msgAddedFunctionInvalidReturnType(const QString &addedFuncName, { QString result; QTextStream str(&result); - if (context) - str << context->typeEntry()->sourceLocation(); + formatAddedFuncError(addedFuncName, context, str); str << "Unable to translate return type \"" << typeName.join(colonColon()) << "\" of added function \"" << addedFuncName << "\": " << why; |