debugger: structural cleanup remote debugging

Use virtual function instead of if/qobject_cast cascades.
This commit is contained in:
hjk
2010-12-10 12:41:44 +01:00
parent 91e6c14ff9
commit 77e3bfe845
15 changed files with 74 additions and 114 deletions

View File

@@ -35,12 +35,7 @@
#include "debuggermainwindow.h"
#include "debuggerplugin.h"
#include "debuggerstringutils.h"
#include "gdb/gdbengine.h"
#include "gdb/remotegdbserveradapter.h"
#include "gdb/remoteplaingdbadapter.h"
#include "gdb/gdboptionspage.h"
#include "qml/qmlengine.h"
#include "qml/qmlcppengine.h"
#include "lldb/lldbenginehost.h"
#ifdef Q_OS_WIN
@@ -269,10 +264,6 @@ public:
DebuggerEngineType engineForMode(unsigned enabledEngineTypes,
DebuggerStartMode mode);
void initGdbEngine(GdbEngine *engine);
GdbEngine *gdbEngine() const;
AbstractGdbAdapter *gdbAdapter() const;
public:
DebuggerRunControl *q;
DebuggerEngine *m_engine;
@@ -383,38 +374,6 @@ DebuggerEngineType DebuggerRunControlPrivate::engineForMode
#endif
}
void DebuggerRunControlPrivate::initGdbEngine(GdbEngine *engine)
{
QTC_ASSERT(engine, return)
// Forward adapter signals.
AbstractGdbAdapter *adapter = engine->gdbAdapter();
RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter);
RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter);
if (rpga)
q->connect(rpga, SIGNAL(requestSetup()), SIGNAL(engineRequestSetup()));
else if (rgsa)
q->connect(rgsa, SIGNAL(requestSetup()), SIGNAL(engineRequestSetup()));
}
GdbEngine *DebuggerRunControlPrivate::gdbEngine() const
{
QTC_ASSERT(m_engine, return 0);
if (GdbEngine *gdbEngine = qobject_cast<GdbEngine *>(m_engine))
return gdbEngine;
if (QmlCppEngine *qmlEngine = qobject_cast<QmlCppEngine *>(m_engine))
if (GdbEngine *embeddedGdbEngine = qobject_cast<GdbEngine *>(qmlEngine->cppEngine()))
return embeddedGdbEngine;
return 0;
}
AbstractGdbAdapter *DebuggerRunControlPrivate::gdbAdapter() const
{
GdbEngine *engine = gdbEngine();
QTC_ASSERT(engine, return 0)
return engine->gdbAdapter();
}
} // namespace Internal
@@ -514,7 +473,6 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration,
switch (engineType) {
case GdbEngineType:
d->m_engine = createGdbEngine(sp);
d->initGdbEngine(qobject_cast<GdbEngine *>(d->m_engine));
break;
case ScriptEngineType:
d->m_engine = createScriptEngine(sp);
@@ -534,14 +492,9 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration,
break;
case QmlEngineType:
d->m_engine = createQmlEngine(sp);
connect(qobject_cast<QmlEngine *>(d->m_engine),
SIGNAL(remoteStartupRequested()),
SIGNAL(engineRequestSetup()));
break;
case QmlCppEngineType:
d->m_engine = createQmlCppEngine(sp);
if (GdbEngine *embeddedGdbEngine = d->gdbEngine())
d->initGdbEngine(embeddedGdbEngine);
break;
case LldbEngineType:
d->m_engine = createLldbEngine(sp);
@@ -742,56 +695,6 @@ DebuggerEngine *DebuggerRunControl::engine()
return d->m_engine;
}
void DebuggerRunControl::handleRemoteSetupDone(int gdbServerPort, int qmlPort)
{
// FIXME: Use virtual functions?
if (QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(d->m_engine)) {
qmlEngine->handleRemoteSetupDone(qmlPort);
return;
}
AbstractGdbAdapter *adapter = d->gdbAdapter();
QTC_ASSERT(adapter, return);
RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter);
if (rpga) {
rpga->handleSetupDone(qmlPort);
return;
}
RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter);
if (rgsa) {
rgsa->handleSetupDone(gdbServerPort, qmlPort);
return;
}
QTC_ASSERT(false, /**/);
}
void DebuggerRunControl::handleRemoteSetupFailed(const QString &message)
{
// FIXME: Use virtual functions?
if (QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(d->m_engine)) {
qmlEngine->handleRemoteSetupFailed(message);
return;
}
AbstractGdbAdapter *adapter = d->gdbAdapter();
QTC_ASSERT(adapter, return);
RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter);
if (rpga) {
rpga->handleSetupFailed(message);
return;
}
RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter);
if (rgsa) {
rgsa->handleSetupFailed(message);
return;
}
QTC_ASSERT(false, /**/);
}
RunConfiguration *DebuggerRunControl::runConfiguration() const
{
return d->m_myRunConfiguration.data();