From 650b280b308809a2f0c748cb2ad591046dc372fd Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Fri, 26 Aug 2011 13:31:18 +0200 Subject: [PATCH] QmlJS: Ensure project infos are removed when a project closes. As a side effect, this removes parse errors of QML files that are no longer in any project from the "Build Issues" list. Change-Id: I7aef8850a207ac060648dc92e2dd759108b71731 Reviewed-on: http://codereview.qt.nokia.com/3668 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com> --- src/libs/qmljs/qmljsmodelmanagerinterface.h | 1 + src/plugins/qmljstools/qmljsmodelmanager.cpp | 19 +++++++++++++++++++ src/plugins/qmljstools/qmljsmodelmanager.h | 1 + 3 files changed, 21 insertions(+) diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index c021341e5d6..891350c68a7 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.h +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h @@ -131,6 +131,7 @@ public: virtual QList<ProjectInfo> projectInfos() const = 0; virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0; virtual void updateProjectInfo(const ProjectInfo &pinfo) = 0; + Q_SLOT virtual void removeProjectInfo(ProjectExplorer::Project *project) = 0; virtual QStringList importPaths() const = 0; diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index bc4c1cfc94d..47292d489be 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -102,6 +102,12 @@ void ModelManager::delayedInitialization() connect(cppModelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)), this, SLOT(maybeQueueCppQmlTypeUpdate(CPlusPlus::Document::Ptr)), Qt::DirectConnection); } + + ProjectExplorer::SessionManager *sessionManager = ProjectExplorer::ProjectExplorerPlugin::instance()->session(); + if (sessionManager) { + connect(sessionManager, SIGNAL(projectRemoved(ProjectExplorer::Project*)), + this, SLOT(removeProjectInfo(ProjectExplorer::Project*))); + } } void ModelManager::loadQmlTypeDescriptions() @@ -303,6 +309,19 @@ void ModelManager::updateProjectInfo(const ProjectInfo &pinfo) emit projectInfoUpdated(pinfo); } + +void ModelManager::removeProjectInfo(ProjectExplorer::Project *project) +{ + ProjectInfo info(project); + // update with an empty project info to clear data + updateProjectInfo(info); + + { + QMutexLocker locker(&m_mutex); + m_projects.remove(project); + } +} + void ModelManager::emitDocumentChangedOnDisk(Document::Ptr doc) { emit documentChangedOnDisk(doc); } diff --git a/src/plugins/qmljstools/qmljsmodelmanager.h b/src/plugins/qmljstools/qmljsmodelmanager.h index a6803a008ff..fd00825a889 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.h +++ b/src/plugins/qmljstools/qmljsmodelmanager.h @@ -80,6 +80,7 @@ public: virtual QList<ProjectInfo> projectInfos() const; virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const; virtual void updateProjectInfo(const ProjectInfo &pinfo); + Q_SLOT virtual void removeProjectInfo(ProjectExplorer::Project *project); void updateDocument(QmlJS::Document::Ptr doc); void updateLibraryInfo(const QString &path, const QmlJS::LibraryInfo &info); -- GitLab