summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/qml/qmlengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/qml/qmlengine.cpp')
-rw-r--r--src/plugins/debugger/qml/qmlengine.cpp66
1 files changed, 40 insertions, 26 deletions
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index abc050cf4c..f0e6ebc572 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -57,6 +57,7 @@
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/applicationlauncher.h>
#include <qmljsdebugclient/qdeclarativeoutputparser.h>
+#include <qmljsdebugclient/qmlenginedebugclient.h>
#include <qmljseditor/qmljseditorconstants.h>
#include <qmljs/parser/qmljsast_p.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
@@ -119,13 +120,16 @@ private:
InteractiveInterpreter m_interpreter;
bool m_validContext;
QHash<QString,BreakpointModelId> pendingBreakpoints;
+ QList<quint32> queryIds;
bool m_retryOnConnectFail;
+ bool m_automaticConnect;
};
QmlEnginePrivate::QmlEnginePrivate(QmlEngine *q)
: m_adapter(q),
m_validContext(false),
- m_retryOnConnectFail(false)
+ m_retryOnConnectFail(false),
+ m_automaticConnect(false)
{}
class ASTWalker: public Visitor
@@ -367,6 +371,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
if (startParameters.useTerminal) {
d->m_noDebugOutputTimer.setInterval(0);
d->m_retryOnConnectFail = true;
+ d->m_automaticConnect = true;
}
}
@@ -397,6 +402,9 @@ void QmlEngine::setupInferior()
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
notifyInferiorSetupOk();
+
+ if (d->m_automaticConnect)
+ beginConnection();
}
void QmlEngine::appendMessage(const QString &msg, Utils::OutputFormat /* format */)
@@ -421,12 +429,22 @@ void QmlEngine::tryToConnect(quint16 port)
{
showMessage(QLatin1String("QML Debugger: No application output received in time, trying to connect ..."), LogStatus);
d->m_retryOnConnectFail = true;
- beginConnection(port);
+ if (state() == EngineRunRequested
+ && !d->m_automaticConnect)
+ beginConnection(port);
+ else
+ d->m_automaticConnect = true;
}
void QmlEngine::beginConnection(quint16 port)
{
d->m_noDebugOutputTimer.stop();
+
+ if (state() != EngineRunRequested && d->m_retryOnConnectFail)
+ return;
+
+ QTC_ASSERT(state() == EngineRunRequested, return)
+
if (port > 0) {
QTC_CHECK(startParameters().communicationChannel
== DebuggerStartParameters::CommunicationChannelTcpIp);
@@ -1038,23 +1056,15 @@ void QmlEngine::synchronizeWatchers()
}
}
-void QmlEngine::onDebugQueryStateChanged(
- QmlJsDebugClient::QDeclarativeDebugQuery::State state)
+void QmlEngine::expressionEvaluated(quint32 queryId, const QVariant &result)
{
- QmlJsDebugClient::QDeclarativeDebugExpressionQuery *query =
- qobject_cast<QmlJsDebugClient::QDeclarativeDebugExpressionQuery *>(
- sender());
- if (query && state != QmlJsDebugClient::QDeclarativeDebugQuery::Error) {
+ if (d->queryIds.contains(queryId)) {
+ d->queryIds.removeOne(queryId);
QtMessageLogItem *item = constructLogItemTree(qtMessageLogHandler()->root(),
- query->result());
+ result);
if (item)
qtMessageLogHandler()->appendItem(item);
- } else
- qtMessageLogHandler()->
- appendItem(new QtMessageLogItem(qtMessageLogHandler()->root(),
- QtMessageLogHandler::ErrorType,
- _("Error evaluating expression.")));
- delete query;
+ }
}
bool QmlEngine::hasCapability(unsigned cap) const
@@ -1152,21 +1162,25 @@ bool QmlEngine::evaluateScriptExpression(const QString& expression)
//is sent to V8DebugService. In all other cases, the
//expression is evaluated by QDeclarativeEngine.
if (state() != InferiorStopOk) {
- QDeclarativeEngineDebug *engineDebug =
+ QmlEngineDebugClient *engineDebug =
d->m_adapter.engineDebugClient();
int id = d->m_adapter.currentSelectedDebugId();
if (engineDebug && id != -1) {
- QDeclarativeDebugExpressionQuery *query =
- engineDebug->queryExpressionResult(id, expression);
- connect(query,
- SIGNAL(stateChanged(
- QmlJsDebugClient::QDeclarativeDebugQuery
- ::State)),
- this,
- SLOT(onDebugQueryStateChanged(
- QmlJsDebugClient::QDeclarativeDebugQuery
- ::State)));
+ quint32 queryId =
+ engineDebug->queryExpressionResult(
+ id, expression);
+ if (queryId) {
+ d->queryIds << queryId;
+ } else {
+ didEvaluate = false;
+ qtMessageLogHandler()->
+ appendItem(
+ new QtMessageLogItem(
+ qtMessageLogHandler()->root(),
+ QtMessageLogHandler::ErrorType,
+ _("Error evaluating expression.")));
+ }
}
} else {
executeDebuggerCommand(expression);