diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-05-15 10:44:48 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-05-16 12:49:45 +0000 |
commit | 4bfd9380daf6750b04874dfd09fd0ac8f87bd0b7 (patch) | |
tree | d5e9387ea51a856c4f2379dc31989147debf4fcd | |
parent | 81a04c6bea284c1102c3e28dc843639363dbd772 (diff) |
shiboken: Improve error messages for rejected functions
Add a warning explaining that a rejected abstract function
will cause compilation errors later on.
Change-Id: Ibcad7d79df719b0ffbaf59a0ef9eec6f22aea2ed
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r-- | sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp index 8e1732be9..23feeafad 100644 --- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp @@ -1878,6 +1878,12 @@ static inline QString msgUnmatchedParameterType(const ArgumentModelItem &arg, in return result; } +static inline QString msgUnmatchedReturnType(const FunctionModelItem &functionItem) +{ + return QLatin1String("unmatched return type '") + + functionItem->type().toString() + QLatin1Char('\''); +} + static inline QString msgVoidParameterType(const ArgumentModelItem &arg, int n) { QString result; @@ -1888,6 +1894,22 @@ static inline QString msgVoidParameterType(const ArgumentModelItem &arg, int n) return result; } +static QString msgSkippingFunction(const FunctionModelItem &functionItem, + const QString &signature, const QString &why) +{ + QString result; + QTextStream str(&result); + str << "skipping "; + if (functionItem->isAbstract()) + str << "abstract "; + str << "function '" << signature << "', " << why; + if (functionItem->isAbstract()) { + str << "\nThis will lead to compilation errors due to not " + "being able to instantiate the wrapper."; + } + return result; +} + static inline AbstractMetaFunction::FunctionType functionTypeFromCodeModel(CodeModel::FunctionType ft) { AbstractMetaFunction::FunctionType result = AbstractMetaFunction::NormalFunction; @@ -2048,13 +2070,11 @@ AbstractMetaFunction *AbstractMetaBuilderPrivate::traverseFunction(FunctionModel bool ok; AbstractMetaType *type = translateType(returnType, &ok); - if (!ok) { Q_ASSERT(type == 0); - qCWarning(lcShiboken).noquote().nospace() - << QStringLiteral("skipping function '%1', unmatched return type '%2'") - .arg(originalQualifiedSignatureWithReturn, - functionItem->type().toString()); + const QString reason = msgUnmatchedReturnType(functionItem); + qCWarning(lcShiboken, "%s", + qPrintable(msgSkippingFunction(functionItem, originalQualifiedSignatureWithReturn, reason))); m_rejectedFunctions.insert(originalQualifiedSignatureWithReturn, AbstractMetaBuilder::UnmatchedReturnType); delete metaFunction; return nullptr; @@ -2104,9 +2124,8 @@ AbstractMetaFunction *AbstractMetaBuilderPrivate::traverseFunction(FunctionModel } Q_ASSERT(metaType == 0); const QString reason = msgUnmatchedParameterType(arg, i); - qCWarning(lcShiboken).noquote().nospace() - << QStringLiteral("skipping function '%1', %2") - .arg(originalQualifiedSignatureWithReturn, reason); + qCWarning(lcShiboken, "%s", + qPrintable(msgSkippingFunction(functionItem, originalQualifiedSignatureWithReturn, reason))); const QString rejectedFunctionSignature = originalQualifiedSignatureWithReturn + QLatin1String(": ") + reason; m_rejectedFunctions.insert(rejectedFunctionSignature, AbstractMetaBuilder::UnmatchedArgumentType); @@ -2116,9 +2135,8 @@ AbstractMetaFunction *AbstractMetaBuilderPrivate::traverseFunction(FunctionModel if (metaType == Q_NULLPTR) { const QString reason = msgVoidParameterType(arg, i); - qCWarning(lcShiboken).noquote().nospace() - << QString::fromLatin1("skipping function '%1': %2") - .arg(originalQualifiedSignatureWithReturn, reason); + qCWarning(lcShiboken, "%s", + qPrintable(msgSkippingFunction(functionItem, originalQualifiedSignatureWithReturn, reason))); const QString rejectedFunctionSignature = originalQualifiedSignatureWithReturn + QLatin1String(": ") + reason; m_rejectedFunctions.insert(rejectedFunctionSignature, AbstractMetaBuilder::UnmatchedArgumentType); |