From 956a8c13a836eb4d3b469bf2c9d8cbb1619ddf12 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 22 Jun 2018 17:32:53 +0200 Subject: shiboken: Improve error message about missing function for modification The signature is passed through TypeDatabase::normalizedSignature() which calls QMetaObject::normalizedSignature(). Keep the original signature and output it in the error message. Change-Id: Ibd1ddd0dee17d828710caf4bf6d674c35776b4c2 Reviewed-by: Alexandru Croitor --- sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp | 13 ++++++++++--- sources/shiboken2/ApiExtractor/typesystem.cpp | 10 ++++++---- sources/shiboken2/ApiExtractor/typesystem.h | 4 ++++ 3 files changed, 20 insertions(+), 7 deletions(-) (limited to 'sources/shiboken2/ApiExtractor') diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp index fa9f78ca0..0e96b4c34 100644 --- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp @@ -163,13 +163,18 @@ QSet AbstractMetaBuilder::qtMetaTypeDeclaredTypeNames() const return d->m_qmetatypeDeclaredTypenames; } -static QString msgNoFunctionForModification(const QString &signature, const QString &className, +static QString msgNoFunctionForModification(const QString &signature, + const QString &originalSignature, + const QString &className, const QStringList &possibleSignatures, const AbstractMetaFunctionList &allFunctions) { QString result; QTextStream str(&result); - str << "signature '" << signature << "' for function modification in '" + str << "signature '" << signature << '\''; + if (!originalSignature.isEmpty() && originalSignature != signature) + str << " (specified as '" << originalSignature << "')"; + str << " for function modification in '" << className << "' not found."; if (possibleSignatures.isEmpty()) { str << " No candidates were found. Member functions: "; @@ -231,7 +236,9 @@ void AbstractMetaBuilderPrivate::checkFunctionModifications() if (!found) { qCWarning(lcShiboken).noquote().nospace() - << msgNoFunctionForModification(signature, clazz->qualifiedCppName(), + << msgNoFunctionForModification(signature, + modification.originalSignature(), + clazz->qualifiedCppName(), possibleSignatures, functions); } } diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp index 52f05ce5b..baaec6d30 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.cpp +++ b/sources/shiboken2/ApiExtractor/typesystem.cpp @@ -1717,9 +1717,9 @@ bool Handler::startElement(const QStringRef &n, const QXmlStreamAttributes &atts ", was=%1").arg(topElement.type, 0, 16); return false; } - QString signature = attributes[QLatin1String("signature")]; + const QString originalSignature = attributes[QLatin1String("signature")]; - signature = TypeDatabase::normalizedSignature(signature); + QString signature = TypeDatabase::normalizedSignature(originalSignature); if (signature.isEmpty()) { m_error = QLatin1String("No signature for the added function"); return false; @@ -1754,6 +1754,7 @@ bool Handler::startElement(const QStringRef &n, const QXmlStreamAttributes &atts FunctionModification mod; if (!mod.setSignature(m_currentSignature, &m_error)) return false; + mod.setOriginalSignature(originalSignature); m_contextStack.top()->functionMods << mod; } break; @@ -1763,9 +1764,9 @@ bool Handler::startElement(const QStringRef &n, const QXmlStreamAttributes &atts ", was=%1").arg(topElement.type, 0, 16); return false; } - QString signature = attributes[QLatin1String("signature")]; + const QString originalSignature = attributes[QLatin1String("signature")]; - signature = TypeDatabase::normalizedSignature(signature); + const QString signature = TypeDatabase::normalizedSignature(originalSignature); if (signature.isEmpty()) { m_error = QLatin1String("No signature for modified function"); return false; @@ -1780,6 +1781,7 @@ bool Handler::startElement(const QStringRef &n, const QXmlStreamAttributes &atts FunctionModification mod; if (!mod.setSignature(signature, &m_error)) return false; + mod.setOriginalSignature(originalSignature); m_currentSignature = signature; QString access = attributes[QLatin1String("access")].toLower(); diff --git a/sources/shiboken2/ApiExtractor/typesystem.h b/sources/shiboken2/ApiExtractor/typesystem.h index 79e60cd75..186c4b24d 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.h +++ b/sources/shiboken2/ApiExtractor/typesystem.h @@ -356,6 +356,9 @@ struct FunctionModification: public Modification bool setSignature(const QString &s, QString *errorMessage = nullptr); QString signature() const { return m_signature.isEmpty() ? m_signaturePattern.pattern() : m_signature; } + void setOriginalSignature(const QString &s) { m_originalSignature = s; } + QString originalSignature() const { return m_originalSignature; } + QString toString() const; QString association; @@ -365,6 +368,7 @@ struct FunctionModification: public Modification private: QString m_signature; + QString m_originalSignature; QRegularExpression m_signaturePattern; bool m_thread = false; bool m_allowThread = false; -- cgit v1.2.3