From 2fc6b24a8a5b11d4ea9895cd5e5f7a17f070f295 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 11 Sep 2012 11:37:19 +0200 Subject: [PATCH] CDB: Fix dumping of objectNames() in Qt 5. Qt 5 has an additional extraData. Change-Id: Ieac0a1855ed93b4ef2c0900e37097d89de440895 Reviewed-by: hjk --- src/libs/qtcreatorcdbext/symbolgroupvalue.cpp | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index 154f88334e9..25a4664111a 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp @@ -2122,21 +2122,32 @@ SymbolGroupValue qobjectDerivedPrivate(const SymbolGroupValue &v, return SymbolGroupValue(qwPrivateNode, v.context()); } +static bool dumpQObjectName(const SymbolGroupValue &qoPrivate, std::wostream &str) +{ + // Qt 4: plain member. + if (QtInfo::get(qoPrivate.context()).version < 5) { + if (const SymbolGroupValue oName = qoPrivate["objectName"]) + return dumpQString(oName, str); + } + // Qt 5: member of allocated extraData. + if (const SymbolGroupValue extraData = qoPrivate["extraData"]) + if (extraData.pointerValue()) + if (const SymbolGroupValue oName = extraData["objectName"]) + return dumpQString(oName, str); + return false; +} + // Dump the object name static inline bool dumpQWidget(const SymbolGroupValue &v, std::wostream &str, void **specialInfoIn = 0) { const QtInfo &qtInfo = QtInfo::get(v.context()); const SymbolGroupValue qwPrivate = qobjectDerivedPrivate(v, qtInfo.qWidgetPrivateType, qtInfo); - if (!qwPrivate) - return false; // QWidgetPrivate inherits QObjectPrivate - const SymbolGroupValue oName = qwPrivate[unsigned(0)]["objectName"]; - if (!oName) + if (!qwPrivate || !dumpQObjectName(qwPrivate[unsigned(0)], str)) return false; if (specialInfoIn) *specialInfoIn = qwPrivate.node(); - dumpQString(oName, str); return true; } @@ -2144,15 +2155,12 @@ static inline bool dumpQWidget(const SymbolGroupValue &v, std::wostream &str, vo static inline bool dumpQObject(const SymbolGroupValue &v, std::wostream &str, void **specialInfoIn = 0) { const std::string &qoPrivateType = QtInfo::get(v.context()).qObjectPrivateType; - if (SymbolGroupValue qoPrivate = v["d_ptr"]["d"].pointerTypeCast(qoPrivateType.c_str())) { - if (SymbolGroupValue oName = qoPrivate["objectName"]) { - if (specialInfoIn) - *specialInfoIn = qoPrivate.node(); - dumpQString(oName, str); - return true; - } - } - return false; + const SymbolGroupValue qoPrivate = v["d_ptr"]["d"].pointerTypeCast(qoPrivateType.c_str()); + if (!qoPrivate || !dumpQObjectName(qoPrivate, str)) + return false; + if (specialInfoIn) + *specialInfoIn = qoPrivate.node(); + return true; } // Dump the object name @@ -2161,15 +2169,11 @@ static inline bool dumpQWindow(const SymbolGroupValue &v, std::wostream &str, vo const QtInfo &qtInfo = QtInfo::get(v.context()); const SymbolGroupValue qwPrivate = qobjectDerivedPrivate(v, qtInfo.qWindowPrivateType, qtInfo); - if (!qwPrivate) - return false; // QWindowPrivate inherits QObjectPrivate - const SymbolGroupValue oName = qwPrivate[unsigned(0)]["objectName"]; // QWidgetPrivate inherits QObjectPrivate - if (!oName) + if (!qwPrivate || !dumpQObjectName(qwPrivate[unsigned(0)], str)) return false; if (specialInfoIn) *specialInfoIn = qwPrivate.node(); - dumpQString(oName, str); return true; }