Move inspector service and QtQuick2 inspector into a common plugin
authorUlf Hermann <ulf.hermann@theqtcompany.com>
Wed, 15 Jul 2015 15:00:22 +0000 (17:00 +0200)
committerUlf Hermann <ulf.hermann@theqtcompany.com>
Tue, 4 Aug 2015 13:35:00 +0000 (13:35 +0000)
The inspector service doesn't do anything useful without the QtQuick2
plugin and vice versa. This way we can also use the
QQmlDebugPluginManager.

Change-Id: I78f154dcc9103ec9ec3d2eda216bfb293231583e
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
21 files changed:
src/plugins/qmltooling/qmldbg_inspector/abstracttool.cpp [moved from src/plugins/qmltooling/shared/abstracttool.cpp with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/abstracttool.h [moved from src/plugins/qmltooling/shared/abstracttool.h with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp [moved from src/plugins/qmltooling/shared/abstractviewinspector.cpp with 99% similarity]
src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.h [moved from src/plugins/qmltooling/shared/abstractviewinspector.h with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/highlight.cpp [moved from src/plugins/qmltooling/qmldbg_qtquick2/highlight.cpp with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/highlight.h [moved from src/plugins/qmltooling/qmldbg_qtquick2/highlight.h with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/inspecttool.cpp [moved from src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.cpp with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/inspecttool.h [moved from src/plugins/qmltooling/qmldbg_qtquick2/inspecttool.h with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro [new file with mode: 0644]
src/plugins/qmltooling/qmldbg_inspector/qqmlinspectorinterface.h [moved from src/qml/debugger/qqmlinspectorinterface_p.h with 91% similarity]
src/plugins/qmltooling/qmldbg_inspector/qqmlinspectorservice.cpp [moved from src/qml/debugger/qqmlinspectorservice.cpp with 65% similarity]
src/plugins/qmltooling/qmldbg_inspector/qqmlinspectorservice.h [moved from src/qml/debugger/qqmlinspectorservice_p.h with 84% similarity]
src/plugins/qmltooling/qmldbg_inspector/qqmlinspectorservice.json [new file with mode: 0644]
src/plugins/qmltooling/qmldbg_inspector/qquickviewinspector.cpp [moved from src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.cpp with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/qquickviewinspector.h [moved from src/plugins/qmltooling/qmldbg_qtquick2/qquickviewinspector.h with 100% similarity]
src/plugins/qmltooling/qmldbg_inspector/qtquick2plugin.cpp [moved from src/plugins/qmltooling/qmldbg_qtquick2/qtquick2plugin.cpp with 97% similarity]
src/plugins/qmltooling/qmldbg_inspector/qtquick2plugin.h [moved from src/plugins/qmltooling/qmldbg_qtquick2/qtquick2plugin.h with 93% similarity]
src/plugins/qmltooling/qmldbg_qtquick2/qmldbg_qtquick2.pro [deleted file]
src/plugins/qmltooling/qmltooling.pro
src/qml/debugger/debugger.pri
src/qml/debugger/qqmldebugconnector.cpp

 
 #include "abstractviewinspector.h"
 #include "abstracttool.h"
+#include "qqmlinspectorservice.h"
 
 #include <QtCore/QDebug>
 #include <QtQml/QQmlEngine>
 #include <QtQml/QQmlComponent>
 #include <QtCore/private/qabstractanimation_p.h>
-#include <QtQml/private/qqmlinspectorservice_p.h>
 #include <QtQml/private/qqmldebugconnector_p.h>
 #include <QtQml/private/qqmlcontext_p.h>
 
diff --git a/src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro b/src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro
new file mode 100644 (file)
index 0000000..3a1de3f
--- /dev/null
@@ -0,0 +1,30 @@
+TARGET = qmldbg_inspector
+QT    += qml-private quick-private core-private gui-private
+
+PLUGIN_TYPE = qmltooling
+PLUGIN_CLASS_NAME = QQmlInspectorServiceFactory
+load(qt_plugin)
+
+INCLUDEPATH *= $$PWD $$PWD/../shared
+
+SOURCES += \
+    $$PWD/qtquick2plugin.cpp \
+    $$PWD/highlight.cpp \
+    $$PWD/qquickviewinspector.cpp \
+    $$PWD/abstracttool.cpp \
+    $$PWD/abstractviewinspector.cpp \
+    $$PWD/inspecttool.cpp \
+    $$PWD/qqmlinspectorservice.cpp
+
+HEADERS += \
+    $$PWD/qtquick2plugin.h \
+    $$PWD/highlight.h \
+    $$PWD/qquickviewinspector.h \
+    $$PWD/qqmlinspectorservice.h \
+    $$PWD/abstracttool.h \
+    $$PWD/abstractviewinspector.h \
+    $$PWD/qqmlinspectorinterface.h \
+    $$PWD/inspecttool.h
+
+OTHER_FILES += \
+    qqmlinspectorservice.json
@@ -50,8 +50,7 @@
 
 QT_BEGIN_NAMESPACE
 
-
-class Q_QML_PRIVATE_EXPORT QQmlInspectorInterface
+class QQmlInspectorInterface
 {
 public:
     QQmlInspectorInterface() {}
@@ -65,10 +64,6 @@ public:
     virtual void clientMessage(const QByteArray &message) = 0;
 };
 
-#define QQmlInspectorInterface_iid "org.qt-project.Qt.QQmlInspectorInterface"
-
-Q_DECLARE_INTERFACE(QQmlInspectorInterface, QQmlInspectorInterface_iid)
-
 QT_END_NAMESPACE
 
 #endif // QQMLINSPECTORINTERFACE_H
@@ -31,8 +31,9 @@
 **
 ****************************************************************************/
 
-#include "qqmlinspectorservice_p.h"
-#include "qqmlinspectorinterface_p.h"
+#include "qqmlinspectorservice.h"
+#include "qqmlinspectorinterface.h"
+#include "qtquick2plugin.h"
 
 #include <private/qqmlglobal_p.h>
 
 #include <QtCore/QDir>
 #include <QtCore/QPluginLoader>
 
-#ifndef QT_NO_LIBRARY
-// print detailed information about loading of plugins
-DEFINE_BOOL_CONFIG_OPTION(qmlDebugVerbose, QML_DEBUGGER_VERBOSE)
-#endif
-
 QT_BEGIN_NAMESPACE
 
-Q_GLOBAL_STATIC(QQmlInspectorServiceImpl, serviceInstance)
-
-QQmlInspectorServiceImpl::QQmlInspectorServiceImpl(): QQmlInspectorService(1),
-    m_currentInspectorPlugin(0)
-{
-}
-
-QQmlInspectorServiceImpl *QQmlInspectorServiceImpl::instance()
+QQmlInspectorServiceImpl::QQmlInspectorServiceImpl(QObject *parent):
+    QQmlInspectorService(1, parent), m_currentInspectorPlugin(0)
 {
-    return serviceInstance();
 }
 
 void QQmlInspectorServiceImpl::addView(QObject *view)
@@ -130,46 +119,12 @@ void QQmlInspectorServiceImpl::processMessage(const QByteArray &message)
 
 void QQmlInspectorServiceImpl::loadInspectorPlugins()
 {
-#ifndef QT_NO_LIBRARY
-    QStringList pluginCandidates;
-    const QStringList paths = QCoreApplication::libraryPaths();
-    foreach (const QString &libPath, paths) {
-        const QDir dir(libPath + QLatin1String("/qmltooling"));
-        if (dir.exists())
-            foreach (const QString &pluginPath, dir.entryList(QDir::Files))
-                pluginCandidates << dir.absoluteFilePath(pluginPath);
-    }
-
-    foreach (const QString &pluginPath, pluginCandidates) {
-        if (qmlDebugVerbose())
-            qDebug() << "QQmlInspector: Trying to load plugin " << pluginPath << "...";
-
-        QPluginLoader loader(pluginPath);
-        if (loader.metaData()[QLatin1String("IID")] !=
-                QLatin1String("org.qt-project.Qt.QQmlInspectorInterface"))
-            continue;
-
-        if (!loader.load()) {
-            if (qmlDebugVerbose())
-                qDebug() << "QQmlInspector: Error while loading: " << loader.errorString();
-
-            continue;
-        }
+    m_inspectorPlugins << new QmlJSDebugger::QtQuick2Plugin;
+}
 
-        QQmlInspectorInterface *inspector =
-                qobject_cast<QQmlInspectorInterface*>(loader.instance());
-        if (inspector) {
-            if (qmlDebugVerbose())
-                qDebug() << "QQmlInspector: Plugin successfully loaded.";
-            m_inspectorPlugins << inspector;
-        } else {
-            if (qmlDebugVerbose())
-                qDebug() << "QQmlInspector: Plugin does not implement interface QQmlInspectorInterface.";
-
-            loader.unload();
-        }
-    }
-#endif
+QQmlDebugService *QQmlInspectorServiceFactory::create(const QString &key)
+{
+    return key == QQmlInspectorServiceImpl::s_key ? new QQmlInspectorServiceImpl(this) : 0;
 }
 
 QT_END_NAMESPACE
@@ -45,8 +45,8 @@
 // We mean it.
 //
 
-#include "qqmldebugservice_p.h"
-#include "qqmldebugserviceinterfaces_p.h"
+#include <private/qqmldebugserviceinterfaces_p.h>
+#include <private/qqmldebugservicefactory_p.h>
 
 #include <QtQml/qtqmlglobal.h>
 #include <QtCore/QList>
@@ -57,13 +57,12 @@ namespace QmlJSDebugger { class AbstractViewInspector; }
 
 class QQmlInspectorInterface;
 
-class Q_QML_PRIVATE_EXPORT QQmlInspectorServiceImpl : public QQmlInspectorService
+class QQmlInspectorServiceImpl : public QQmlInspectorService
 {
     Q_OBJECT
 
 public:
-    QQmlInspectorServiceImpl();
-    static QQmlInspectorServiceImpl *instance();
+    QQmlInspectorServiceImpl(QObject *parent = 0);
 
     void addView(QObject *);
     void removeView(QObject *);
@@ -78,6 +77,7 @@ private Q_SLOTS:
 
 private:
     friend class QmlJSDebugger::AbstractViewInspector;
+    friend class QQmlInspectorServiceFactory;
     void loadInspectorPlugins();
 
     QList<QObject*> m_views;
@@ -85,6 +85,14 @@ private:
     QList<QQmlInspectorInterface*> m_inspectorPlugins;
 };
 
+class QQmlInspectorServiceFactory : public QQmlDebugServiceFactory
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID QQmlDebugServiceFactory_iid FILE "qqmlinspectorservice.json")
+public:
+    QQmlDebugService *create(const QString &key);
+};
+
 QT_END_NAMESPACE
 
 #endif // QQMLINSPECTORSERVICE_H
diff --git a/src/plugins/qmltooling/qmldbg_inspector/qqmlinspectorservice.json b/src/plugins/qmltooling/qmldbg_inspector/qqmlinspectorservice.json
new file mode 100644 (file)
index 0000000..9ace8da
--- /dev/null
@@ -0,0 +1,3 @@
+{
+    "Keys": [ "QmlInspector" ]
+}
@@ -33,9 +33,9 @@
 
 #include "qtquick2plugin.h"
 #include "qquickviewinspector.h"
+#include "qqmlinspectorservice.h"
 
 #include <QtCore/qplugin.h>
-#include <QtQml/private/qqmlinspectorservice_p.h>
 #include <QtQuick/QQuickView>
 
 QT_BEGIN_NAMESPACE
@@ -35,7 +35,7 @@
 #define QTQUICK2PLUGINPLUGIN_H
 
 #include <QtCore/QPointer>
-#include <QtQml/private/qqmlinspectorinterface_p.h>
+#include "qqmlinspectorinterface.h"
 
 QT_BEGIN_NAMESPACE
 
@@ -47,8 +47,6 @@ class QtQuick2Plugin : public QObject, public QQmlInspectorInterface
 {
     Q_OBJECT
     Q_DISABLE_COPY(QtQuick2Plugin)
-    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlInspectorInterface")
-    Q_INTERFACES(QQmlInspectorInterface)
 
 public:
     QtQuick2Plugin();
diff --git a/src/plugins/qmltooling/qmldbg_qtquick2/qmldbg_qtquick2.pro b/src/plugins/qmltooling/qmldbg_qtquick2/qmldbg_qtquick2.pro
deleted file mode 100644 (file)
index 798c512..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-TARGET = qmldbg_qtquick2
-QT       += qml-private quick-private core-private gui-private
-
-PLUGIN_TYPE = qmltooling
-PLUGIN_CLASS_NAME = QtQuick2Plugin
-load(qt_plugin)
-
-INCLUDEPATH *= $$PWD $$PWD/../shared
-
-SOURCES += \
-    qtquick2plugin.cpp \
-    highlight.cpp \
-    qquickviewinspector.cpp \
-    ../shared/abstracttool.cpp \
-    ../shared/abstractviewinspector.cpp \
-    inspecttool.cpp
-
-HEADERS += \
-    qtquick2plugin.h \
-    highlight.h \
-    qquickviewinspector.h \
-    ../shared/abstracttool.h \
-    ../shared/abstractviewinspector.h \
-    inspecttool.h
-
-OTHER_FILES += qtquick2plugin.json
index 64069d1..6af954c 100644 (file)
@@ -5,4 +5,4 @@ SUBDIRS += \
     qmldbg_server \
     qmldbg_tcp
 
-qtHaveModule(quick): SUBDIRS += qmldbg_qtquick2
+qtHaveModule(quick): SUBDIRS += qmldbg_inspector
index 1488a4d..b401216 100644 (file)
@@ -6,7 +6,6 @@ SOURCES += \
     $$PWD/qqmldebugservice.cpp \
     $$PWD/qqmldebugserviceinterfaces.cpp \
     $$PWD/qqmlprofilerservice.cpp \
-    $$PWD/qqmlinspectorservice.cpp \
     $$PWD/qqmlenginedebugservice.cpp \
     $$PWD/qdebugmessageservice.cpp \
     $$PWD/qv4debugservice.cpp \
@@ -24,8 +23,6 @@ HEADERS += \
     $$PWD/qqmlprofilerservice_p.h \
     $$PWD/qqmldebugserviceinterfaces_p.h \
     $$PWD/qqmldebugstatesdelegate_p.h \
-    $$PWD/qqmlinspectorservice_p.h \
-    $$PWD/qqmlinspectorinterface_p.h \
     $$PWD/qqmlenginedebugservice_p.h \
     $$PWD/qqmldebug.h \
     $$PWD/qdebugmessageservice_p.h \
index 72754ec..e1dabb4 100644 (file)
@@ -36,7 +36,6 @@
 #include "qdebugmessageservice_p.h"
 #include "qqmlenginecontrolservice_p.h"
 #include "qqmlenginedebugservice_p.h"
-#include "qqmlinspectorservice_p.h"
 #include "qqmlprofilerservice_p.h"
 #include "qv4debugservice_p.h"
 #include "qqmldebugservicefactory_p.h"
@@ -56,6 +55,8 @@ Q_QML_DEBUG_PLUGIN_LOADER(QQmlDebugConnector)
 Q_QML_IMPORT_DEBUG_PLUGIN(QQmlDebugServerFactory)
 
 Q_QML_DEBUG_PLUGIN_LOADER(QQmlDebugService)
+Q_QML_IMPORT_DEBUG_PLUGIN(QQmlInspectorServiceFactory)
+
 struct QQmlDebugConnectorParams {
     QString pluginKey;
     QString arguments;
@@ -123,7 +124,6 @@ QQmlDebugConnector *QQmlDebugConnector::instance()
             QQmlProfilerServiceImpl::instance();
             QDebugMessageService::instance();
             QQmlEngineControlService::instance();
-            QQmlInspectorServiceImpl::instance();
 
             foreach (const QJsonObject &object, metaDataForQQmlDebugService()) {
                 foreach (const QJsonValue &key, object.value(QLatin1String("MetaData")).toObject()