From f7b19f81140c7a6680f8f18200fc3f300795bb61 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 13 Sep 2010 13:30:35 +0200
Subject: [PATCH] Debugger: Move DebuggerEngine/QmlEngine/QmlCppEngine into
 Debugger{}

namespace (from Debugger::Internal) as they are exported classes.
Introduce private classes to avoid exposing private JS debugger
headers.
---
 src/plugins/debugger/breakhandler.cpp         |   2 +-
 src/plugins/debugger/breakhandler.h           |   6 +-
 src/plugins/debugger/debuggeragents.cpp       |   4 +-
 src/plugins/debugger/debuggeragents.h         |  12 +-
 src/plugins/debugger/debuggerengine.cpp       | 158 ++++++++++-
 src/plugins/debugger/debuggerengine.h         | 122 ++++-----
 src/plugins/debugger/debuggerplugin.h         |  11 +-
 src/plugins/debugger/debuggerrunner.cpp       |  26 +-
 src/plugins/debugger/debuggerrunner.h         |  15 +-
 src/plugins/debugger/gdb/gdbengine.h          |   2 +-
 src/plugins/debugger/gdb/pythongdbengine.cpp  |   3 +-
 src/plugins/debugger/moduleshandler.h         |   4 +-
 src/plugins/debugger/qml/qmladapter.cpp       | 128 +++++----
 src/plugins/debugger/qml/qmladapter.h         |  38 +--
 src/plugins/debugger/qml/qmlcppengine.cpp     | 255 ++++++++++--------
 src/plugins/debugger/qml/qmlcppengine.h       |  25 +-
 src/plugins/debugger/qml/qmlengine.cpp        | 158 +++++------
 src/plugins/debugger/qml/qmlengine.h          |  41 +--
 src/plugins/debugger/registerhandler.h        |   3 +-
 src/plugins/debugger/script/scriptengine.h    |   6 +-
 src/plugins/debugger/snapshothandler.h        |   4 +-
 src/plugins/debugger/sourcefileshandler.h     |   4 +-
 src/plugins/debugger/stackhandler.h           |   4 +-
 src/plugins/debugger/tcf/tcfengine.h          |   2 +-
 src/plugins/debugger/threadshandler.h         |   4 +-
 src/plugins/debugger/watchhandler.h           |   3 +-
 .../qmljsinspector/qmljsclientproxy.cpp       |   4 +-
 src/plugins/qmljsinspector/qmljsclientproxy.h |   8 +-
 src/plugins/qmljsinspector/qmljsinspector.cpp |   4 +-
 src/plugins/qmljsinspector/qmljsinspector.h   |   8 +-
 .../qmljsinspector/qmljsinspectorplugin.cpp   |   4 +-
 31 files changed, 618 insertions(+), 450 deletions(-)

diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index c0e26162ace..9160dd22e0a 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -56,7 +56,7 @@ static DebuggerPlugin *plugin() { return DebuggerPlugin::instance(); }
 //
 //////////////////////////////////////////////////////////////////
 
-BreakHandler::BreakHandler(DebuggerEngine *engine)
+BreakHandler::BreakHandler(Debugger::DebuggerEngine *engine)
   : m_breakpointIcon(_(":/debugger/images/breakpoint_16.png")),
     m_disabledBreakpointIcon(_(":/debugger/images/breakpoint_disabled_16.png")),
     m_pendingBreakPointIcon(_(":/debugger/images/breakpoint_pending_16.png")),
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index f5624d698c4..4afa1408ef1 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -37,12 +37,12 @@
 
 #include <QtGui/QIcon>
 
-
 namespace Debugger {
-namespace Internal {
 
 class DebuggerEngine;
 
+namespace Internal {
+
 //////////////////////////////////////////////////////////////////
 //
 // BreakHandler
@@ -125,7 +125,7 @@ private:
     const QIcon m_emptyIcon;
     const QIcon m_watchpointIcon;
 
-    DebuggerEngine *m_engine; // Not owned.
+    Debugger::DebuggerEngine *m_engine; // Not owned.
     Breakpoints m_bp;
     Breakpoints m_inserted; // Lately inserted breakpoints.
     Breakpoints m_removed; // Lately removed breakpoints.
diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp
index 32cf9336cdf..8130f278866 100644
--- a/src/plugins/debugger/debuggeragents.cpp
+++ b/src/plugins/debugger/debuggeragents.cpp
@@ -79,14 +79,14 @@ namespace Internal {
 
 namespace { const int DataRange = 1024 * 1024; }
 
-MemoryViewAgent::MemoryViewAgent(DebuggerEngine *engine, quint64 addr)
+MemoryViewAgent::MemoryViewAgent(Debugger::DebuggerEngine *engine, quint64 addr)
     : QObject(engine), m_engine(engine)
 {
     QTC_ASSERT(engine, /**/);
     createBinEditor(addr);
 }
 
-MemoryViewAgent::MemoryViewAgent(DebuggerEngine *engine, const QString &addr)
+MemoryViewAgent::MemoryViewAgent(Debugger::DebuggerEngine *engine, const QString &addr)
     : QObject(engine), m_engine(engine)
 {
     QTC_ASSERT(engine, /**/);
diff --git a/src/plugins/debugger/debuggeragents.h b/src/plugins/debugger/debuggeragents.h
index 396b06fad57..6a4172c0cae 100644
--- a/src/plugins/debugger/debuggeragents.h
+++ b/src/plugins/debugger/debuggeragents.h
@@ -38,9 +38,11 @@ class IEditor;
 }
 
 namespace Debugger {
-namespace Internal {
 
 class DebuggerEngine;
+
+namespace Internal {
+
 class StackFrame;
 
 class MemoryViewAgent : public QObject
@@ -49,8 +51,8 @@ class MemoryViewAgent : public QObject
 
 public:
     // Called from Gui
-    explicit MemoryViewAgent(DebuggerEngine *engine, quint64 startaddr);
-    explicit MemoryViewAgent(DebuggerEngine *engine, const QString &startaddr);
+    explicit MemoryViewAgent(Debugger::DebuggerEngine *engine, quint64 startaddr);
+    explicit MemoryViewAgent(Debugger::DebuggerEngine *engine, const QString &startaddr);
     ~MemoryViewAgent();
 
     enum { BinBlockSize = 1024 };
@@ -67,7 +69,7 @@ private:
     Q_SLOT void handleEndOfFileRequested(Core::IEditor *editor);
 
     QList<QPointer<Core::IEditor> > m_editors;
-    QPointer<DebuggerEngine> m_engine;
+    QPointer<Debugger::DebuggerEngine> m_engine;
 };
 
 struct DisassemblerViewAgentPrivate;
@@ -78,7 +80,7 @@ class DisassemblerViewAgent : public QObject
     Q_PROPERTY(QString mimeType READ mimeType WRITE setMimeType)
 public:
     // Called from Gui
-    explicit DisassemblerViewAgent(DebuggerEngine *engine);
+    explicit DisassemblerViewAgent(Debugger::DebuggerEngine *engine);
     ~DisassemblerViewAgent();
 
     void setFrame(const StackFrame &frame, bool tryMixed = true);
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 8986c13a2d3..e85885c9a61 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -152,9 +152,6 @@ QDebug operator<<(QDebug str, const DebuggerStartParameters &sp)
     return str;
 }
 
-
-namespace Internal {
-
 const char *DebuggerEngine::stateName(int s)
 {
 #    define SN(x) case x: return #x;
@@ -1562,7 +1559,160 @@ DebuggerRunControl *DebuggerEngine::runControl() const
     return d->m_runControl;
 }
 
-} // namespace Internal
+void DebuggerEngine::setToolTipExpression(const QPoint &, TextEditor::ITextEditor *, int)
+{
+}
+
+void DebuggerEngine::updateWatchData(const Internal::WatchData &, const Internal::WatchUpdateFlags &)
+{
+}
+
+bool DebuggerEngine::isSessionEngine() const
+{
+    return false;
+}
+
+void DebuggerEngine::watchPoint(const QPoint &)
+{
+}
+
+void DebuggerEngine::fetchDisassembler(Internal::DisassemblerViewAgent *)
+{
+}
+
+void DebuggerEngine::activateFrame(int)
+{
+}
+
+void DebuggerEngine::reloadModules()
+{
+}
+
+void DebuggerEngine::examineModules()
+{
+}
+
+void DebuggerEngine::loadSymbols(const QString &)
+{
+}
+
+void DebuggerEngine::loadAllSymbols()
+{
+}
+
+void DebuggerEngine::requestModuleSymbols(const QString &)
+{
+}
+
+void DebuggerEngine::reloadRegisters()
+{
+}
+
+void DebuggerEngine::reloadSourceFiles()
+{
+}
+
+void DebuggerEngine::reloadFullStack()
+{
+}
+
+void DebuggerEngine::addOptionPages(QList<Core::IOptionsPage*> *) const
+{
+}
+
+unsigned DebuggerEngine::debuggerCapabilities() const
+{
+    return 0;
+}
+
+bool DebuggerEngine::isSynchronous() const
+{
+    return false;
+}
+
+QByteArray DebuggerEngine::qtNamespace() const
+{
+    return QByteArray();
+}
+
+void DebuggerEngine::createSnapshot()
+{
+}
+
+void DebuggerEngine::updateAll()
+{
+}
+
+void DebuggerEngine::attemptBreakpointSynchronization()
+{
+}
+
+void DebuggerEngine::selectThread(int)
+{
+}
+
+void DebuggerEngine::assignValueInDebugger(const QString &, const QString &)
+{
+}
+
+void DebuggerEngine::detachDebugger()
+{
+}
+
+void DebuggerEngine::executeStep()
+{
+}
+
+void DebuggerEngine::executeStepOut()
+{
+}
+
+void DebuggerEngine::executeNext()
+{
+}
+
+void DebuggerEngine::executeStepI()
+{
+}
+
+void DebuggerEngine::executeNextI()
+{
+}
+
+void DebuggerEngine::executeReturn()
+{
+}
+
+void DebuggerEngine::continueInferior()
+{
+}
+
+void DebuggerEngine::interruptInferior()
+{
+}
+
+void DebuggerEngine::executeRunToLine(const QString &, int)
+{
+}
+
+void DebuggerEngine::executeRunToFunction(const QString &)
+{
+}
+
+void DebuggerEngine::executeJumpToLine(const QString &, int)
+{
+}
+
+void DebuggerEngine::executeDebuggerCommand(const QString &)
+{
+
+}
+
+bool DebuggerEngine::isDying() const
+{
+    return targetState() == DebuggerFinished;
+}
+
 } // namespace Debugger
 
 #include "debuggerengine.moc"
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 7340efcfae9..8b4b21eed35 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -58,6 +58,8 @@ namespace Debugger {
 
 class DebuggerRunControl;
 class DebuggerPlugin;
+class DebuggerEnginePrivate;
+class QmlCppEngine;
 
 class DEBUGGER_EXPORT DebuggerStartParameters
 {
@@ -128,13 +130,12 @@ class SourceFilesHandler;
 class ThreadsHandler;
 class WatchHandler;
 
-class DebuggerEnginePrivate;
-
 struct WatchUpdateFlags
 {
     WatchUpdateFlags() : tryIncremental(false) {}
     bool tryIncremental;
 };
+} // namespace Internal
 
 // FIXME: DEBUGGER_EXPORT?
 class DEBUGGER_EXPORT DebuggerEngine : public QObject
@@ -142,78 +143,72 @@ class DEBUGGER_EXPORT DebuggerEngine : public QObject
     Q_OBJECT
 
 public:
-    DebuggerEngine(const DebuggerStartParameters &sp);
+    explicit DebuggerEngine(const DebuggerStartParameters &sp);
     virtual ~DebuggerEngine();
 
-    virtual void setToolTipExpression(const QPoint & /* mousePos */,
-            TextEditor::ITextEditor * /* editor */, int /* cursorPos */) {}
+    virtual void setToolTipExpression(const QPoint & mousePos,
+                                      TextEditor::ITextEditor * editor, int cursorPos);
     void initializeFromTemplate(DebuggerEngine *other);
 
-    virtual void updateWatchData(const WatchData & /* data */,
-        const WatchUpdateFlags & /* flags */ = WatchUpdateFlags()) {}
+    virtual void updateWatchData(const Internal::WatchData &data,
+                                 const Internal::WatchUpdateFlags & flags = Internal::WatchUpdateFlags());
     void startDebugger(DebuggerRunControl *runControl);
-    virtual bool isSessionEngine() const { return false; }
-
-    virtual void watchPoint(const QPoint &) {}
-    virtual void fetchMemory(MemoryViewAgent *, QObject *,
-            quint64 addr, quint64 length);
-    virtual void fetchDisassembler(DisassemblerViewAgent *) {}
-    virtual void activateFrame(int index) { Q_UNUSED(index); }
-
-    virtual void reloadModules() {}
-    virtual void examineModules() {}
-    virtual void loadSymbols(const QString &moduleName)
-        { Q_UNUSED(moduleName); }
-    virtual void loadAllSymbols() {}
-    virtual void requestModuleSymbols(const QString &moduleName)
-        { Q_UNUSED(moduleName); }
-
-    virtual void reloadRegisters() {}
-    virtual void reloadSourceFiles() {}
-    virtual void reloadFullStack() {}
+    virtual bool isSessionEngine() const;
+
+    virtual void watchPoint(const QPoint &);
+    virtual void fetchMemory(Internal::MemoryViewAgent *, QObject *,
+                             quint64 addr, quint64 length);
+    virtual void fetchDisassembler(Internal::DisassemblerViewAgent *);
+    virtual void activateFrame(int index);
+
+    virtual void reloadModules();
+    virtual void examineModules();
+    virtual void loadSymbols(const QString &moduleName);
+    virtual void loadAllSymbols();
+    virtual void requestModuleSymbols(const QString &moduleName);
+
+    virtual void reloadRegisters();
+    virtual void reloadSourceFiles();
+    virtual void reloadFullStack();
 
     virtual void setRegisterValue(int regnr, const QString &value);
-    virtual void addOptionPages(QList<Core::IOptionsPage*> *) const {}
-    virtual unsigned debuggerCapabilities() const { return 0; }
+    virtual void addOptionPages(QList<Core::IOptionsPage*> *) const;
+    virtual unsigned debuggerCapabilities() const;
 
-    virtual bool isSynchronous() const { return false; }
-    virtual QByteArray qtNamespace() const { return QByteArray(); }
+    virtual bool isSynchronous() const;
+    virtual QByteArray qtNamespace() const;
 
-    virtual void createSnapshot() {}
-    virtual void updateAll() {}
+    virtual void createSnapshot();
+    virtual void updateAll();
 
-    virtual void attemptBreakpointSynchronization() {}
-    virtual void selectThread(int index) { Q_UNUSED(index); }
+    virtual void attemptBreakpointSynchronization();
+    virtual void selectThread(int index);
 
-    virtual void assignValueInDebugger(const QString &expr, const QString &value)
-        { Q_UNUSED(expr); Q_UNUSED(value); }
+    virtual void assignValueInDebugger(const QString &expr, const QString &value);
 
     // Convenience
     static QMessageBox *showMessageBox
         (int icon, const QString &title, const QString &text, int buttons = 0);
 
 protected:
-    virtual void detachDebugger() {}
-    virtual void executeStep() {}
-    virtual void executeStepOut()  {}
-    virtual void executeNext() {}
-    virtual void executeStepI() {}
-    virtual void executeNextI() {}
-    virtual void executeReturn() {}
+    virtual void detachDebugger();
+    virtual void executeStep();
+    virtual void executeStepOut() ;
+    virtual void executeNext();
+    virtual void executeStepI();
+    virtual void executeNextI();
+    virtual void executeReturn();
 
-    virtual void continueInferior() {}
-    virtual void interruptInferior() {}
+    virtual void continueInferior();
+    virtual void interruptInferior();
 
     virtual void requestInterruptInferior();
 
-    virtual void executeRunToLine(const QString &fileName, int lineNumber)
-        { Q_UNUSED(fileName); Q_UNUSED(lineNumber); }
-    virtual void executeRunToFunction(const QString &functionName)
-        { Q_UNUSED(functionName); }
-    virtual void executeJumpToLine(const QString &fileName, int lineNumber)
-        { Q_UNUSED(fileName); Q_UNUSED(lineNumber); }
-    virtual void executeDebuggerCommand(const QString &command)
-        { Q_UNUSED(command); }
+    virtual void executeRunToLine(const QString &fileName, int lineNumber);
+
+    virtual void executeRunToFunction(const QString &functionName);
+    virtual void executeJumpToLine(const QString &fileName, int lineNumber);
+    virtual void executeDebuggerCommand(const QString &command);
 
     virtual void frameUp();
     virtual void frameDown();
@@ -223,13 +218,13 @@ public:
     const DebuggerStartParameters &startParameters() const;
     DebuggerStartParameters &startParameters();
 
-    ModulesHandler *modulesHandler() const;
-    BreakHandler *breakHandler() const;
-    RegisterHandler *registerHandler() const;
-    StackHandler *stackHandler() const;
-    ThreadsHandler *threadsHandler() const;
-    WatchHandler *watchHandler() const;
-    SourceFilesHandler *sourceFilesHandler() const;
+    Internal::ModulesHandler *modulesHandler() const;
+    Internal::BreakHandler *breakHandler() const;
+    Internal::RegisterHandler *registerHandler() const;
+    Internal::StackHandler *stackHandler() const;
+    Internal::ThreadsHandler *threadsHandler() const;
+    Internal::WatchHandler *watchHandler() const;
+    Internal::SourceFilesHandler *sourceFilesHandler() const;
 
     virtual QAbstractItemModel *commandModel() const;
     virtual QAbstractItemModel *modulesModel() const;
@@ -248,7 +243,7 @@ public:
     void handleStartFailed();
     bool debuggerActionsEnabled() const;
     static bool debuggerActionsEnabled(DebuggerState state);
-    void showModuleSymbols(const QString &moduleName, const Symbols &symbols);
+    void showModuleSymbols(const QString &moduleName, const Internal::Symbols &symbols);
 
     void breakByFunction(const QString &functionName);
     void breakByFunctionMain();
@@ -261,7 +256,7 @@ public:
     DebuggerState state() const;
     DebuggerState lastGoodState() const;
     DebuggerState targetState() const;
-    bool isDying() const { return targetState() == DebuggerFinished; }
+    bool isDying() const;
 
     // Dumper stuff (common to cdb and gdb).
     bool qtDumperLibraryEnabled() const;
@@ -285,7 +280,7 @@ public:
     void resetLocation();
     void openFile(const QString &fileName, int lineNumber = -1);
     virtual void gotoLocation(const QString &fileName, int lineNumber, bool setMarker);
-    virtual void gotoLocation(const StackFrame &frame, bool setMarker);
+    virtual void gotoLocation(const Internal::StackFrame &frame, bool setMarker);
     virtual void quitDebugger(); // called by DebuggerRunControl
 
 signals:
@@ -353,7 +348,6 @@ private:
     DebuggerEnginePrivate *d;
 };
 
-} // namespace Internal
 } // namespace Debugger
 
 #endif // DEBUGGER_DEBUGGERENGINE_H
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index 4a226ed4b05..3b6253104d2 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -50,13 +50,12 @@ class RunControl;
 }
 
 namespace Debugger {
-
+class DebuggerEngine;
 class DebuggerPluginPrivate;
 class DebuggerRunControl;
 class DebuggerStartParameters;
 
 namespace Internal {
-class DebuggerEngine;
 class DebuggerListener;
 }
 
@@ -74,13 +73,13 @@ public:
         ProjectExplorer::RunConfiguration *rc = 0);
     static void startDebugger(ProjectExplorer::RunControl *runControl);
     static void displayDebugger(ProjectExplorer::RunControl *runControl);
-    static void displayDebugger(Internal::DebuggerEngine *engine, bool updateEngine = true);
+    static void displayDebugger(DebuggerEngine *engine, bool updateEngine = true);
 
     QVariant sessionValue(const QString &name);
     void setSessionValue(const QString &name, const QVariant &value);
     QVariant configValue(const QString &name) const;
     void setConfigValue(const QString &name, const QVariant &value);
-    void updateState(Internal::DebuggerEngine *engine);
+    void updateState(DebuggerEngine *engine);
 
     QIcon locationMarkIcon() const;
     void activateDebugMode();
@@ -99,7 +98,7 @@ public slots:
     void showMessage(const QString &msg, int channel, int timeout = -1);
 
 private:
-    friend class Internal::DebuggerEngine;
+    friend class DebuggerEngine;
     friend class DebuggerPluginPrivate;
     friend class DebuggerRunControl;
 
@@ -116,7 +115,7 @@ private:
 
     // This contains per-session data like breakpoints and watched
     // expression. It serves as a template for new engine instantiations.
-    Internal::DebuggerEngine *sessionTemplate();
+    DebuggerEngine *sessionTemplate();
 
     QMessageBox *showMessageBox(int icon, const QString &title,
         const QString &text, int buttons = 0);
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index a438b16eba1..41d084aa8b3 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -404,22 +404,22 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams
             initGdbEngine(qobject_cast<Internal::GdbEngine *>(m_engine));
             break;
         case ScriptEngineType:
-            m_engine = createScriptEngine(sp);
+            m_engine = Internal::createScriptEngine(sp);
             break;
         case CdbEngineType:
-            m_engine = createCdbEngine(sp);
+            m_engine = Internal::createCdbEngine(sp);
             break;
         case PdbEngineType:
-            m_engine = createPdbEngine(sp);
+            m_engine = Internal::createPdbEngine(sp);
             break;
         case TcfEngineType:
-            m_engine = createTcfEngine(sp);
+            m_engine = Internal::createTcfEngine(sp);
             break;
         case QmlEngineType:
-            m_engine = createQmlEngine(sp);
+            m_engine = Internal::createQmlEngine(sp);
             break;
         case QmlCppEngineType:
-            m_engine = createQmlCppEngine(sp);
+            m_engine = Internal::createQmlCppEngine(sp);
             if (Internal::GdbEngine *embeddedGdbEngine = gdbEngine())
                 initGdbEngine(embeddedGdbEngine);
             break;
@@ -608,7 +608,7 @@ DebuggerState DebuggerRunControl::state() const
     return m_engine->state();
 }
 
-Internal::DebuggerEngine *DebuggerRunControl::engine()
+DebuggerEngine *DebuggerRunControl::engine()
 {
     QTC_ASSERT(m_engine, /**/);
     return m_engine;
@@ -620,7 +620,7 @@ Internal::GdbEngine *DebuggerRunControl::gdbEngine() const
     if (GdbEngine *gdbEngine = qobject_cast<GdbEngine *>(m_engine))
         return gdbEngine;
     if (QmlCppEngine * const qmlEngine = qobject_cast<QmlCppEngine *>(m_engine))
-        if (GdbEngine *embeddedGdbEngine = qobject_cast<GdbEngine *>(qmlEngine->cppEngine()))
+        if (Internal::GdbEngine *embeddedGdbEngine = qobject_cast<GdbEngine *>(qmlEngine->cppEngine()))
             return embeddedGdbEngine;
     return 0;
 }
@@ -657,4 +657,14 @@ void DebuggerRunControl::remoteGdbHandleSetupFailed(const QString &message)
         QTC_ASSERT(false, /* */ );
     }
 }
+
+void DebuggerRunControl::emitAddToOutputWindow(const QString &line, bool onStdErr)
+{
+    emit addToOutputWindow(this, line, onStdErr);
+}
+
+void DebuggerRunControl::emitAppendMessage(const QString &m, bool isError)
+{
+    emit appendMessage(this, m, isError);
+}
 } // namespace Debugger
diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h
index cca2a24446f..da37c52a3a7 100644
--- a/src/plugins/debugger/debuggerrunner.h
+++ b/src/plugins/debugger/debuggerrunner.h
@@ -39,15 +39,13 @@ namespace ProjectExplorer {
 class Environment;
 }
 
-
 namespace Debugger {
-
+class DebuggerEngine;
 class DebuggerRunControl;
+class QmlEngine;
 class DebuggerStartParameters;
 
 namespace Internal {
-class DebuggerEngine;
-class QmlEngine;
 class GdbEngine;
 class AbstractGdbAdapter;
 }
@@ -111,7 +109,7 @@ public:
     RunConfiguration *runConfiguration() const { return m_myRunConfiguration.data(); }
 
     DebuggerState state() const;
-    Internal::DebuggerEngine *engine();
+    DebuggerEngine *engine();
 
     void showMessage(const QString &msg, int channel);
 
@@ -126,6 +124,10 @@ public:
 signals:
     void gdbAdapterRequestSetup();
 
+public slots:
+    void emitAddToOutputWindow(const QString &line, bool onStdErr);
+    void emitAppendMessage(const QString &, bool isError);
+
 private slots:
     void handleFinished();
 
@@ -139,14 +141,13 @@ private:
     Internal::GdbEngine *gdbEngine() const;
     Internal::AbstractGdbAdapter *gdbAdapter() const;
 
-    Internal::DebuggerEngine *m_engine;
+    DebuggerEngine *m_engine;
     const QWeakPointer<RunConfiguration> m_myRunConfiguration;
     bool m_running;
     bool m_started;
     DebuggerEngineType m_enabledEngines;
     QString m_errorMessage;
     QString m_settingsIdHint;
-    friend class Internal::QmlEngine;
 };
 
 } // namespace Debugger
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index d966f1007ba..7ddff2918ab 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -82,7 +82,7 @@ enum DebuggingHelperState
 };
 
 
-class DEBUGGER_EXPORT GdbEngine : public DebuggerEngine
+class DEBUGGER_EXPORT GdbEngine : public Debugger::DebuggerEngine
 {
     Q_OBJECT
 
diff --git a/src/plugins/debugger/gdb/pythongdbengine.cpp b/src/plugins/debugger/gdb/pythongdbengine.cpp
index 63532e148e7..b55c5e5d25a 100644
--- a/src/plugins/debugger/gdb/pythongdbengine.cpp
+++ b/src/plugins/debugger/gdb/pythongdbengine.cpp
@@ -114,7 +114,8 @@ void GdbEngine::handleStackFramePython(const GdbResponse &response)
 {
     PRECONDITION;
     if (response.resultClass == GdbResultDone) {
-        bool partial = response.cookie.toBool();
+        const bool partial = response.cookie.toBool();
+        Q_UNUSED(partial);
         //qDebug() << "READING " << (partial ? "PARTIAL" : "FULL");
         QByteArray out = response.data.findChild("consolestreamoutput").data();
         while (out.endsWith(' ') || out.endsWith('\n'))
diff --git a/src/plugins/debugger/moduleshandler.h b/src/plugins/debugger/moduleshandler.h
index 4517320054e..3bfa42d53f7 100644
--- a/src/plugins/debugger/moduleshandler.h
+++ b/src/plugins/debugger/moduleshandler.h
@@ -40,9 +40,11 @@ QT_END_NAMESPACE
 
 
 namespace Debugger {
-namespace Internal {
 
 class DebuggerEngine;
+
+namespace Internal {
+
 class ModulesModel;
 
 //////////////////////////////////////////////////////////////////
diff --git a/src/plugins/debugger/qml/qmladapter.cpp b/src/plugins/debugger/qml/qmladapter.cpp
index 615dd5aa294..fbea843d19e 100644
--- a/src/plugins/debugger/qml/qmladapter.cpp
+++ b/src/plugins/debugger/qml/qmladapter.cpp
@@ -33,82 +33,101 @@
 
 #include "debuggerengine.h"
 
-#include <QAbstractSocket>
-#include <QTimer>
-#include <QDebug>
+#include <QtCore/QTimer>
+#include <QtCore/QDebug>
 
 namespace Debugger {
-namespace Internal {
+
+struct QmlAdapterPrivate {
+    explicit QmlAdapterPrivate(DebuggerEngine *engine, QmlAdapter *q);
+
+    QWeakPointer<DebuggerEngine> m_engine;
+    Internal::QmlDebuggerClient *m_qmlClient;
+    QDeclarativeEngineDebug *m_mainClient;
+
+    QTimer *m_connectionTimer;
+    int m_connectionAttempts;
+    int m_maxConnectionAttempts;
+    QDeclarativeDebugConnection *m_conn;
+};
+
+QmlAdapterPrivate::QmlAdapterPrivate(DebuggerEngine *engine, QmlAdapter *q) :
+  m_engine(engine)
+, m_qmlClient(0)
+, m_mainClient(0)
+, m_connectionTimer(new QTimer(q))
+, m_connectionAttempts(0)
+, m_conn(0)
+{
+}
 
 QmlAdapter::QmlAdapter(DebuggerEngine *engine, QObject *parent)
-    : QObject(parent)
-    , m_engine(engine)
-    , m_qmlClient(0)
-    , m_mainClient(0)
-    , m_connectionTimer(new QTimer(this))
-    , m_connectionAttempts(0)
-    , m_conn(0)
+    : QObject(parent), d(new QmlAdapterPrivate(engine, this))
+{
+    d->m_connectionTimer->setInterval(200);
+    connect(d->m_connectionTimer, SIGNAL(timeout()), SLOT(pollInferior()));
+}
 
+QmlAdapter::~QmlAdapter()
 {
-    m_connectionTimer->setInterval(200);
-    connect(m_connectionTimer, SIGNAL(timeout()), SLOT(pollInferior()));
 }
 
 void QmlAdapter::beginConnection()
 {
-    m_connectionAttempts = 0;
-    m_connectionTimer->start();
+    d->m_connectionAttempts = 0;
+    d->m_connectionTimer->start();
 }
 
 void QmlAdapter::pauseConnection()
 {
-    m_connectionTimer->stop();
+    d->m_connectionTimer->stop();
 }
 
 void QmlAdapter::closeConnection()
 {
-    if (m_connectionTimer->isActive()) {
-        m_connectionTimer->stop();
+    if (d->m_connectionTimer->isActive()) {
+        d->m_connectionTimer->stop();
     } else {
-        if (m_conn) {
-            m_conn->disconnectFromHost();
+        if (d->m_conn) {
+            d->m_conn->disconnectFromHost();
         }
     }
 }
 
 void QmlAdapter::pollInferior()
 {
-    ++m_connectionAttempts;
+    ++d->m_connectionAttempts;
 
     if (connectToViewer()) {
-        m_connectionTimer->stop();
-        m_connectionAttempts = 0;
-    } else if (m_connectionAttempts == m_maxConnectionAttempts) {
+        d->m_connectionTimer->stop();
+        d->m_connectionAttempts = 0;
+    } else if (d->m_connectionAttempts == d->m_maxConnectionAttempts) {
         emit connectionStartupFailed();
-        m_connectionTimer->stop();
-        m_connectionAttempts = 0;
+        d->m_connectionTimer->stop();
+        d->m_connectionAttempts = 0;
     }
 }
 
 bool QmlAdapter::connectToViewer()
 {
-    if (m_engine.isNull() || (m_conn && m_conn->state() != QAbstractSocket::UnconnectedState))
+    if (d->m_engine.isNull() || (d->m_conn && d->m_conn->state() != QAbstractSocket::UnconnectedState))
         return false;
 
-    m_conn = new QDeclarativeDebugConnection(this);
-    connect(m_conn, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
+    d->m_conn = new QDeclarativeDebugConnection(this);
+    connect(d->m_conn, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
             SLOT(connectionStateChanged()));
-    connect(m_conn, SIGNAL(error(QAbstractSocket::SocketError)),
+    connect(d->m_conn, SIGNAL(error(QAbstractSocket::SocketError)),
             SLOT(connectionErrorOccurred(QAbstractSocket::SocketError)));
 
-    QString address = m_engine.data()->startParameters().qmlServerAddress;
-    QString port = QString::number(m_engine.data()->startParameters().qmlServerPort);
+    QString address = d->m_engine.data()->startParameters().qmlServerAddress;
+    QString port = QString::number(d->m_engine.data()->startParameters().qmlServerPort);
     showConnectionStatusMessage(tr("Connect to debug server %1:%2").arg(address).arg(port));
-    m_conn->connectToHost(m_engine.data()->startParameters().qmlServerAddress,
-                          m_engine.data()->startParameters().qmlServerPort);
+    d->m_conn->connectToHost(d->m_engine.data()->startParameters().qmlServerAddress,
+                          d->m_engine.data()->startParameters().qmlServerPort);
+
 
     // blocks until connected; if no connection is available, will fail immediately
-    if (!m_conn->waitForConnected())
+    if (!d->m_conn->waitForConnected())
         return false;
 
     return true;
@@ -117,7 +136,7 @@ bool QmlAdapter::connectToViewer()
 void QmlAdapter::connectionErrorOccurred(QAbstractSocket::SocketError socketError)
 {
     showConnectionErrorMessage(tr("Error: (%1) %2", "%1=error code, %2=error message")
-                                .arg(m_conn->error()).arg(m_conn->errorString()));
+                                .arg(d->m_conn->error()).arg(d->m_conn->errorString()));
 
     // this is only an error if we are already connected and something goes wrong.
     if (isConnected())
@@ -126,7 +145,7 @@ void QmlAdapter::connectionErrorOccurred(QAbstractSocket::SocketError socketErro
 
 void QmlAdapter::connectionStateChanged()
 {
-    switch (m_conn->state()) {
+    switch (d->m_conn->state()) {
         case QAbstractSocket::UnconnectedState:
         {
             showConnectionStatusMessage(tr("disconnected.\n\n"));
@@ -144,8 +163,8 @@ void QmlAdapter::connectionStateChanged()
         {
             showConnectionStatusMessage(tr("connected.\n"));
 
-            if (!m_mainClient) {
-                m_mainClient = new QDeclarativeEngineDebug(m_conn, this);
+            if (!d->m_mainClient) {
+                d->m_mainClient = new QDeclarativeEngineDebug(d->m_conn, this);
             }
 
             createDebuggerClient();
@@ -164,29 +183,29 @@ void QmlAdapter::connectionStateChanged()
 
 void QmlAdapter::createDebuggerClient()
 {
-    m_qmlClient = new QmlDebuggerClient(m_conn);
+    d->m_qmlClient = new Internal::QmlDebuggerClient(d->m_conn);
 
-    connect(m_engine.data(), SIGNAL(sendMessage(QByteArray)),
-            m_qmlClient, SLOT(slotSendMessage(QByteArray)));
-    connect(m_qmlClient, SIGNAL(messageWasReceived(QByteArray)),
-            m_engine.data(), SLOT(messageReceived(QByteArray)));
+    connect(d->m_engine.data(), SIGNAL(sendMessage(QByteArray)),
+            d->m_qmlClient, SLOT(slotSendMessage(QByteArray)));
+    connect(d->m_qmlClient, SIGNAL(messageWasReceived(QByteArray)),
+            d->m_engine.data(), SLOT(messageReceived(QByteArray)));
 
     //engine->startSuccessful();  // FIXME: AAA: port to new debugger states
 }
 
 bool QmlAdapter::isConnected() const
 {
-    return m_conn && m_qmlClient && m_conn->state() == QAbstractSocket::ConnectedState;
+    return d->m_conn && d->m_qmlClient && d->m_conn->state() == QAbstractSocket::ConnectedState;
 }
 
 bool QmlAdapter::isUnconnected() const
 {
-    return !m_conn || m_conn->state() == QAbstractSocket::UnconnectedState;
+    return !d->m_conn || d->m_conn->state() == QAbstractSocket::UnconnectedState;
 }
 
 QDeclarativeEngineDebug *QmlAdapter::client() const
 {
-    return m_mainClient;
+    return d->m_mainClient;
 }
 
 QDeclarativeDebugConnection *QmlAdapter::connection() const
@@ -194,29 +213,28 @@ QDeclarativeDebugConnection *QmlAdapter::connection() const
     if (!isConnected())
         return 0;
 
-    return m_conn;
+    return d->m_conn;
 }
 
 void QmlAdapter::showConnectionStatusMessage(const QString &message)
 {
-    if (!m_engine.isNull())
-        m_engine.data()->showMessage(QLatin1String("QmlJSDebugger: ") + message, LogStatus);
+    if (!d->m_engine.isNull())
+        d->m_engine.data()->showMessage(QLatin1String("QmlJSDebugger: ") + message, LogStatus);
 }
 
 void QmlAdapter::showConnectionErrorMessage(const QString &message)
 {
-    if (!m_engine.isNull())
-        m_engine.data()->showMessage(QLatin1String("QmlJSDebugger: ") + message, LogError);
+    if (!d->m_engine.isNull())
+        d->m_engine.data()->showMessage(QLatin1String("QmlJSDebugger: ") + message, LogError);
 }
 
 void QmlAdapter::setMaxConnectionAttempts(int maxAttempts)
 {
-    m_maxConnectionAttempts = maxAttempts;
+    d->m_maxConnectionAttempts = maxAttempts;
 }
 void QmlAdapter::setConnectionAttemptInterval(int interval)
 {
-    m_connectionTimer->setInterval(interval);
+    d->m_connectionTimer->setInterval(interval);
 }
 
-} // namespace Internal
 } // namespace Debugger
diff --git a/src/plugins/debugger/qml/qmladapter.h b/src/plugins/debugger/qml/qmladapter.h
index c27c6a48d16..e4de5374715 100644
--- a/src/plugins/debugger/qml/qmladapter.h
+++ b/src/plugins/debugger/qml/qmladapter.h
@@ -30,24 +30,36 @@
 #ifndef QMLADAPTER_H
 #define QMLADAPTER_H
 
-#include <QObject>
-#include <QWeakPointer>
+#include <QtCore/QObject>
+#include <QtCore/QScopedPointer>
 
-#include "qmljsprivateapi.h"
 #include "debugger_global.h"
 
-QT_FORWARD_DECLARE_CLASS(QTimer)
+#include <QtNetwork/QAbstractSocket>
+
+QT_BEGIN_NAMESPACE
+namespace QmlJsDebugClient {
+class QDeclarativeEngineDebug;
+class QDeclarativeDebugConnection;
+}
+QT_END_NAMESPACE
 
 namespace Debugger {
-namespace Internal {
+
 class DebuggerEngine;
+
+namespace Internal {
 class QmlDebuggerClient;
+} // namespace Internal
 
+struct QmlAdapterPrivate;
 class DEBUGGER_EXPORT QmlAdapter : public QObject
 {
     Q_OBJECT
 public:
     explicit QmlAdapter(DebuggerEngine *engine, QObject *parent = 0);
+    virtual ~QmlAdapter();
+
     void beginConnection();
     void pauseConnection();
     void closeConnection();
@@ -55,8 +67,8 @@ public:
     bool isConnected() const;
     bool isUnconnected() const;
 
-    QDeclarativeEngineDebug *client() const;
-    QDeclarativeDebugConnection *connection() const;
+    QmlJsDebugClient::QDeclarativeEngineDebug *client() const;
+    QmlJsDebugClient::QDeclarativeDebugConnection *connection() const;
 
     // TODO move to private API b/w engine and adapter
     void setMaxConnectionAttempts(int maxAttempts);
@@ -81,19 +93,9 @@ private:
     void showConnectionErrorMessage(const QString &message);
 
 private:
-    QWeakPointer<DebuggerEngine> m_engine;
-    QmlDebuggerClient *m_qmlClient;
-    QDeclarativeEngineDebug *m_mainClient;
-
-    QTimer *m_connectionTimer;
-    int m_connectionAttempts;
-    int m_maxConnectionAttempts;
-
-    QDeclarativeDebugConnection *m_conn;
-
+    QScopedPointer<QmlAdapterPrivate> d;
 };
 
-} // namespace Internal
 } // namespace Debugger
 
 #endif // QMLADAPTER_H
diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index 54c68e3cf76..52e5517219e 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -7,12 +7,13 @@
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
 
+#include <QtCore/QTimer>
 
 namespace Debugger {
-namespace Internal {
 
 const int ConnectionWaitTimeMs = 5000;
 
+namespace Internal {
 DebuggerEngine *createCdbEngine(const DebuggerStartParameters &);
 DebuggerEngine *createGdbEngine(const DebuggerStartParameters &);
 DebuggerEngine *createQmlEngine(const DebuggerStartParameters &);
@@ -21,29 +22,49 @@ DebuggerEngine *createQmlCppEngine(const DebuggerStartParameters &sp)
 {
     return new QmlCppEngine(sp);
 }
+} // namespace Internal
 
-QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp)
-    : DebuggerEngine(sp)
-    , m_shutdownOk(true)
+struct QmlCppEnginePrivate {
+    QmlCppEnginePrivate();
+
+    QmlEngine *m_qmlEngine;
+    DebuggerEngine *m_cppEngine;
+    DebuggerEngine *m_activeEngine;
+    bool m_shutdownOk;
+    bool m_shutdownDeferred;
+    bool m_shutdownDone;
+    bool m_isInitialStartup;
+};
+
+QmlCppEnginePrivate::QmlCppEnginePrivate() :
+    m_qmlEngine(0),
+    m_cppEngine(0),
+    m_activeEngine(0),
+    m_shutdownOk(true)
     , m_shutdownDeferred(false)
     , m_shutdownDone(false)
     , m_isInitialStartup(true)
 {
-    m_qmlEngine = qobject_cast<QmlEngine*>(createQmlEngine(sp));
-    m_qmlEngine->setAttachToRunningExternalApp(true);
+}
+
+QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp)
+    : DebuggerEngine(sp), d(new QmlCppEnginePrivate)
+{
+    d->m_qmlEngine = qobject_cast<QmlEngine*>(Internal::createQmlEngine(sp));
+    d->m_qmlEngine->setAttachToRunningExternalApp(true);
 
     if (startParameters().cppEngineType == GdbEngineType) {
-        m_cppEngine = createGdbEngine(sp);
+        d->m_cppEngine = Internal::createGdbEngine(sp);
     } else {
-        m_cppEngine = createCdbEngine(sp);
+        d->m_cppEngine = Internal::createCdbEngine(sp);
     }
 
-    m_cppEngine->setRunInWrapperEngine(true);
-    m_qmlEngine->setRunInWrapperEngine(true);
+    d->m_cppEngine->setRunInWrapperEngine(true);
+    d->m_qmlEngine->setRunInWrapperEngine(true);
 
-    m_activeEngine = m_cppEngine;
-    connect(m_cppEngine, SIGNAL(stateChanged(DebuggerState)), SLOT(masterEngineStateChanged(DebuggerState)));
-    connect(m_qmlEngine, SIGNAL(stateChanged(DebuggerState)), SLOT(slaveEngineStateChanged(DebuggerState)));
+    d->m_activeEngine = d->m_cppEngine;
+    connect(d->m_cppEngine, SIGNAL(stateChanged(DebuggerState)), SLOT(masterEngineStateChanged(DebuggerState)));
+    connect(d->m_qmlEngine, SIGNAL(stateChanged(DebuggerState)), SLOT(slaveEngineStateChanged(DebuggerState)));
 
     Core::EditorManager *em = Core::EditorManager::instance();
     connect(em, SIGNAL(currentEditorChanged(Core::IEditor*)), SLOT(editorChanged(Core::IEditor*)));
@@ -51,10 +72,10 @@ QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp)
 
 QmlCppEngine::~QmlCppEngine()
 {
-    delete m_qmlEngine;
-    delete m_cppEngine;
-    m_qmlEngine = 0;
-    m_cppEngine = 0;
+    delete d->m_qmlEngine;
+    delete d->m_cppEngine;
+    d->m_qmlEngine = 0;
+    d->m_cppEngine = 0;
 }
 
 void QmlCppEngine::editorChanged(Core::IEditor *editor)
@@ -72,274 +93,274 @@ void QmlCppEngine::editorChanged(Core::IEditor *editor)
 
 void QmlCppEngine::setActiveEngine(DebuggerLanguage language)
 {
-    DebuggerEngine *previousEngine = m_activeEngine;
+    DebuggerEngine *previousEngine = d->m_activeEngine;
     bool updateEngine = false;
     QString engineName;
 
     if (language == CppLanguage) {
         engineName = QLatin1String("C++");
-        m_activeEngine = m_cppEngine;
+        d->m_activeEngine = d->m_cppEngine;
         // don't update cpp engine - at least gdb will stop temporarily,
         // which is not nice when you're just switching files.
     } else if (language == QmlLanguage) {
         engineName = QLatin1String("QML");
-        m_activeEngine = m_qmlEngine;
+        d->m_activeEngine = d->m_qmlEngine;
         updateEngine = true;
     }
-    if (previousEngine != m_activeEngine) {
+    if (previousEngine != d->m_activeEngine) {
         showStatusMessage(tr("%1 debugger activated").arg(engineName));
-        plugin()->displayDebugger(m_activeEngine, updateEngine);
+        plugin()->displayDebugger(d->m_activeEngine, updateEngine);
     }
 }
 
 void QmlCppEngine::setToolTipExpression(const QPoint & mousePos,
         TextEditor::ITextEditor *editor, int cursorPos)
 {
-    m_activeEngine->setToolTipExpression(mousePos, editor, cursorPos);
+    d->m_activeEngine->setToolTipExpression(mousePos, editor, cursorPos);
 }
 
-void QmlCppEngine::updateWatchData(const WatchData &data, const WatchUpdateFlags &flags)
+void QmlCppEngine::updateWatchData(const Internal::WatchData &data, const Internal::WatchUpdateFlags &flags)
 {
-    m_activeEngine->updateWatchData(data, flags);
+    d->m_activeEngine->updateWatchData(data, flags);
 }
 
 void QmlCppEngine::watchPoint(const QPoint &point)
 {
-    m_cppEngine->watchPoint(point);
+    d->m_cppEngine->watchPoint(point);
 }
 
-void QmlCppEngine::fetchMemory(MemoryViewAgent *mva, QObject *obj,
+void QmlCppEngine::fetchMemory(Internal::MemoryViewAgent *mva, QObject *obj,
         quint64 addr, quint64 length)
 {
-    m_cppEngine->fetchMemory(mva, obj, addr, length);
+    d->m_cppEngine->fetchMemory(mva, obj, addr, length);
 }
 
-void QmlCppEngine::fetchDisassembler(DisassemblerViewAgent *dva)
+void QmlCppEngine::fetchDisassembler(Internal::DisassemblerViewAgent *dva)
 {
-    m_cppEngine->fetchDisassembler(dva);
+    d->m_cppEngine->fetchDisassembler(dva);
 }
 
 void QmlCppEngine::activateFrame(int index)
 {
-    m_cppEngine->activateFrame(index);
+    d->m_cppEngine->activateFrame(index);
 }
 
 void QmlCppEngine::reloadModules()
 {
-    m_cppEngine->reloadModules();
+    d->m_cppEngine->reloadModules();
 }
 
 void QmlCppEngine::examineModules()
 {
-    m_cppEngine->examineModules();
+    d->m_cppEngine->examineModules();
 }
 
 void QmlCppEngine::loadSymbols(const QString &moduleName)
 {
-    m_cppEngine->loadSymbols(moduleName);
+    d->m_cppEngine->loadSymbols(moduleName);
 }
 
 void QmlCppEngine::loadAllSymbols()
 {
-    m_cppEngine->loadAllSymbols();
+    d->m_cppEngine->loadAllSymbols();
 }
 
 void QmlCppEngine::requestModuleSymbols(const QString &moduleName)
 {
-    m_cppEngine->requestModuleSymbols(moduleName);
+    d->m_cppEngine->requestModuleSymbols(moduleName);
 }
 
 void QmlCppEngine::reloadRegisters()
 {
-    m_cppEngine->reloadRegisters();
+    d->m_cppEngine->reloadRegisters();
 }
 
 void QmlCppEngine::reloadSourceFiles()
 {
-    m_cppEngine->reloadSourceFiles();
+    d->m_cppEngine->reloadSourceFiles();
 }
 
 void QmlCppEngine::reloadFullStack()
 {
-    m_cppEngine->reloadFullStack();
+    d->m_cppEngine->reloadFullStack();
 }
 
 void QmlCppEngine::setRegisterValue(int regnr, const QString &value)
 {
-    m_cppEngine->setRegisterValue(regnr, value);
+    d->m_cppEngine->setRegisterValue(regnr, value);
 }
 
 unsigned QmlCppEngine::debuggerCapabilities() const
 {
     // ### this could also be an OR of both engines' capabilities
-    return m_cppEngine->debuggerCapabilities();
+    return d->m_cppEngine->debuggerCapabilities();
 }
 
 bool QmlCppEngine::isSynchronous() const
 {
-    return m_activeEngine->isSynchronous();
+    return d->m_activeEngine->isSynchronous();
 }
 
 QByteArray QmlCppEngine::qtNamespace() const
 {
-    return m_cppEngine->qtNamespace();
+    return d->m_cppEngine->qtNamespace();
 }
 
 void QmlCppEngine::createSnapshot()
 {
-    m_cppEngine->createSnapshot();
+    d->m_cppEngine->createSnapshot();
 }
 
 void QmlCppEngine::updateAll()
 {
-    m_activeEngine->updateAll();
+    d->m_activeEngine->updateAll();
 }
 
 void QmlCppEngine::attemptBreakpointSynchronization()
 {
-    m_cppEngine->attemptBreakpointSynchronization();
-    static_cast<DebuggerEngine*>(m_qmlEngine)->attemptBreakpointSynchronization();
+    d->m_cppEngine->attemptBreakpointSynchronization();
+    static_cast<DebuggerEngine*>(d->m_qmlEngine)->attemptBreakpointSynchronization();
 }
 
 void QmlCppEngine::selectThread(int index)
 {
-    m_cppEngine->selectThread(index);
+    d->m_cppEngine->selectThread(index);
 }
 
 void QmlCppEngine::assignValueInDebugger(const QString &expr, const QString &value)
 {
-    m_activeEngine->assignValueInDebugger(expr, value);
+    d->m_activeEngine->assignValueInDebugger(expr, value);
 }
 
 QAbstractItemModel *QmlCppEngine::commandModel() const
 {
-    return m_activeEngine->commandModel();
+    return d->m_activeEngine->commandModel();
 }
 
 QAbstractItemModel *QmlCppEngine::modulesModel() const
 {
-    return m_cppEngine->modulesModel();
+    return d->m_cppEngine->modulesModel();
 }
 
 QAbstractItemModel *QmlCppEngine::breakModel() const
 {
-    return m_activeEngine->breakModel();
+    return d->m_activeEngine->breakModel();
 }
 
 QAbstractItemModel *QmlCppEngine::registerModel() const
 {
-    return m_cppEngine->registerModel();
+    return d->m_cppEngine->registerModel();
 }
 
 QAbstractItemModel *QmlCppEngine::stackModel() const
 {
-    return m_activeEngine->stackModel();
+    return d->m_activeEngine->stackModel();
 }
 
 QAbstractItemModel *QmlCppEngine::threadsModel() const
 {
-    return m_cppEngine->threadsModel();
+    return d->m_cppEngine->threadsModel();
 }
 
 QAbstractItemModel *QmlCppEngine::localsModel() const
 {
-    return m_activeEngine->localsModel();
+    return d->m_activeEngine->localsModel();
 }
 
 QAbstractItemModel *QmlCppEngine::watchersModel() const
 {
-    return m_activeEngine->watchersModel();
+    return d->m_activeEngine->watchersModel();
 }
 
 QAbstractItemModel *QmlCppEngine::returnModel() const
 {
-    return m_cppEngine->returnModel();
+    return d->m_cppEngine->returnModel();
 }
 
 QAbstractItemModel *QmlCppEngine::sourceFilesModel() const
 {
-    return m_cppEngine->sourceFilesModel();
+    return d->m_cppEngine->sourceFilesModel();
 }
 
 void QmlCppEngine::detachDebugger()
 {
-    m_qmlEngine->detachDebugger();
-    m_cppEngine->detachDebugger();
+    d->m_qmlEngine->detachDebugger();
+    d->m_cppEngine->detachDebugger();
 }
 
 void QmlCppEngine::executeStep()
 {
-    m_activeEngine->executeStep();
+    d->m_activeEngine->executeStep();
 }
 
 void QmlCppEngine::executeStepOut()
 {
-    m_activeEngine->executeStepOut();
+    d->m_activeEngine->executeStepOut();
 }
 
 void QmlCppEngine::executeNext()
 {
-    m_activeEngine->executeNext();
+    d->m_activeEngine->executeNext();
 }
 
 void QmlCppEngine::executeStepI()
 {
-    m_activeEngine->executeStepI();
+    d->m_activeEngine->executeStepI();
 }
 
 void QmlCppEngine::executeNextI()
 {
-    m_activeEngine->executeNextI();
+    d->m_activeEngine->executeNextI();
 }
 
 void QmlCppEngine::executeReturn()
 {
-    m_activeEngine->executeReturn();
+    d->m_activeEngine->executeReturn();
 }
 
 void QmlCppEngine::continueInferior()
 {
-    m_activeEngine->continueInferior();
+    d->m_activeEngine->continueInferior();
 }
 
 void QmlCppEngine::interruptInferior()
 {
-    m_activeEngine->interruptInferior();
+    d->m_activeEngine->interruptInferior();
 }
 
 void QmlCppEngine::requestInterruptInferior()
 {
-    m_activeEngine->requestInterruptInferior();
+    d->m_activeEngine->requestInterruptInferior();
 }
 
 void QmlCppEngine::executeRunToLine(const QString &fileName, int lineNumber)
 {
-    m_activeEngine->executeRunToLine(fileName, lineNumber);
+    d->m_activeEngine->executeRunToLine(fileName, lineNumber);
 }
 
 void QmlCppEngine::executeRunToFunction(const QString &functionName)
 {
-    m_activeEngine->executeRunToFunction(functionName);
+    d->m_activeEngine->executeRunToFunction(functionName);
 }
 
 void QmlCppEngine::executeJumpToLine(const QString &fileName, int lineNumber)
 {
-    m_activeEngine->executeJumpToLine(fileName, lineNumber);
+    d->m_activeEngine->executeJumpToLine(fileName, lineNumber);
 }
 
 void QmlCppEngine::executeDebuggerCommand(const QString &command)
 {
-    m_activeEngine->executeDebuggerCommand(command);
+    d->m_activeEngine->executeDebuggerCommand(command);
 }
 
 void QmlCppEngine::frameUp()
 {
-    m_activeEngine->frameUp();
+    d->m_activeEngine->frameUp();
 }
 
 void QmlCppEngine::frameDown()
 {
-    m_activeEngine->frameDown();
+    d->m_activeEngine->frameDown();
 }
 
 void QmlCppEngine::notifyInferiorRunOk()
@@ -352,7 +373,7 @@ void QmlCppEngine::notifyInferiorRunOk()
 
 void QmlCppEngine::setupEngine()
 {
-    m_cppEngine->startDebugger(runControl());
+    d->m_cppEngine->startDebugger(runControl());
 }
 
 void QmlCppEngine::setupInferior()
@@ -369,40 +390,40 @@ void QmlCppEngine::runEngine()
 void QmlCppEngine::shutdownInferior()
 {
     // user wants to stop inferior: always use cpp engine for this.
-    if (m_activeEngine == m_qmlEngine) {
-        m_activeEngine = m_cppEngine;
+    if (d->m_activeEngine == d->m_qmlEngine) {
+        d->m_activeEngine = d->m_cppEngine;
 
         // we end up in this state after trying to shut down while debugging qml.
         // b/c qml does not shutdown by itself, restore previous state and continue.
-        if (m_qmlEngine->state() == InferiorShutdownRequested) {
-            m_qmlEngine->setState(InferiorStopOk, true);
+        if (d->m_qmlEngine->state() == InferiorShutdownRequested) {
+            d->m_qmlEngine->setState(InferiorStopOk, true);
         }
 
-        if (m_qmlEngine->state() == InferiorStopOk) {
-            m_qmlEngine->continueInferior();
+        if (d->m_qmlEngine->state() == InferiorStopOk) {
+            d->m_qmlEngine->continueInferior();
         }
     }
-    if (m_cppEngine->state() == InferiorRunOk) {
+    if (d->m_cppEngine->state() == InferiorRunOk) {
         // first interrupt c++ engine; when done, we can shutdown.
-        m_shutdownDeferred = true;
-        m_cppEngine->requestInterruptInferior();
+        d->m_shutdownDeferred = true;
+        d->m_cppEngine->requestInterruptInferior();
     }
-    if (!m_shutdownDeferred)
-        m_cppEngine->shutdownInferior();
+    if (!d->m_shutdownDeferred)
+        d->m_cppEngine->shutdownInferior();
 }
 
 void QmlCppEngine::shutdownEngine()
 {
-    m_cppEngine->shutdownEngine();
-    m_qmlEngine->shutdownEngineAsSlave();
+    d->m_cppEngine->shutdownEngine();
+    d->m_qmlEngine->shutdownEngineAsSlave();
     notifyEngineShutdownOk();
 }
 
 void QmlCppEngine::finishDebugger()
 {
-    if (!m_shutdownDone) {
-        m_shutdownDone = true;
-        if (m_shutdownOk) {
+    if (!d->m_shutdownDone) {
+        d->m_shutdownDone = true;
+        if (d->m_shutdownOk) {
             notifyEngineShutdownOk();
         } else {
             notifyEngineShutdownFailed();
@@ -418,7 +439,7 @@ void QmlCppEngine::setupSlaveEngineOnTimer()
 void QmlCppEngine::setupSlaveEngine()
 {
     if (state() == InferiorRunRequested)
-        m_qmlEngine->startDebugger(runControl());
+        d->m_qmlEngine->startDebugger(runControl());
 }
 
 void QmlCppEngine::masterEngineStateChanged(const DebuggerState &newState)
@@ -463,9 +484,9 @@ void QmlCppEngine::masterEngineStateChanged(const DebuggerState &newState)
         break;
 
     case InferiorRunOk:
-        if (m_qmlEngine->state() == DebuggerNotReady) {
-            if (m_isInitialStartup) {
-                m_isInitialStartup = false;
+        if (d->m_qmlEngine->state() == DebuggerNotReady) {
+            if (d->m_isInitialStartup) {
+                d->m_isInitialStartup = false;
                 setupSlaveEngineOnTimer();
             } else {
                 setupSlaveEngine();
@@ -483,7 +504,7 @@ void QmlCppEngine::masterEngineStateChanged(const DebuggerState &newState)
         if (state() == InferiorRunRequested) {
             // if stopping on startup, move on to normal state
             // and go forward. Also, stop connection and continue later if needed.
-            m_qmlEngine->pauseConnection();
+            d->m_qmlEngine->pauseConnection();
             setState(EngineRunRequested, true);
             notifyEngineRunAndInferiorRunOk();
             setState(newState);
@@ -501,25 +522,25 @@ void QmlCppEngine::masterEngineStateChanged(const DebuggerState &newState)
             setState(newState);
         } else if (state() == InferiorRunOk) {
             // if we break on CPP side while running & engine is QML, switch.
-            if (m_activeEngine == m_qmlEngine) {
+            if (d->m_activeEngine == d->m_qmlEngine) {
                 setActiveEngine(CppLanguage);
             }
             setState(newState);
         } else if (state() == InferiorRunRequested) {
             setState(newState, true);
         }
-        if (m_shutdownDeferred) {
-            m_activeEngine = m_cppEngine;
-            m_shutdownDeferred = false;
+        if (d->m_shutdownDeferred) {
+            d->m_activeEngine = d->m_cppEngine;
+            d->m_shutdownDeferred = false;
             shutdownInferior();
         }
         break;
 
     case InferiorStopFailed:
         setState(newState);
-        if (m_shutdownDeferred) {
-            m_activeEngine = m_cppEngine;
-            m_shutdownDeferred = false;
+        if (d->m_shutdownDeferred) {
+            d->m_activeEngine = d->m_cppEngine;
+            d->m_shutdownDeferred = false;
             shutdownInferior();
         }
         break;
@@ -528,22 +549,22 @@ void QmlCppEngine::masterEngineStateChanged(const DebuggerState &newState)
     // but due to everything being asyncronous, we cannot guarantee
     // that it is shut down completely before gdb engine is shut down.
     case InferiorShutdownRequested:
-        if (m_activeEngine == m_qmlEngine) {
-            m_activeEngine = m_cppEngine;
+        if (d->m_activeEngine == d->m_qmlEngine) {
+            d->m_activeEngine = d->m_cppEngine;
         }
 
-        m_qmlEngine->shutdownInferiorAsSlave();
+        d->m_qmlEngine->shutdownInferiorAsSlave();
         setState(newState);
         break;
 
     case InferiorShutdownOk:
         setState(newState);
-        m_qmlEngine->shutdownEngineAsSlave();
+        d->m_qmlEngine->shutdownEngineAsSlave();
         break;
 
     case InferiorShutdownFailed:
         setState(newState);
-        m_qmlEngine->shutdownEngineAsSlave();
+        d->m_qmlEngine->shutdownEngineAsSlave();
         break;
 
     case EngineShutdownRequested:
@@ -555,7 +576,7 @@ void QmlCppEngine::masterEngineStateChanged(const DebuggerState &newState)
         break;
 
     case EngineShutdownFailed:
-        m_shutdownOk = false;
+        d->m_shutdownOk = false;
         finishDebugger();
         break;
 
@@ -568,7 +589,7 @@ void QmlCppEngine::slaveEngineStateChanged(const DebuggerState &newState)
 {
     //qDebug() << "  qml engine changed to" << newState;
 
-    if (m_activeEngine == m_qmlEngine) {
+    if (d->m_activeEngine == d->m_qmlEngine) {
         handleSlaveEngineStateChangeAsActive(newState);
     } else {
         handleSlaveEngineStateChange(newState);
@@ -604,7 +625,7 @@ void QmlCppEngine::handleSlaveEngineStateChange(const DebuggerState &newState)
         break;
 
     case EngineShutdownFailed:
-        m_shutdownOk = false;
+        d->m_shutdownOk = false;
         break;
 
     default:
@@ -634,7 +655,7 @@ void QmlCppEngine::handleSlaveEngineStateChangeAsActive(const DebuggerState &new
         break;
 
     case InferiorShutdownRequested:
-        if (m_cppEngine->state() == InferiorRunOk) {
+        if (d->m_cppEngine->state() == InferiorRunOk) {
             // occurs when user presses stop button from debugger UI.
             shutdownInferior();
         }
@@ -645,5 +666,9 @@ void QmlCppEngine::handleSlaveEngineStateChangeAsActive(const DebuggerState &new
     }
 }
 
-} // namespace Internal
+DebuggerEngine *QmlCppEngine::cppEngine() const
+{
+    return d->m_cppEngine;
+}
+
 } // namespace Debugger
diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h
index 3723347d73e..258bad3e26f 100644
--- a/src/plugins/debugger/qml/qmlcppengine.h
+++ b/src/plugins/debugger/qml/qmlcppengine.h
@@ -3,33 +3,33 @@
 
 #include "debuggerengine.h"
 
+#include <QtCore/QScopedPointer>
+
 namespace Core {
 class IEditor;
 }
 
 namespace Debugger {
-namespace Internal {
 
-class GdbEngine;
-class QmlEngine;
+struct QmlCppEnginePrivate;
 
 class DEBUGGER_EXPORT QmlCppEngine : public DebuggerEngine
 {
     Q_OBJECT
 public:
-    QmlCppEngine(const DebuggerStartParameters &sp);
+    explicit QmlCppEngine(const DebuggerStartParameters &sp);
     virtual ~QmlCppEngine();
 
     void setActiveEngine(DebuggerLanguage language);
 
     virtual void setToolTipExpression(const QPoint & /* mousePos */,
             TextEditor::ITextEditor * /* editor */, int /* cursorPos */);
-    virtual void updateWatchData(const WatchData & /* data */, const WatchUpdateFlags &flags);
+    virtual void updateWatchData(const Internal::WatchData & /* data */, const Internal::WatchUpdateFlags &flags);
 
     virtual void watchPoint(const QPoint &);
-    virtual void fetchMemory(MemoryViewAgent *, QObject *,
+    virtual void fetchMemory(Internal::MemoryViewAgent *, QObject *,
             quint64 addr, quint64 length);
-    virtual void fetchDisassembler(DisassemblerViewAgent *);
+    virtual void fetchDisassembler(Internal::DisassemblerViewAgent *);
     virtual void activateFrame(int index);
 
     virtual void reloadModules();
@@ -67,7 +67,7 @@ public:
     QAbstractItemModel *returnModel() const;
     QAbstractItemModel *sourceFilesModel() const;
 
-    DebuggerEngine *cppEngine() const { return m_cppEngine; }
+    DebuggerEngine *cppEngine() const;
 
 protected:
     virtual void detachDebugger();
@@ -111,16 +111,9 @@ private:
     void handleSlaveEngineStateChangeAsActive(const DebuggerState &newState);
 
 private:
-    QmlEngine *m_qmlEngine;
-    DebuggerEngine *m_cppEngine;
-    DebuggerEngine *m_activeEngine;
-    bool m_shutdownOk;
-    bool m_shutdownDeferred;
-    bool m_shutdownDone;
-    bool m_isInitialStartup;
+    QScopedPointer<QmlCppEnginePrivate> d;
 };
 
-} // namespace Internal
 } // namespace Debugger
 
 #endif // QMLGDBENGINE_H
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index d54a934c035..bc9dc96cd49 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -47,6 +47,7 @@
 
 #include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/environment.h>
+#include <projectexplorer/applicationlauncher.h>
 
 #include <utils/qtcassert.h>
 
@@ -96,6 +97,28 @@ QDataStream& operator>>(QDataStream& s, WatchData &data)
     return s;
 }
 
+} // namespace Internal
+
+struct QmlEnginePrivate {
+    explicit QmlEnginePrivate(QmlEngine *q);
+
+    int m_ping;
+    QmlAdapter *m_adapter;
+    ProjectExplorer::ApplicationLauncher m_applicationLauncher;
+    bool m_addedAdapterToObjectPool;
+    bool m_attachToRunningExternalApp;
+    bool m_hasShutdown;
+};
+
+QmlEnginePrivate::QmlEnginePrivate(QmlEngine *q) :
+  m_ping(0)
+, m_adapter(new QmlAdapter(q))
+, m_addedAdapterToObjectPool(false)
+, m_attachToRunningExternalApp(false)
+, m_hasShutdown(false)
+{
+}
+
 ///////////////////////////////////////////////////////////////////////
 //
 // QmlEngine
@@ -103,12 +126,7 @@ QDataStream& operator>>(QDataStream& s, WatchData &data)
 ///////////////////////////////////////////////////////////////////////
 
 QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters)
-    : DebuggerEngine(startParameters)
-    , m_ping(0)
-    , m_adapter(new QmlAdapter(this))
-    , m_addedAdapterToObjectPool(false)
-    , m_attachToRunningExternalApp(false)
-    , m_hasShutdown(false)
+    : DebuggerEngine(startParameters), d(new QmlEnginePrivate(this))
 {
     setObjectName(QLatin1String("QmlEngine"));
 }
@@ -119,12 +137,12 @@ QmlEngine::~QmlEngine()
 
 void QmlEngine::setAttachToRunningExternalApp(bool value)
 {
-    m_attachToRunningExternalApp = value;
+    d->m_attachToRunningExternalApp = value;
 }
 
 void QmlEngine::pauseConnection()
 {
-    m_adapter->pauseConnection();
+    d->m_adapter->pauseConnection();
 }
 
 void QmlEngine::gotoLocation(const QString &fileName, int lineNumber, bool setMarker)
@@ -137,9 +155,9 @@ void QmlEngine::gotoLocation(const QString &fileName, int lineNumber, bool setMa
     DebuggerEngine::gotoLocation(processedFilename, lineNumber, setMarker);
 }
 
-void QmlEngine::gotoLocation(const StackFrame &frame, bool setMarker)
+void QmlEngine::gotoLocation(const Internal::StackFrame &frame, bool setMarker)
 {
-    StackFrame adjustedFrame = frame;
+    Internal::StackFrame adjustedFrame = frame;
     if (isShadowBuildProject())
         adjustedFrame.file = fromShadowBuildFilename(frame.file);
 
@@ -150,17 +168,17 @@ void QmlEngine::setupInferior()
 {
     QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
 
-    connect(&m_applicationLauncher, SIGNAL(processExited(int)),
+    connect(&d->m_applicationLauncher, SIGNAL(processExited(int)),
             this, SLOT(disconnected()));
-    connect(&m_applicationLauncher, SIGNAL(appendMessage(QString,bool)),
-            this, SLOT(slotMessage(QString, bool)));
-    connect(&m_applicationLauncher, SIGNAL(appendOutput(QString, bool)),
-            this, SLOT(slotAddToOutputWindow(QString, bool)));
-    connect(&m_applicationLauncher, SIGNAL(bringToForegroundRequested(qint64)),
+    connect(&d->m_applicationLauncher, SIGNAL(appendMessage(QString,bool)),
+            runControl(), SLOT(emitAppendMessage(QString,bool)));
+    connect(&d->m_applicationLauncher, SIGNAL(appendOutput(QString, bool)),
+            runControl(), SLOT(emitAddToOutputWindow(QString, bool)));
+    connect(&d->m_applicationLauncher, SIGNAL(bringToForegroundRequested(qint64)),
             runControl(), SLOT(bringApplicationToForeground(qint64)));
 
-    m_applicationLauncher.setEnvironment(startParameters().environment);
-    m_applicationLauncher.setWorkingDirectory(startParameters().workingDirectory);
+    d->m_applicationLauncher.setEnvironment(startParameters().environment);
+    d->m_applicationLauncher.setWorkingDirectory(startParameters().workingDirectory);
 
     notifyInferiorSetupOk();
 }
@@ -170,9 +188,9 @@ void QmlEngine::connectionEstablished()
     attemptBreakpointSynchronization();
 
     ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance();
-    pluginManager->addObject(m_adapter);
+    pluginManager->addObject(d->m_adapter);
     pluginManager->addObject(this);
-    m_addedAdapterToObjectPool = true;
+    d->m_addedAdapterToObjectPool = true;
 
     plugin()->showMessage(tr("QML Debugger connected."), StatusBar);
 
@@ -199,13 +217,13 @@ void QmlEngine::runEngine()
 {
     QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
 
-    if (!m_attachToRunningExternalApp) {
-        m_applicationLauncher.start(ProjectExplorer::ApplicationLauncher::Gui,
+    if (!d->m_attachToRunningExternalApp) {
+        d->m_applicationLauncher.start(ProjectExplorer::ApplicationLauncher::Gui,
                                     startParameters().executable,
                                     startParameters().processArgs);
     }
 
-    m_adapter->beginConnection();
+    d->m_adapter->beginConnection();
     plugin()->showMessage(tr("QML Debugger connecting..."), StatusBar);
 }
 
@@ -226,45 +244,45 @@ void QmlEngine::shutdownInferiorAsSlave()
 
 void QmlEngine::shutdownEngineAsSlave()
 {
-    if (m_hasShutdown)
+    if (d->m_hasShutdown)
         return;
 
-    disconnect(m_adapter, SIGNAL(connectionStartupFailed()), this, SLOT(connectionStartupFailed()));
-    m_adapter->closeConnection();
+    disconnect(d->m_adapter, SIGNAL(connectionStartupFailed()), this, SLOT(connectionStartupFailed()));
+    d->m_adapter->closeConnection();
 
-    if (m_addedAdapterToObjectPool) {
+    if (d->m_addedAdapterToObjectPool) {
         ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance();
-        pluginManager->removeObject(m_adapter);
+        pluginManager->removeObject(d->m_adapter);
         pluginManager->removeObject(this);
     }
 
-    if (m_attachToRunningExternalApp) {
+    if (d->m_attachToRunningExternalApp) {
         setState(EngineShutdownRequested, true);
         setState(EngineShutdownOk, true);
         setState(DebuggerFinished, true);
     } else {
-        if (m_applicationLauncher.isRunning()) {
+        if (d->m_applicationLauncher.isRunning()) {
             // should only happen if engine is ill
-            disconnect(&m_applicationLauncher, SIGNAL(processExited(int)), this, SLOT(disconnected()));
-            m_applicationLauncher.stop();
+            disconnect(&d->m_applicationLauncher, SIGNAL(processExited(int)), this, SLOT(disconnected()));
+            d->m_applicationLauncher.stop();
         }
     }
-    m_hasShutdown = true;
+    d->m_hasShutdown = true;
 }
 
 void QmlEngine::shutdownInferior()
 {
     // don't do normal shutdown if running as slave engine
-    if (m_attachToRunningExternalApp)
+    if (d->m_attachToRunningExternalApp)
         return;
 
     QTC_ASSERT(state() == InferiorShutdownRequested, qDebug() << state());
-    if (!m_applicationLauncher.isRunning()) {
+    if (!d->m_applicationLauncher.isRunning()) {
         showMessage(tr("Trying to stop while process is no longer running."), LogError);
     } else {
-        disconnect(&m_applicationLauncher, SIGNAL(processExited(int)), this, SLOT(disconnected()));
-        if (!m_attachToRunningExternalApp)
-            m_applicationLauncher.stop();
+        disconnect(&d->m_applicationLauncher, SIGNAL(processExited(int)), this, SLOT(disconnected()));
+        if (!d->m_attachToRunningExternalApp)
+            d->m_applicationLauncher.stop();
     }
     notifyInferiorShutdownOk();
 }
@@ -281,12 +299,12 @@ void QmlEngine::shutdownEngine()
 
 void QmlEngine::setupEngine()
 {
-    m_adapter->setMaxConnectionAttempts(MaxConnectionAttempts);
-    m_adapter->setConnectionAttemptInterval(ConnectionAttemptDefaultInterval);
-    connect(m_adapter, SIGNAL(connectionError(QAbstractSocket::SocketError)),
+    d->m_adapter->setMaxConnectionAttempts(MaxConnectionAttempts);
+    d->m_adapter->setConnectionAttemptInterval(ConnectionAttemptDefaultInterval);
+    connect(d->m_adapter, SIGNAL(connectionError(QAbstractSocket::SocketError)),
             SLOT(connectionError(QAbstractSocket::SocketError)));
-    connect(m_adapter, SIGNAL(connected()), SLOT(connectionEstablished()));
-    connect(m_adapter, SIGNAL(connectionStartupFailed()), SLOT(connectionStartupFailed()));
+    connect(d->m_adapter, SIGNAL(connected()), SLOT(connectionEstablished()));
+    connect(d->m_adapter, SIGNAL(connectionStartupFailed()), SLOT(connectionStartupFailed()));
 
     notifyEngineSetupOk();
 }
@@ -397,11 +415,11 @@ void QmlEngine::selectThread(int index)
 
 void QmlEngine::attemptBreakpointSynchronization()
 {
-    BreakHandler *handler = breakHandler();
+    Internal::BreakHandler *handler = breakHandler();
     //bool updateNeeded = false;
     QSet< QPair<QString, qint32> > breakList;
     for (int index = 0; index != handler->size(); ++index) {
-        BreakpointData *data = handler->at(index);
+        Internal::BreakpointData *data = handler->at(index);
         QString processedFilename = data->fileName;
         if (isShadowBuildProject())
             processedFilename = toShadowBuildFilename(data->fileName);
@@ -442,10 +460,6 @@ void QmlEngine::requestModuleSymbols(const QString &moduleName)
 //
 //////////////////////////////////////////////////////////////////////
 
-static WatchData m_toolTip;
-static QPoint m_toolTipPos;
-static QHash<QString, WatchData> m_toolTipCache;
-
 void QmlEngine::setToolTipExpression(const QPoint &mousePos, TextEditor::ITextEditor *editor, int cursorPos)
 {
     // this is processed by QML inspector, which has deps to qml js editor. Makes life easier.
@@ -476,7 +490,7 @@ void QmlEngine::assignValueInDebugger(const QString &expression,
     }
 }
 
-void QmlEngine::updateWatchData(const WatchData &data, const WatchUpdateFlags &)
+void QmlEngine::updateWatchData(const Internal::WatchData &data, const Internal::WatchUpdateFlags &)
 {
 //    qDebug() << "UPDATE WATCH DATA" << data.toString();
     //watchHandler()->rebuildModel();
@@ -517,18 +531,20 @@ void QmlEngine::expandObject(const QByteArray& iname, quint64 objectId)
 
 void QmlEngine::sendPing()
 {
-    m_ping++;
+    d->m_ping++;
     QByteArray reply;
     QDataStream rs(&reply, QIODevice::WriteOnly);
     rs << QByteArray("PING");
-    rs << m_ping;
+    rs << d->m_ping;
     sendMessage(reply);
 }
 
+namespace Internal {
 DebuggerEngine *createQmlEngine(const DebuggerStartParameters &sp)
 {
     return new QmlEngine(sp);
 }
+} // namespace Internal
 
 unsigned QmlEngine::debuggerCapabilities() const
 {
@@ -552,21 +568,21 @@ void QmlEngine::messageReceived(const QByteArray &message)
     QByteArray command;
     stream >> command;
 
-    showMessage(_("RECEIVED RESPONSE: ") + quoteUnprintableLatin1(message));
+    showMessage(QLatin1String("RECEIVED RESPONSE: ") + Internal::quoteUnprintableLatin1(message));
     if (command == "STOPPED") {
         if (state() == InferiorRunOk) {
             notifyInferiorSpontaneousStop();
         }
 
         QList<QPair<QString, QPair<QString, qint32> > > backtrace;
-        QList<WatchData> watches;
-        QList<WatchData> locals;
+        QList<Internal::WatchData> watches;
+        QList<Internal::WatchData> locals;
         stream >> backtrace >> watches >> locals;
 
-        StackFrames stackFrames;
+        Internal::StackFrames stackFrames;
         typedef QPair<QString, QPair<QString, qint32> > Iterator;
         foreach (const Iterator &it, backtrace) {
-            StackFrame frame;
+            Internal::StackFrame frame;
             frame.file = it.second.first;
             frame.line = it.second.second;
             frame.function = it.first;
@@ -579,7 +595,7 @@ void QmlEngine::messageReceived(const QByteArray &message)
         watchHandler()->beginCycle();
         bool needPing = false;
 
-        foreach (WatchData data, watches) {
+        foreach (Internal::WatchData data, watches) {
             data.iname = watchHandler()->watcherName(data.exp);
             watchHandler()->insertData(data);
 
@@ -589,7 +605,7 @@ void QmlEngine::messageReceived(const QByteArray &message)
             }
         }
 
-        foreach (WatchData data, locals) {
+        foreach (Internal::WatchData data, locals) {
             data.iname = "local." + data.exp;
             watchHandler()->insertData(data);
 
@@ -618,7 +634,7 @@ void QmlEngine::messageReceived(const QByteArray &message)
 
 
     } else if (command == "RESULT") {
-        WatchData data;
+        Internal::WatchData data;
         QByteArray iname;
         stream >> iname >> data;
         data.iname = iname;
@@ -630,11 +646,11 @@ void QmlEngine::messageReceived(const QByteArray &message)
             qWarning() << "QmlEngine: Unexcpected result: " << iname << data.value;
         }
     } else if (command == "EXPANDED") {
-        QList<WatchData> result;
+        QList<Internal::WatchData> result;
         QByteArray iname;
         stream >> iname >> result;
         bool needPing = false;
-        foreach (WatchData data, result) {
+        foreach (Internal::WatchData data, result) {
             data.iname = iname + '.' + data.exp;
             watchHandler()->insertData(data);
 
@@ -646,12 +662,12 @@ void QmlEngine::messageReceived(const QByteArray &message)
         if (needPing)
             sendPing();
     } else if (command == "LOCALS") {
-        QList<WatchData> locals;
+        QList<Internal::WatchData> locals;
         int frameId;
         stream >> frameId >> locals;
         watchHandler()->beginCycle();
         bool needPing = false;
-        foreach (WatchData data, locals) {
+        foreach (Internal::WatchData data, locals) {
             data.iname = "local." + data.exp;
             watchHandler()->insertData(data);
             if (watchHandler()->expandedINames().contains(data.iname)) {
@@ -667,7 +683,7 @@ void QmlEngine::messageReceived(const QByteArray &message)
     } else if (command == "PONG") {
         int ping;
         stream >> ping;
-        if (ping == m_ping)
+        if (ping == d->m_ping)
             watchHandler()->endCycle();
     } else {
         qDebug() << Q_FUNC_INFO << "Unknown command: " << command;
@@ -681,17 +697,6 @@ void QmlEngine::disconnected()
     notifyInferiorExited();
 }
 
-void QmlEngine::slotAddToOutputWindow(QString line, bool onStdErr)
-{
-    emit runControl()->addToOutputWindowInline(runControl(), line, onStdErr);
-}
-
-void QmlEngine::slotMessage(QString err , bool isError)
-{
-    emit runControl()->appendMessage(runControl(), err, isError);
-}
-
-
 void QmlEngine::executeDebuggerCommand(const QString& command)
 {
     QByteArray reply;
@@ -769,6 +774,5 @@ QString QmlEngine::fromShadowBuildFilename(const QString &filename) const
     return newFilename;
 }
 
-} // namespace Internal
 } // namespace Debugger
 
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index 76da03384c8..7b5960151a3 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -32,32 +32,13 @@
 
 #include "debuggerengine.h"
 
-#include <QtCore/QByteArray>
-#include <QtCore/QHash>
-#include <QtCore/QObject>
-#include <QtCore/QPoint>
-#include <QtCore/QProcess>
-#include <QtCore/QQueue>
-#include <QtCore/QTimer>
-#include <QtCore/QVariant>
-
+#include <QtCore/QScopedPointer>
 #include <QtNetwork/QAbstractSocket>
-#include <QtNetwork/QTcpSocket>
-
-#include <projectexplorer/applicationlauncher.h>
-
-namespace Core {
-    class TextEditor;
-}
 
 namespace Debugger {
-namespace Internal {
-
-class ScriptAgent;
-class WatchData;
 class QmlAdapter;
-class QmlResponse;
-class QmlDebuggerClient;
+
+struct QmlEnginePrivate;
 
 class DEBUGGER_EXPORT QmlEngine : public DebuggerEngine
 {
@@ -65,14 +46,14 @@ class DEBUGGER_EXPORT QmlEngine : public DebuggerEngine
 
 public:
     explicit QmlEngine(const DebuggerStartParameters &startParameters);
-    ~QmlEngine();
+    virtual ~QmlEngine();
 
     void setAttachToRunningExternalApp(bool value);
     void shutdownInferiorAsSlave();
     void shutdownEngineAsSlave();
     void pauseConnection();
     void gotoLocation(const QString &fileName, int lineNumber, bool setMarker);
-    void gotoLocation(const StackFrame &frame, bool setMarker);
+    void gotoLocation(const Internal::StackFrame &frame, bool setMarker);
 
 public slots:
     void messageReceived(const QByteArray &message);
@@ -117,7 +98,7 @@ private:
     void reloadFullStack() {}
 
     bool supportsThreads() const { return false; }
-    void updateWatchData(const WatchData &data, const WatchUpdateFlags &flags);
+    void updateWatchData(const Internal::WatchData &data, const Internal::WatchUpdateFlags &flags);
     void executeDebuggerCommand(const QString& command);
 
     unsigned int debuggerCapabilities() const;
@@ -131,8 +112,6 @@ private slots:
     void connectionStartupFailed();
     void connectionError(QAbstractSocket::SocketError error);
 
-    void slotMessage(QString, bool);
-    void slotAddToOutputWindow(QString, bool);
 private:
     void expandObject(const QByteArray &iname, quint64 objectId);
     void sendPing();
@@ -146,15 +125,9 @@ private:
 private:
     friend class QmlCppEngine;
 
-    int m_ping;
-    QmlAdapter *m_adapter;
-    ProjectExplorer::ApplicationLauncher m_applicationLauncher;
-    bool m_addedAdapterToObjectPool;
-    bool m_attachToRunningExternalApp;
-    bool m_hasShutdown;
+    QScopedPointer<QmlEnginePrivate> d;
 };
 
-} // namespace Internal
 } // namespace Debugger
 
 #endif // DEBUGGER_QMLENGINE_H
diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h
index 740acc0d152..b24174d56d5 100644
--- a/src/plugins/debugger/registerhandler.h
+++ b/src/plugins/debugger/registerhandler.h
@@ -34,10 +34,9 @@
 #include <QtCore/QVector>
 
 namespace Debugger {
-namespace Internal {
-
 class DebuggerEngine;
 
+namespace Internal {
 class Register
 {
 public:
diff --git a/src/plugins/debugger/script/scriptengine.h b/src/plugins/debugger/script/scriptengine.h
index fe6572e025c..7aa58d01303 100644
--- a/src/plugins/debugger/script/scriptengine.h
+++ b/src/plugins/debugger/script/scriptengine.h
@@ -52,13 +52,13 @@ class WatchData;
  * processEvents() triggered by QScriptEngine::setProcessEventsInterval().
  * Stopping is emulated by manually calling processEvents() from the debugger engine. */
 
-class ScriptEngine : public DebuggerEngine
+class ScriptEngine : public Debugger::DebuggerEngine
 {
     Q_OBJECT
 
 public:
-    ScriptEngine(const DebuggerStartParameters &startParameters);
-    ~ScriptEngine();
+    explicit ScriptEngine(const DebuggerStartParameters &startParameters);
+    virtual ~ScriptEngine();
 
 private:
     // DebuggerEngine implementation
diff --git a/src/plugins/debugger/snapshothandler.h b/src/plugins/debugger/snapshothandler.h
index 1e437815daf..9967a9c0bf6 100644
--- a/src/plugins/debugger/snapshothandler.h
+++ b/src/plugins/debugger/snapshothandler.h
@@ -36,11 +36,9 @@
 namespace Debugger {
 
 class DebuggerRunControl;
-
-namespace Internal {
-
 class DebuggerEngine;
 
+namespace Internal {
 
 ////////////////////////////////////////////////////////////////////////
 //
diff --git a/src/plugins/debugger/sourcefileshandler.h b/src/plugins/debugger/sourcefileshandler.h
index 3e32ed3cf8b..6be37adebd9 100644
--- a/src/plugins/debugger/sourcefileshandler.h
+++ b/src/plugins/debugger/sourcefileshandler.h
@@ -36,10 +36,10 @@
 
 
 namespace Debugger {
-namespace Internal {
-
 class DebuggerEngine;
 
+namespace Internal {
+
 class SourceFilesHandler : public QAbstractItemModel
 {
     Q_OBJECT
diff --git a/src/plugins/debugger/stackhandler.h b/src/plugins/debugger/stackhandler.h
index 1cbda98ad21..56737603e10 100644
--- a/src/plugins/debugger/stackhandler.h
+++ b/src/plugins/debugger/stackhandler.h
@@ -37,11 +37,11 @@
 
 #include <QtGui/QIcon>
 
-
 namespace Debugger {
+class DebuggerEngine;
+
 namespace Internal {
 
-class DebuggerEngine;
 class DisassemblerViewAgent;
 
 ////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins/debugger/tcf/tcfengine.h b/src/plugins/debugger/tcf/tcfengine.h
index 2ab8db8a014..a6172652d91 100644
--- a/src/plugins/debugger/tcf/tcfengine.h
+++ b/src/plugins/debugger/tcf/tcfengine.h
@@ -56,7 +56,7 @@ namespace Internal {
 class ScriptAgent;
 class WatchData;
 
-class TcfEngine : public DebuggerEngine
+class TcfEngine : public Debugger::DebuggerEngine
 {
     Q_OBJECT
 
diff --git a/src/plugins/debugger/threadshandler.h b/src/plugins/debugger/threadshandler.h
index c237c1ccd56..6815dafc1ae 100644
--- a/src/plugins/debugger/threadshandler.h
+++ b/src/plugins/debugger/threadshandler.h
@@ -37,10 +37,10 @@
 
 
 namespace Debugger {
-namespace Internal {
-
 class DebuggerEngine;
 
+namespace Internal {
+
 ////////////////////////////////////////////////////////////////////////
 //
 // ThreadData
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 85e8f671bda..42380f8fac3 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -40,9 +40,10 @@
 #include <QtCore/QAbstractItemModel>
 
 namespace Debugger {
+class DebuggerEngine;
+
 namespace Internal {
 
-class DebuggerEngine;
 class WatchItem;
 class WatchHandler;
 class WatchData;
diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.cpp b/src/plugins/qmljsinspector/qmljsclientproxy.cpp
index 4ca4a1d4923..33765aae231 100644
--- a/src/plugins/qmljsinspector/qmljsclientproxy.cpp
+++ b/src/plugins/qmljsinspector/qmljsclientproxy.cpp
@@ -46,7 +46,7 @@
 
 using namespace QmlJSInspector::Internal;
 
-ClientProxy::ClientProxy(Debugger::Internal::QmlAdapter *adapter, QObject *parent)
+ClientProxy::ClientProxy(Debugger::QmlAdapter *adapter, QObject *parent)
     : QObject(parent)
     , m_adapter(adapter)
     , m_client(m_adapter->client())
@@ -511,7 +511,7 @@ void ClientProxy::updateEngineList()
     emit enginesChanged();
 }
 
-Debugger::Internal::QmlAdapter *ClientProxy::qmlAdapter() const
+Debugger::QmlAdapter *ClientProxy::qmlAdapter() const
 {
     return m_adapter;
 }
diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.h b/src/plugins/qmljsinspector/qmljsclientproxy.h
index 245e04c7160..88c1771537d 100644
--- a/src/plugins/qmljsinspector/qmljsclientproxy.h
+++ b/src/plugins/qmljsinspector/qmljsclientproxy.h
@@ -36,10 +36,8 @@
 QT_FORWARD_DECLARE_CLASS(QUrl)
 
 namespace Debugger {
-namespace Internal {
 class QmlAdapter;
 }
-}
 
 namespace QmlJSInspector {
 
@@ -56,7 +54,7 @@ class ClientProxy : public QObject
     Q_OBJECT
 
 public:
-    explicit ClientProxy(Debugger::Internal::QmlAdapter *adapter, QObject *parent = 0);
+    explicit ClientProxy(Debugger::QmlAdapter *adapter, QObject *parent = 0);
 
     bool setBindingForObject(int objectDebugId,
                              const QString &propertyName,
@@ -82,7 +80,7 @@ public:
 
     QList<QDeclarativeDebugEngineReference> engines() const;
 
-    Debugger::Internal::QmlAdapter *qmlAdapter() const;
+    Debugger::QmlAdapter *qmlAdapter() const;
 
 signals:
     void objectTreeUpdated();
@@ -147,7 +145,7 @@ private:
     Q_DISABLE_COPY(ClientProxy);
     void buildDebugIdHashRecursive(const QDeclarativeDebugObjectReference &ref);
 
-    Debugger::Internal::QmlAdapter *m_adapter;
+    Debugger::QmlAdapter *m_adapter;
     QDeclarativeEngineDebug *m_client;
     QmlJSDesignDebugClient *m_designClient;
 
diff --git a/src/plugins/qmljsinspector/qmljsinspector.cpp b/src/plugins/qmljsinspector/qmljsinspector.cpp
index fc2d5957a1c..a62f916f3f4 100644
--- a/src/plugins/qmljsinspector/qmljsinspector.cpp
+++ b/src/plugins/qmljsinspector/qmljsinspector.cpp
@@ -164,7 +164,7 @@ void InspectorUi::restoreSettings()
     m_settings->restoreSettings(Core::ICore::instance()->settings());
 }
 
-void InspectorUi::setDebuggerEngine(Debugger::Internal::QmlEngine *qmlEngine)
+void InspectorUi::setDebuggerEngine(Debugger::QmlEngine *qmlEngine)
 {
     if (m_qmlEngine && !qmlEngine) {
         disconnect(m_qmlEngine, SIGNAL(tooltipRequested(QPoint, TextEditor::ITextEditor*, int)),
@@ -178,7 +178,7 @@ void InspectorUi::setDebuggerEngine(Debugger::Internal::QmlEngine *qmlEngine)
     }
 }
 
-Debugger::Internal::QmlEngine *InspectorUi::debuggerEngine() const
+Debugger::QmlEngine *InspectorUi::debuggerEngine() const
 {
     return m_qmlEngine;
 }
diff --git a/src/plugins/qmljsinspector/qmljsinspector.h b/src/plugins/qmljsinspector/qmljsinspector.h
index 8f1006fed74..494b0fde913 100644
--- a/src/plugins/qmljsinspector/qmljsinspector.h
+++ b/src/plugins/qmljsinspector/qmljsinspector.h
@@ -60,10 +60,8 @@ namespace QmlJS {
 }
 
 namespace Debugger {
-namespace Internal {
     class QmlEngine;
 }
-}
 
 QT_FORWARD_DECLARE_CLASS(QDockWidget)
 
@@ -107,8 +105,8 @@ public:
     void setupUi();
     void connected(ClientProxy *clientProxy);
     void disconnected();
-    void setDebuggerEngine(Debugger::Internal::QmlEngine *qmlEngine);
-    Debugger::Internal::QmlEngine *debuggerEngine() const;
+    void setDebuggerEngine(Debugger::QmlEngine *qmlEngine);
+    Debugger::QmlEngine *debuggerEngine() const;
 
 signals:
     void statusMessage(const QString &text);
@@ -160,7 +158,7 @@ private:
 
     InspectorSettings *m_settings;
     ClientProxy *m_clientProxy;
-    Debugger::Internal::QmlEngine *m_qmlEngine;
+    Debugger::QmlEngine *m_qmlEngine;
     QDeclarativeDebugExpressionQuery *m_debugQuery;
 
     // Qml/JS integration
diff --git a/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp b/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp
index bff091ab214..189db441138 100644
--- a/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp
+++ b/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp
@@ -127,14 +127,14 @@ void InspectorPlugin::extensionsInitialized()
 // so we can immediately init our stuff.
 void InspectorPlugin::objectAdded(QObject *object)
 {
-    Debugger::Internal::QmlAdapter *adapter = qobject_cast<Debugger::Internal::QmlAdapter *>(object);
+    Debugger::QmlAdapter *adapter = qobject_cast<Debugger::QmlAdapter *>(object);
     if (adapter) {
         m_clientProxy = new ClientProxy(adapter);
         m_inspectorUi->connected(m_clientProxy);
         return;
     }
 
-    Debugger::Internal::QmlEngine *engine = qobject_cast<Debugger::Internal::QmlEngine*>(object);
+    Debugger::QmlEngine *engine = qobject_cast<Debugger::QmlEngine*>(object);
     if (engine) {
         m_inspectorUi->setDebuggerEngine(engine);
     }
-- 
GitLab