aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-06-22 17:32:53 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-06-22 20:18:09 +0000
commit956a8c13a836eb4d3b469bf2c9d8cbb1619ddf12 (patch)
treebfd6fb92ec9c2b7345ad71666bad4cce1512426f /sources/shiboken2/ApiExtractor
parent94aa45c4031891aaf084d8efdaa35e09087abf56 (diff)
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 <alexandru.croitor@qt.io>
Diffstat (limited to 'sources/shiboken2/ApiExtractor')
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp13
-rw-r--r--sources/shiboken2/ApiExtractor/typesystem.cpp10
-rw-r--r--sources/shiboken2/ApiExtractor/typesystem.h4
3 files changed, 20 insertions, 7 deletions
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<QString> 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;