OSDN Git Service

QmlJS: Fix code model update when project filelist changes.
authorChristian Kamm <christian.d.kamm@nokia.com>
Tue, 9 Nov 2010 13:29:43 +0000 (14:29 +0100)
committerChristian Kamm <christian.d.kamm@nokia.com>
Tue, 9 Nov 2010 13:31:36 +0000 (14:31 +0100)
Task-number: QTCREATORBUG-2986
Reviewed-by: Roberto Raggi
src/plugins/qmljseditor/qmljsmodelmanager.cpp
src/plugins/qt4projectmanager/qt4project.cpp

index 74adffe..f64de79 100644 (file)
@@ -199,12 +199,35 @@ void ModelManager::updateProjectInfo(const ProjectInfo &pinfo)
     if (! pinfo.isValid())
         return;
 
+    Snapshot snapshot;
+    ProjectInfo oldInfo;
     {
         QMutexLocker locker(&m_mutex);
+        oldInfo = m_projects.value(pinfo.project);
         m_projects.insert(pinfo.project, pinfo);
+        snapshot = _snapshot;
     }
 
     updateImportPaths();
+
+    // remove files that are no longer in the project and have been deleted
+    QStringList deletedFiles;
+    foreach (const QString &oldFile, oldInfo.sourceFiles) {
+        if (snapshot.document(oldFile)
+                && !pinfo.sourceFiles.contains(oldFile)
+                && !QFile::exists(oldFile)) {
+            deletedFiles += oldFile;
+        }
+    }
+    removeFiles(deletedFiles);
+
+    // parse any files not yet in the snapshot
+    QStringList newFiles;
+    foreach (const QString &file, pinfo.sourceFiles) {
+        if (!snapshot.document(file))
+            newFiles += file;
+    }
+    updateSourceFiles(newFiles, false);
 }
 
 void ModelManager::emitDocumentChangedOnDisk(Document::Ptr doc)
index 293b834..57e63e1 100644 (file)
@@ -590,9 +590,7 @@ void Qt4Project::updateQmlJSCodeModel()
         return;
 
     QmlJS::ModelManagerInterface::ProjectInfo projectInfo = modelManager->projectInfo(this);
-
-    // Not essential since the QmlJS engine parses required files on demand.
-    //projectInfo.sourceFiles = ...
+    projectInfo.sourceFiles = m_projectFiles->files[QMLType];
 
     FindQt4ProFiles findQt4ProFiles;
     QList<Qt4ProFileNode *> proFiles = findQt4ProFiles(rootProjectNode());