diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index c021341e5d6b0c4f7139e307b7259f376ed492e1..891350c68a79581e84a2b3e0db19dd82a0c25518 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 bc4c1cfc94d26434ff34b88f7bf6c85c7fae9da0..47292d489be21423fad502a0bbb408114e6d72b4 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 a6803a008ff1e836be196fdb953bf0d55d52b257..fd00825a889e42a2163475fa514ee87a3b86879d 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);