diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-10-13 14:05:04 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-10-27 09:04:18 +0000 |
commit | 5b87b64f6a6a2404d01f24b2c5a2189e406bddf8 (patch) | |
tree | 37a06a6df8276884b860dbc63d233b8b829c0283 /sources/shiboken2/generator | |
parent | 636b9a4bd5624d8ddb00da53b16add546e3944c4 (diff) |
shiboken2: Improve error messages about cyclic dependencies
Return a struct instead of a plain list from
Graph::topologicalSort() which contains the offending indexes and
output the elements in case of failure.
Task-number: PYSIDE-1202
Change-Id: Ib7f70c78be0e84272f31d802677c7fc333aa32f4
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/generator')
-rw-r--r-- | sources/shiboken2/generator/shiboken2/overloaddata.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sources/shiboken2/generator/shiboken2/overloaddata.cpp b/sources/shiboken2/generator/shiboken2/overloaddata.cpp index 50e82b1e6..dd0cb39eb 100644 --- a/sources/shiboken2/generator/shiboken2/overloaddata.cpp +++ b/sources/shiboken2/generator/shiboken2/overloaddata.cpp @@ -155,13 +155,16 @@ static QString getImplicitConversionTypeName(const AbstractMetaType &containerTy // overloaddata.cpp static QString msgCyclicDependency(const QString &funcName, const QString &graphName, + const AbstractMetaFunctionCList &cyclic, const OverloadData::MetaFunctionList &involvedConversions) { QString result; QTextStream str(&result); str << "Cyclic dependency found on overloaddata for \"" << funcName << "\" method! The graph boy saved the graph at \"" << QDir::toNativeSeparators(graphName) - << "\"."; + << "\". Cyclic functions:"; + for (auto c : cyclic) + str << ' ' << c->signature(); if (const int count = involvedConversions.size()) { str << " Implicit conversions (" << count << "): "; for (int i = 0; i < count; ++i) { @@ -431,7 +434,7 @@ void OverloadData::sortNextOverloads() // sort the overloads topologically based on the dependency graph. const auto unmappedResult = graph.topologicalSort(); - if (unmappedResult.isEmpty()) { + if (!unmappedResult.isValid()) { QString funcName = referenceFunction()->name(); if (referenceFunction()->ownerClass()) funcName.prepend(referenceFunction()->ownerClass()->name() + QLatin1Char('.')); @@ -442,11 +445,14 @@ void OverloadData::sortNextOverloads() for (auto it = sortData.map.cbegin(), end = sortData.map.cend(); it != end; ++it) nodeNames.insert(it.value(), it.key()); graph.dumpDot(nodeNames, graphName); - qCWarning(lcShiboken).noquote() << qPrintable(msgCyclicDependency(funcName, graphName, involvedConversions)); + AbstractMetaFunctionCList cyclic; + for (int c : unmappedResult.cyclic) + cyclic.append(sortData.reverseMap.value(c)->referenceFunction()); + qCWarning(lcShiboken, "%s", qPrintable(msgCyclicDependency(funcName, graphName, cyclic, involvedConversions))); } m_nextOverloadData.clear(); - for (int i : unmappedResult) { + for (int i : unmappedResult.result) { if (!sortData.reverseMap[i]) continue; m_nextOverloadData << sortData.reverseMap[i]; |