summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-08-26 13:31:18 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-08-30 12:00:44 +0200
commit650b280b308809a2f0c748cb2ad591046dc372fd (patch)
treec983fb256a9687e14df6deffbfbb6a5958033989 /src
parentc264f5b23c95f7177921d747e8bb9317be81dec8 (diff)
downloadqt-creator-650b280b308809a2f0c748cb2ad591046dc372fd.tar.gz
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>
Diffstat (limited to 'src')
-rw-r--r--src/libs/qmljs/qmljsmodelmanagerinterface.h1
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp19
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.h1
3 files changed, 21 insertions, 0 deletions
diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h
index c021341e5d..891350c68a 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 bc4c1cfc94..47292d489b 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 a6803a008f..fd00825a88 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);