aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-01-26 09:49:25 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-01-26 17:43:37 +0100
commitb7a8f3ff1f41ba0e863b7f9609e98b9486440651 (patch)
tree4f0a17a62fc95baddf36318a414f60b9a8cc26a0
parent019ab0d2388e30def0cb982c14e011af119d2409 (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.cpp53
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h9
-rw-r--r--sources/shiboken6/ApiExtractor/messages.cpp20
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;