Commit 0e7e521a authored by hjk's avatar hjk

Debugger: Merge {baseqml,qml}debuggerclient.

Abstraction is not used after the demise of QScriptDebuggerClient
and unlikely to be used again.

Change-Id: Icdd6615eb0d1468fd9a3d717d6a7d5e44f7f7d79
Reviewed-by: default avatarChristian Stenger <christian.stenger@theqtcompany.com>
parent 7e30a74d
......@@ -145,7 +145,6 @@ QtcPlugin {
name: "QML Debugger"
prefix: "qml/"
files: [
"baseqmldebuggerclient.cpp", "baseqmldebuggerclient.h",
"interactiveinterpreter.cpp", "interactiveinterpreter.h",
"qmladapter.cpp", "qmladapter.h",
"qmlcppengine.cpp", "qmlcppengine.h",
......
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms and
** conditions see http://www.qt.io/terms-conditions. For further information
** use the contact form at http://www.qt.io/contact-us.
**
** 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 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
#include "baseqmldebuggerclient.h"
#include <debugger/breakhandler.h>
#include <utils/qtcassert.h>
namespace Debugger {
namespace Internal {
class BaseQmlDebuggerClientPrivate
{
public:
QList<QByteArray> sendBuffer;
};
BaseQmlDebuggerClient::BaseQmlDebuggerClient(QmlDebug::QmlDebugConnection* client, QLatin1String clientName)
: QmlDebugClient(clientName, client),
d(new BaseQmlDebuggerClientPrivate())
{
}
BaseQmlDebuggerClient::~BaseQmlDebuggerClient()
{
delete d;
}
bool BaseQmlDebuggerClient::acceptsBreakpoint(Breakpoint /*bp*/)
{
return false;
}
void BaseQmlDebuggerClient::stateChanged(State state)
{
emit newState(state);
}
void BaseQmlDebuggerClient::sendMessage(const QByteArray &msg)
{
if (state() == Enabled)
QmlDebugClient::sendMessage(msg);
else
d->sendBuffer.append(msg);
}
void BaseQmlDebuggerClient::flushSendBuffer()
{
QTC_ASSERT(state() == Enabled, return);
foreach (const QByteArray &msg, d->sendBuffer)
QmlDebugClient::sendMessage(msg);
d->sendBuffer.clear();
}
} // Internal
} // Debugger
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms and
** conditions see http://www.qt.io/terms-conditions. For further information
** use the contact form at http://www.qt.io/contact-us.
**
** 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 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
#ifndef BASEQMLDEBUGGERCLIENT_H
#define BASEQMLDEBUGGERCLIENT_H
#include <debugger/debuggerengine.h>
#include <qmldebug/qmldebugclient.h>
namespace Debugger {
namespace Internal {
class WatchData;
class WatchItem;
class BreakHandler;
class BreakpointModelId;
class QmlEngine;
class BaseQmlDebuggerClientPrivate;
class BaseQmlDebuggerClient : public QmlDebug::QmlDebugClient
{
Q_OBJECT
public:
BaseQmlDebuggerClient(QmlDebug::QmlDebugConnection* client, QLatin1String clientName);
virtual ~BaseQmlDebuggerClient();
virtual void startSession() = 0;
virtual void endSession() = 0;
virtual void resetSession() = 0;
virtual void executeStep() = 0;
virtual void executeStepOut() = 0;
virtual void executeNext() = 0;
virtual void executeStepI() = 0;
virtual void executeRunToLine(const ContextData &data) = 0;
virtual void continueInferior() = 0;
virtual void interruptInferior() = 0;
virtual void activateFrame(int index) = 0;
virtual bool acceptsBreakpoint(Breakpoint bp);
virtual void insertBreakpoint(Breakpoint bp, int adjustedLine,
int adjustedColumn = -1) = 0;
virtual void removeBreakpoint(Breakpoint bp) = 0;
virtual void changeBreakpoint(Breakpoint bp) = 0;
virtual void synchronizeBreakpoints() = 0;
virtual void assignValueInDebugger(const WatchData *data,
const QString &expression,
const QVariant &valueV) = 0;
virtual void updateWatchData(const WatchData &data) = 0;
virtual void executeDebuggerCommand(const QString &command) = 0;
virtual void synchronizeWatchers(const QStringList &watchers) = 0;
virtual void expandObject(const QByteArray &iname, quint64 objectId) = 0;
virtual void setEngine(QmlEngine *engine) = 0;
virtual void getSourceFiles() {}
void flushSendBuffer();
signals:
void newState(QmlDebug::QmlDebugClient::State state);
void stackFrameCompleted();
protected:
virtual void stateChanged(State state);
void sendMessage(const QByteArray &msg);
private:
BaseQmlDebuggerClientPrivate *d;
friend class BaseQmlDebuggerClientPrivate;
};
} // Internal
} // Debugger
#endif // BASEQMLDEBUGGERCLIENT_H
HEADERS += \
$$PWD/qmlengine.h \
$$PWD/qmladapter.h \
$$PWD/baseqmldebuggerclient.h \
$$PWD/qmlcppengine.h \
$$PWD/qmlv8debuggerclient.h \
$$PWD/interactiveinterpreter.h \
......@@ -12,7 +11,6 @@ HEADERS += \
SOURCES += \
$$PWD/qmlengine.cpp \
$$PWD/qmladapter.cpp \
$$PWD/baseqmldebuggerclient.cpp \
$$PWD/qmlcppengine.cpp \
$$PWD/qmlv8debuggerclient.cpp \
$$PWD/interactiveinterpreter.cpp \
......
......@@ -133,7 +133,7 @@ void QmlAdapter::debugClientStateChanged(QmlDebugClient::State state)
QmlDebugClient *client = qobject_cast<QmlDebugClient*>(sender());
QTC_ASSERT(client, return);
m_qmlClient = qobject_cast<BaseQmlDebuggerClient *>(client);
m_qmlClient = qobject_cast<QmlV8DebuggerClient *>(client);
m_qmlClient->startSession();
}
......@@ -185,12 +185,12 @@ void QmlAdapter::showConnectionErrorMessage(const QString &message)
m_engine.data()->showMessage(_("QML Debugger: ") + message, LogError);
}
BaseQmlDebuggerClient *QmlAdapter::activeDebuggerClient() const
QmlV8DebuggerClient *QmlAdapter::activeDebuggerClient() const
{
return m_qmlClient;
}
QHash<QString, BaseQmlDebuggerClient*> QmlAdapter::debuggerClients() const
QHash<QString, QmlV8DebuggerClient*> QmlAdapter::debuggerClients() const
{
return m_debugClients;
}
......
......@@ -45,7 +45,7 @@ class QDebugMessageClient;
namespace Debugger {
namespace Internal {
class BaseQmlDebuggerClient;
class QmlV8DebuggerClient;
class DebuggerEngine;
class QmlAdapterPrivate;
......@@ -63,8 +63,8 @@ public:
QmlDebug::QmlDebugConnection *connection() const;
DebuggerEngine *debuggerEngine() const;
BaseQmlDebuggerClient *activeDebuggerClient() const;
QHash<QString, BaseQmlDebuggerClient*> debuggerClients() const;
QmlV8DebuggerClient *activeDebuggerClient() const;
QHash<QString, QmlV8DebuggerClient*> debuggerClients() const;
QmlDebug::QDebugMessageClient *messageClient() const;
......@@ -94,10 +94,10 @@ private:
private:
QPointer<DebuggerEngine> m_engine;
BaseQmlDebuggerClient *m_qmlClient;
QmlV8DebuggerClient *m_qmlClient;
QTimer m_connectionTimer;
QmlDebug::QmlDebugConnection *m_conn;
QHash<QString, BaseQmlDebuggerClient*> m_debugClients;
QHash<QString, QmlV8DebuggerClient*> m_debugClients;
QmlDebug::QDebugMessageClient *m_msgClient;
};
......
......@@ -29,8 +29,8 @@
****************************************************************************/
#include "qmlengine.h"
#include "baseqmldebuggerclient.h"
#include "qmlinspectoragent.h"
#include "qmlv8debuggerclient.h"
#include <debugger/debuggeractions.h>
#include <debugger/debuggercore.h>
......@@ -821,7 +821,7 @@ void QmlEngine::insertBreakpoint(Breakpoint bp)
if (m_adapter.activeDebuggerClient()) {
m_adapter.activeDebuggerClient()->insertBreakpoint(bp, line, column);
} else {
foreach (BaseQmlDebuggerClient *client, m_adapter.debuggerClients()) {
foreach (QmlV8DebuggerClient *client, m_adapter.debuggerClients()) {
client->insertBreakpoint(bp, line, column);
}
}
......@@ -849,7 +849,7 @@ void QmlEngine::removeBreakpoint(Breakpoint bp)
if (m_adapter.activeDebuggerClient()) {
m_adapter.activeDebuggerClient()->removeBreakpoint(bp);
} else {
foreach (BaseQmlDebuggerClient *client, m_adapter.debuggerClients()) {
foreach (QmlV8DebuggerClient *client, m_adapter.debuggerClients()) {
client->removeBreakpoint(bp);
}
}
......@@ -867,7 +867,7 @@ void QmlEngine::changeBreakpoint(Breakpoint bp)
if (m_adapter.activeDebuggerClient()) {
m_adapter.activeDebuggerClient()->changeBreakpoint(bp);
} else {
foreach (BaseQmlDebuggerClient *client, m_adapter.debuggerClients()) {
foreach (QmlV8DebuggerClient *client, m_adapter.debuggerClients()) {
client->changeBreakpoint(bp);
}
}
......@@ -922,7 +922,7 @@ void QmlEngine::attemptBreakpointSynchronization()
if (m_adapter.activeDebuggerClient()) {
m_adapter.activeDebuggerClient()->synchronizeBreakpoints();
} else {
foreach (BaseQmlDebuggerClient *client, m_adapter.debuggerClients()) {
foreach (QmlV8DebuggerClient *client, m_adapter.debuggerClients()) {
client->synchronizeBreakpoints();
}
}
......@@ -1035,7 +1035,7 @@ void QmlEngine::synchronizeWatchers()
if (m_adapter.activeDebuggerClient()) {
m_adapter.activeDebuggerClient()->synchronizeWatchers(watchedExpressions);
} else {
foreach (BaseQmlDebuggerClient *client, m_adapter.debuggerClients())
foreach (QmlV8DebuggerClient *client, m_adapter.debuggerClients())
client->synchronizeWatchers(watchedExpressions);
}
}
......
......@@ -138,6 +138,8 @@ public:
QHash<int, int> stackIndexLookup;
QmlV8DebuggerClient::StepAction previousStepAction;
QList<QByteArray> sendBuffer;
};
///////////////////////////////////////////////////////////////////////
......@@ -745,7 +747,7 @@ void QmlV8DebuggerClientPrivate::logReceiveMessage(const QString &msg) const
///////////////////////////////////////////////////////////////////////
QmlV8DebuggerClient::QmlV8DebuggerClient(QmlDebug::QmlDebugConnection *client)
: BaseQmlDebuggerClient(client, QLatin1String("V8Debugger")),
: QmlDebugClient(QLatin1String("V8Debugger"), client),
d(new QmlV8DebuggerClientPrivate(this))
{
}
......@@ -1795,5 +1797,26 @@ void QmlV8DebuggerClient::clearExceptionSelection()
}
void QmlV8DebuggerClient::stateChanged(State state)
{
emit newState(state);
}
void QmlV8DebuggerClient::sendMessage(const QByteArray &msg)
{
if (state() == Enabled)
QmlDebugClient::sendMessage(msg);
else
d->sendBuffer.append(msg);
}
void QmlV8DebuggerClient::flushSendBuffer()
{
QTC_ASSERT(state() == Enabled, return);
foreach (const QByteArray &msg, d->sendBuffer)
QmlDebugClient::sendMessage(msg);
d->sendBuffer.clear();
}
} // Internal
} // Debugger
......@@ -31,14 +31,18 @@
#ifndef QMLV8DEBUGGERCLIENT_H
#define QMLV8DEBUGGERCLIENT_H
#include "baseqmldebuggerclient.h"
#include <debugger/debuggerengine.h>
#include <qmldebug/qmldebugclient.h>
namespace Debugger {
namespace Internal {
class WatchData;
class WatchItem;
class QmlEngine;
class QmlV8DebuggerClientPrivate;
class QmlV8DebuggerClient : public BaseQmlDebuggerClient
class QmlV8DebuggerClient : public QmlDebug::QmlDebugClient
{
Q_OBJECT
......@@ -99,6 +103,15 @@ public:
void getSourceFiles();
void flushSendBuffer();
void stateChanged(State state);
void sendMessage(const QByteArray &msg);
signals:
void newState(QmlDebug::QmlDebugClient::State state);
void stackFrameCompleted();
protected:
void messageReceived(const QByteArray &data);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment