From e9fd078e458faa422734ce78b220fb0d43e56e1a Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Wed, 10 Nov 2010 16:21:05 +0100
Subject: [PATCH] Getting the QmlJsModelManager working stand alone

Getting the QmlJsModelManager working stand alone
for auto testing

Reviewed-by: Christian Kamm
---
 src/plugins/qmljstools/qmljsmodelmanager.cpp | 62 ++++++++++++++------
 1 file changed, 43 insertions(+), 19 deletions(-)

diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index cd694114c84..be5501eaffe 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -79,8 +79,10 @@ ModelManager::ModelManager(QObject *parent):
 
 void ModelManager::loadQmlTypeDescriptions()
 {
-    loadQmlTypeDescriptions(Core::ICore::instance()->resourcePath());
-    loadQmlTypeDescriptions(Core::ICore::instance()->userResourcePath());
+    if (Core::ICore::instance()) {
+        loadQmlTypeDescriptions(Core::ICore::instance()->resourcePath());
+        loadQmlTypeDescriptions(Core::ICore::instance()->userResourcePath());
+    }
 }
 
 void ModelManager::loadQmlTypeDescriptions(const QString &resourcePath)
@@ -104,6 +106,9 @@ void ModelManager::loadQmlTypeDescriptions(const QString &resourcePath)
 ModelManagerInterface::WorkingCopy ModelManager::workingCopy() const
 {
     WorkingCopy workingCopy;
+    if (!m_core)
+        return workingCopy;
+
     Core::EditorManager *editorManager = m_core->editorManager();
 
     foreach (Core::IEditor *editor, editorManager->openedEditors()) {
@@ -257,16 +262,21 @@ void ModelManager::updateLibraryInfo(const QString &path, const LibraryInfo &inf
 
 static QStringList qmlFilesInDirectory(const QString &path)
 {
-    // ### It would suffice to build pattern once. This function needs to be thread-safe.
-    Core::MimeDatabase *db = Core::ICore::instance()->mimeDatabase();
-    Core::MimeType jsSourceTy = db->findByType(Constants::JS_MIMETYPE);
-    Core::MimeType qmlSourceTy = db->findByType(Constants::QML_MIMETYPE);
-
     QStringList pattern;
-    foreach (const Core::MimeGlobPattern &glob, jsSourceTy.globPatterns())
-        pattern << glob.regExp().pattern();
-    foreach (const Core::MimeGlobPattern &glob, qmlSourceTy.globPatterns())
-        pattern << glob.regExp().pattern();
+    if (Core::ICore::instance()) {
+        // ### It would suffice to build pattern once. This function needs to be thread-safe.
+        Core::MimeDatabase *db = Core::ICore::instance()->mimeDatabase();
+        Core::MimeType jsSourceTy = db->findByType(Constants::JS_MIMETYPE);
+        Core::MimeType qmlSourceTy = db->findByType(Constants::QML_MIMETYPE);
+
+        QStringList pattern;
+        foreach (const Core::MimeGlobPattern &glob, jsSourceTy.globPatterns())
+            pattern << glob.regExp().pattern();
+        foreach (const Core::MimeGlobPattern &glob, qmlSourceTy.globPatterns())
+            pattern << glob.regExp().pattern();
+    } else {
+        pattern << "*.qml" << "*.js";
+    }
 
     QStringList files;
 
@@ -363,9 +373,14 @@ void ModelManager::parse(QFutureInterface<void> &future,
                             ModelManager *modelManager,
                             bool emitDocChangedOnDisk)
 {
-    Core::MimeDatabase *db = Core::ICore::instance()->mimeDatabase();
-    Core::MimeType jsSourceTy = db->findByType(QLatin1String("application/javascript"));
-    Core::MimeType qmlSourceTy = db->findByType(QLatin1String("application/x-qml"));
+    Core::MimeDatabase *db = 0;
+    Core::MimeType jsSourceTy;
+    Core::MimeType qmlSourceTy;
+    if (Core::ICore::instance()) {
+        db = Core::ICore::instance()->mimeDatabase();
+        jsSourceTy = db->findByType(QLatin1String("application/javascript"));
+        qmlSourceTy = db->findByType(QLatin1String("application/x-qml"));
+    }
 
     int progressRange = files.size();
     future.setProgressRange(0, progressRange);
@@ -381,15 +396,24 @@ void ModelManager::parse(QFutureInterface<void> &future,
         const QString fileName = files.at(i);
 
         const QFileInfo fileInfo(fileName);
-        Core::MimeType fileMimeTy = db->findByFile(fileInfo);
+        Core::MimeType fileMimeTy;
 
         bool isQmlFile = true;
 
-        if (matchesMimeType(fileMimeTy, jsSourceTy))
-            isQmlFile = false;
+        if (db) {
+            fileMimeTy = db->findByFile(fileInfo);
+
+            if (matchesMimeType(fileMimeTy, jsSourceTy))
+                isQmlFile = false;
 
-        else if (! matchesMimeType(fileMimeTy, qmlSourceTy))
-            continue; // skip it. it's not a QML or a JS file.
+            else if (! matchesMimeType(fileMimeTy, qmlSourceTy))
+                continue; // skip it. it's not a QML or a JS file.
+        } else {
+            if (fileName.contains(QLatin1String(".js"), Qt::CaseInsensitive))
+                isQmlFile = false;
+            else if (!fileName.contains(QLatin1String(".qml"), Qt::CaseInsensitive))
+                continue;
+        }
 
         QString contents;
         int documentRevision = 0;
-- 
GitLab