From f8c50013822bcf4119b88dada985c6d58fe27999 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Thu, 23 Sep 2010 14:13:03 +0200 Subject: [PATCH] Remove the QmlJSEditor dependency from Qt4ProjectManager. The Qt4ProjectManager now uses metacalls to inform the QmlJSModelManager about the project data. Done-with: hjk --- src/libs/extensionsystem/pluginmanager.h | 11 +++++++++++ src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 1 + src/libs/qmljs/qmljsmodelmanagerinterface.h | 6 ++++-- src/plugins/plugins.pro | 1 - src/plugins/qmljseditor/qmljsmodelmanager.h | 2 +- .../Qt4ProjectManager.pluginspec | 1 - src/plugins/qt4projectmanager/qt4project.cpp | 15 ++++++++++++--- .../qt4projectmanager_dependencies.pri | 1 - 8 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index d371dfe30c9..ebb2ad16fc2 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -90,6 +90,17 @@ public: return result; } + QObject *getObjectByName(const QString &name) const + { + QReadLocker lock(&m_lock); + QList<QObject *> all = allObjects(); + foreach (QObject *obj, all) { + if (obj->objectName() == name) + return obj; + } + return 0; + } + // Plugin operations QList<PluginSpec *> loadQueue(); void loadPlugins(); diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index fbd340587e3..902c986da1d 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -38,6 +38,7 @@ ModelManagerInterface::ModelManagerInterface(QObject *parent) { Q_ASSERT(! g_instance); g_instance = this; + setObjectName(MODELMANAGERINTERFACE_OBJECTNAME); } ModelManagerInterface::~ModelManagerInterface() diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index 896878bceb7..f7d4742dc9c 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.h +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h @@ -44,6 +44,8 @@ namespace ProjectExplorer { namespace QmlJS { +const char *const MODELMANAGERINTERFACE_OBJECTNAME = "QmlJS::ModelManagerInterface"; + class Snapshot; class QMLJS_EXPORT ModelManagerInterface: public QObject @@ -89,8 +91,8 @@ public: virtual void removeFiles(const QStringList &files) = 0; virtual QList<ProjectInfo> projectInfos() const = 0; - virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0; - virtual void updateProjectInfo(const ProjectInfo &pinfo) = 0; + Q_INVOKABLE virtual QmlJS::ModelManagerInterface::ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0; + Q_INVOKABLE virtual void updateProjectInfo(const QmlJS::ModelManagerInterface::ProjectInfo &pinfo) = 0; virtual QStringList importPaths() const = 0; diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 9702fb785d5..c126c4ebb6c 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -126,7 +126,6 @@ plugin_qt4projectmanager.depends = plugin_texteditor plugin_qt4projectmanager.depends += plugin_projectexplorer plugin_qt4projectmanager.depends += plugin_cpptools plugin_qt4projectmanager.depends += plugin_cppeditor -plugin_qt4projectmanager.depends += plugin_qmljseditor plugin_qt4projectmanager.depends += plugin_designer plugin_qt4projectmanager.depends += plugin_debugger plugin_qt4projectmanager.depends += plugin_qmljseditor diff --git a/src/plugins/qmljseditor/qmljsmodelmanager.h b/src/plugins/qmljseditor/qmljsmodelmanager.h index 1de9ef992bb..54449674ccc 100644 --- a/src/plugins/qmljseditor/qmljsmodelmanager.h +++ b/src/plugins/qmljseditor/qmljsmodelmanager.h @@ -60,7 +60,7 @@ public: virtual void removeFiles(const QStringList &files); virtual QList<ProjectInfo> projectInfos() const; - virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const; + virtual QmlJS::ModelManagerInterface::ProjectInfo projectInfo(ProjectExplorer::Project *project) const; virtual void updateProjectInfo(const ProjectInfo &pinfo); void emitDocumentUpdated(QmlJS::Document::Ptr doc); diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec index 906f6c3ece3..fd8fd1f2263 100644 --- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec +++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec @@ -18,7 +18,6 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General <dependency name="ProjectExplorer" version="2.0.90"/> <dependency name="CppTools" version="2.0.90"/> <dependency name="CppEditor" version="2.0.90"/> - <dependency name="QmlJSEditor" version="2.0.90"/> <dependency name="Designer" version="2.0.90"/> <dependency name="Debugger" version="2.0.90"/> </dependencyList> diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 907276b280e..98137567ce7 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -584,11 +584,17 @@ void Qt4Project::updateCppCodeModel() void Qt4Project::updateQmlJSCodeModel() { - QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance(); + QObject *modelManager = + ExtensionSystem::PluginManager::instance()->getObjectByName(QmlJS::MODELMANAGERINTERFACE_OBJECTNAME); if (!modelManager) return; - QmlJS::ModelManagerInterface::ProjectInfo projectInfo = modelManager->projectInfo(this); + QmlJS::ModelManagerInterface::ProjectInfo projectInfo; + bool success = QMetaObject::invokeMethod( + modelManager, "projectInfo", Qt::DirectConnection, + Q_RETURN_ARG(QmlJS::ModelManagerInterface::ProjectInfo, projectInfo), + Q_ARG(ProjectExplorer::Project *, this)); + QTC_ASSERT(success, return); // Not essential since the QmlJS engine parses required files on demand. //projectInfo.sourceFiles = ... @@ -601,7 +607,10 @@ void Qt4Project::updateQmlJSCodeModel() } projectInfo.importPaths.removeDuplicates(); - modelManager->updateProjectInfo(projectInfo); + success = QMetaObject::invokeMethod( + modelManager, "updateProjectInfo", Qt::DirectConnection, + Q_ARG(QmlJS::ModelManagerInterface::ProjectInfo, projectInfo)); + QTC_ASSERT(success, return); } void Qt4Project::qtVersionsChanged() diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri index 7d2124fdded..e40eac29c4b 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri +++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri @@ -1,7 +1,6 @@ include(../../plugins/projectexplorer/projectexplorer.pri) include(../../plugins/cpptools/cpptools.pri) include(../../plugins/cppeditor/cppeditor.pri) -include(../../plugins/qmljseditor/qmljseditor.pri) include(../../plugins/designer/designer.pri) include(../../plugins/debugger/debugger.pri) include(../../libs/symbianutils/symbianutils.pri) -- GitLab