From 7356280cf712d335be551b7b41087718f1908a6e Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Fri, 10 Jul 2009 17:07:42 +0200 Subject: [PATCH] Remove unused class. --- .../debugger/cdb/cdbstackframecontext.cpp | 354 ------------------ 1 file changed, 354 deletions(-) delete mode 100644 src/plugins/debugger/cdb/cdbstackframecontext.cpp diff --git a/src/plugins/debugger/cdb/cdbstackframecontext.cpp b/src/plugins/debugger/cdb/cdbstackframecontext.cpp deleted file mode 100644 index f68beb0db3c..00000000000 --- a/src/plugins/debugger/cdb/cdbstackframecontext.cpp +++ /dev/null @@ -1,354 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** Commercial Usage -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** -**************************************************************************/ - -#include "cdbstackframecontext.h" -#include "cdbdebugengine_p.h" -#include "cdbsymbolgroupcontext.h" -#include "cdbdumperhelper.h" -#include "debuggeractions.h" -#include "watchhandler.h" - -#include <QtCore/QDebug> -#include <QtCore/QCoreApplication> - -namespace Debugger { -namespace Internal { - -enum { OwnerNewItem, OwnerSymbolGroup, OwnerDumper }; - -typedef QSharedPointer<CdbDumperHelper> SharedPointerCdbDumperHelper; -typedef QList<WatchData> WatchDataList; - -// Predicates for parametrizing the symbol group -inline bool truePredicate(const WatchData & /* whatever */) { return true; } -inline bool falsePredicate(const WatchData & /* whatever */) { return false; } -inline bool isDumperPredicate(const WatchData &wd) -{ return wd.source == OwnerDumper; } - -// Match an item that is expanded in the watchhandler. -class WatchHandlerExpandedPredicate { -public: - explicit inline WatchHandlerExpandedPredicate(const WatchHandler *wh) : m_wh(wh) {} - inline bool operator()(const WatchData &wd) { return m_wh->isExpandedIName(wd.iname); } -private: - const WatchHandler *m_wh; -}; - -// Match an item by iname -class MatchINamePredicate { -public: - explicit inline MatchINamePredicate(const QString &iname) : m_iname(iname) {} - inline bool operator()(const WatchData &wd) { return wd.iname == m_iname; } -private: - const QString &m_iname; -}; - -// Put a sequence of WatchData into the model for the non-dumper case -class WatchHandlerModelInserter { -public: - explicit WatchHandlerModelInserter(WatchHandler *wh) : m_wh(wh) {} - - inline WatchHandlerModelInserter & operator*() { return *this; } - inline WatchHandlerModelInserter &operator=(const WatchData &wd) { - m_wh->insertData(wd); - return *this; - } - inline WatchHandlerModelInserter &operator++() { return *this; } - -private: - WatchHandler *m_wh; -}; - -// Put a sequence of WatchData into the model for the dumper case. -// Sorts apart a sequence of WatchData using the Dumpers. -// Puts the stuff for which there is no dumper in the model -// as is and sets ownership to symbol group. The rest goes -// to the dumpers. Additionally, checks for items pointing to a -// dumpeable type and inserts a fake dereferenced item and value. -class WatchHandleDumperInserter { -public: - explicit WatchHandleDumperInserter(WatchHandler *wh, - const SharedPointerCdbDumperHelper &dumper); - - inline WatchHandleDumperInserter & operator*() { return *this; } - inline WatchHandleDumperInserter &operator=(WatchData &wd); - inline WatchHandleDumperInserter &operator++() { return *this; } - -private: - bool expandPointerToDumpable(const WatchData &wd, QString *errorMessage); - - const QRegExp m_hexNullPattern; - WatchHandler *m_wh; - const SharedPointerCdbDumperHelper m_dumper; - QList<WatchData> m_dumperResult; -}; - -WatchHandleDumperInserter::WatchHandleDumperInserter(WatchHandler *wh, - const SharedPointerCdbDumperHelper &dumper) : - m_hexNullPattern(QLatin1String("0x0+")), - m_wh(wh), - m_dumper(dumper) -{ - Q_ASSERT(m_hexNullPattern.isValid()); -} - -// Is this a non-null pointer to a dumpeable item with a value -// "0x4343 class QString *" ? - Insert a fake '*' dereferenced item -// and run dumpers on it. If that succeeds, insert the fake items owned by dumpers, -// which will trigger the ignore predicate. -// Note that the symbol context does not create '*' dereferenced items for -// classes (see note in its header documentation). -bool WatchHandleDumperInserter::expandPointerToDumpable(const WatchData &wd, QString *errorMessage) -{ - if (debugCDBWatchHandling) - qDebug() << ">expandPointerToDumpable" << wd.iname; - - bool handled = false; - do { - if (!isPointerType(wd.type)) - break; - const int classPos = wd.value.indexOf(" class "); - if (classPos == -1) - break; - const QString hexAddrS = wd.value.mid(0, classPos); - if (m_hexNullPattern.exactMatch(hexAddrS)) - break; - const QString type = stripPointerType(wd.value.mid(classPos + 7)); - WatchData derefedWd; - derefedWd.setType(type); - derefedWd.setAddress(hexAddrS); - derefedWd.name = QString(QLatin1Char('*')); - derefedWd.iname = wd.iname + QLatin1String(".*"); - derefedWd.source = OwnerDumper; - const CdbDumperHelper::DumpResult dr = m_dumper->dumpType(derefedWd, true, OwnerDumper, &m_dumperResult, errorMessage); - if (dr != CdbDumperHelper::DumpOk) - break; - // Insert the pointer item with 1 additional child + its dumper results - // Note: formal arguments might already be expanded in the symbol group. - WatchData ptrWd = wd; - ptrWd.source = OwnerDumper; - ptrWd.setHasChildren(true); - ptrWd.setChildrenUnneeded(); - m_wh->insertData(ptrWd); - foreach(const WatchData &dwd, m_dumperResult) - m_wh->insertData(dwd); - handled = true; - } while (false); - if (debugCDBWatchHandling) - qDebug() << "<expandPointerToDumpable returns " << handled << *errorMessage; - return handled; -} - -// When querying an item, the queried item is sometimes returned in incomplete form. -// Take over values from source. -static inline void fixDumperResult(const WatchData &source, - QList<WatchData> *result, - bool suppressGrandChildren) -{ - const int size = result->size(); - if (!size) - return; - WatchData &returned = result->front(); - if (returned.iname != source.iname) - return; - if (returned.type.isEmpty()) - returned.setType(source.type); - if (returned.isValueNeeded()) { - if (source.isValueKnown()) { - returned.setValue(source.value); - } else { - // Should not happen - returned.setValue(QCoreApplication::translate("CdbStackFrameContext", "<Unknown>")); - } - } - if (size == 1) - return; - // Fix the children: If the address is missing, we cannot query any further. - const QList<WatchData>::iterator wend = result->end(); - QList<WatchData>::iterator it = result->begin(); - for (++it; it != wend; ++it) { - WatchData &wd = *it; - if (wd.addr.isEmpty() && wd.isSomethingNeeded()) { - wd.setAllUnneeded(); - } else { - // Hack: Suppress endless recursion of the model. To be fixed, - // the model should not query non-visible items. - if (suppressGrandChildren && (wd.isChildrenNeeded() || wd.isHasChildrenNeeded())) - wd.setHasChildren(false); - } - } -} - -WatchHandleDumperInserter &WatchHandleDumperInserter::operator=(WatchData &wd) -{ - if (debugCDBWatchHandling) - qDebug() << "WatchHandleDumperInserter::operator=" << wd.toString(); - // Check pointer to dumpeable, dumpeable, insert accordingly. - QString errorMessage; - if (expandPointerToDumpable(wd, &errorMessage)) { - // Nasty side effect: Modify owner for the ignore predicate - wd.source = OwnerDumper; - return *this; - } - switch (m_dumper->dumpType(wd, true, OwnerDumper, &m_dumperResult, &errorMessage)) { - case CdbDumperHelper::DumpOk: - if (debugCDBWatchHandling) - qDebug() << "dumper triggered"; - // Dumpers omit types for complicated templates - fixDumperResult(wd, &m_dumperResult, false); - // Discard the original item and insert the dumper results - foreach(const WatchData &dwd, m_dumperResult) - m_wh->insertData(dwd); - // Nasty side effect: Modify owner for the ignore predicate - wd.source = OwnerDumper; - break; - case CdbDumperHelper::DumpNotHandled: - case CdbDumperHelper::DumpError: - wd.source = OwnerSymbolGroup; - m_wh->insertData(wd); - break; - } - return *this; -} - -// -----------CdbStackFrameContext -CdbStackFrameContext::CdbStackFrameContext(const QSharedPointer<CdbDumperHelper> &dumper, - CdbSymbolGroupContext *symbolContext) : - m_useDumpers(dumper->isEnabled() && theDebuggerBoolSetting(UseDebuggingHelpers)), - m_dumper(dumper), - m_symbolContext(symbolContext) -{ -} - -bool CdbStackFrameContext::assignValue(const QString &iname, const QString &value, - QString *newValue /* = 0 */, QString *errorMessage) -{ - return m_symbolContext->assignValue(iname, value, newValue, errorMessage); -} - -bool CdbStackFrameContext::populateModelInitially(WatchHandler *wh, QString *errorMessage) -{ - if (debugCDBWatchHandling) - qDebug() << "populateModelInitially dumpers=" << m_useDumpers; - // Recurse down items that are initially expanded in the view, stop processing for - // dumper items. - const bool rc = m_useDumpers ? - CdbSymbolGroupContext::populateModelInitially(m_symbolContext, - WatchHandleDumperInserter(wh, m_dumper), - WatchHandlerExpandedPredicate(wh), - isDumperPredicate, - errorMessage) : - CdbSymbolGroupContext::populateModelInitially(m_symbolContext, - WatchHandlerModelInserter(wh), - WatchHandlerExpandedPredicate(wh), - falsePredicate, - errorMessage); - return rc; -} - -bool CdbStackFrameContext::completeData(const WatchData &incompleteLocal, - WatchHandler *wh, - QString *errorMessage) -{ - if (debugCDBWatchHandling) - qDebug() << ">completeData src=" << incompleteLocal.source << incompleteLocal.toString(); - - // Expand symbol group items, recurse one level from desired item - if (!m_useDumpers) { - return CdbSymbolGroupContext::completeData(m_symbolContext, incompleteLocal, - WatchHandlerModelInserter(wh), - MatchINamePredicate(incompleteLocal.iname), - falsePredicate, - errorMessage); - } - - // Expand artifical dumper items - if (incompleteLocal.source == OwnerDumper) { - QList<WatchData> dumperResult; - const CdbDumperHelper::DumpResult dr = m_dumper->dumpType(incompleteLocal, true, OwnerDumper, &dumperResult, errorMessage); - if (dr == CdbDumperHelper::DumpOk) { - // Hack to stop endless model recursion - const bool suppressGrandChildren = !wh->isExpandedIName(incompleteLocal.iname); - fixDumperResult(incompleteLocal, &dumperResult, suppressGrandChildren); - foreach(const WatchData &dwd, dumperResult) - wh->insertData(dwd); - } else { - const QString msg = QString::fromLatin1("Unable to further expand dumper watch data: '%1' (%2): %3/%4").arg(incompleteLocal.name, incompleteLocal.type).arg(int(dr)).arg(*errorMessage); - qWarning("%s", qPrintable(msg)); - WatchData wd = incompleteLocal; - if (wd.isValueNeeded()) - wd.setValue(QCoreApplication::translate("CdbStackFrameContext", "<Unknown>")); - wd.setAllUnneeded(); - wh->insertData(wd); - } - return true; - } - - // Expand symbol group items, recurse one level from desired item - return CdbSymbolGroupContext::completeData(m_symbolContext, incompleteLocal, - WatchHandleDumperInserter(wh, m_dumper), - MatchINamePredicate(incompleteLocal.iname), - isDumperPredicate, - errorMessage); -} - -CdbStackFrameContext::~CdbStackFrameContext() -{ - delete m_symbolContext; -} - -bool CdbStackFrameContext::editorToolTip(const QString &iname, - QString *value, - QString *errorMessage) -{ - value->clear(); - unsigned long index; - if (!m_symbolContext->lookupPrefix(iname, &index)) { - *errorMessage = QString::fromLatin1("%1 not found.").arg(iname); - return false; - } - const WatchData wd = m_symbolContext->symbolAt(index); - // Check dumpers. Should actually be just one item. - if (m_useDumpers && m_dumper->state() != CdbDumperHelper::Disabled) { - QList<WatchData> result; - if (CdbDumperHelper::DumpOk == m_dumper->dumpType(wd, false, OwnerDumper, &result, errorMessage)) { - foreach (const WatchData &dwd, result) { - if (!value->isEmpty()) - value->append(QLatin1Char('\n')); - value->append(dwd.toToolTip()); - } - return true; - } // Dumped ok - } // has Dumpers - *value = wd.toToolTip(); - return true; -} - -} // namespace Internal -} // namespace Debugger -- GitLab