aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-05-15 10:44:48 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-05-16 12:49:45 +0000
commit4bfd9380daf6750b04874dfd09fd0ac8f87bd0b7 (patch)
treed5e9387ea51a856c4f2379dc31989147debf4fcd
parent81a04c6bea284c1102c3e28dc843639363dbd772 (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.cpp40
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);