From ca57a394f46856274d73bdd7201a4cb373aea086 Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Thu, 21 Nov 2013 11:26:18 +0100 Subject: [PATCH] qmljs: fix import cache correct update of m_importCache Change-Id: I70a2c6777c8f0e8df7b130fcff96cd67f83ca3e4 Reviewed-by: Thomas Hartmann --- src/libs/qmljs/qmljsimportdependencies.cpp | 35 +++++++++++++++------- src/libs/qmljs/qmljsimportdependencies.h | 2 ++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp index 712442c2c3d..dffcf8ee4b7 100644 --- a/src/libs/qmljs/qmljsimportdependencies.cpp +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -719,10 +719,15 @@ void ImportDependencies::addCoreImport(const CoreImport &import) CoreImport newImport = import; if (m_coreImports.contains(import.importId)) { CoreImport oldVal = m_coreImports.value(import.importId); - foreach (const Export &e, oldVal.possibleExports) - if (!e.intrinsic) + foreach (const Export &e, oldVal.possibleExports) { + if (e.intrinsic) + removeImportCacheEntry(e.exportName, import.importId); + else newImport.possibleExports.append(e); + } } + foreach (const Export &e, import.possibleExports) + m_importCache[e.exportName].append(import.importId); m_coreImports.insert(newImport.importId, newImport); if (debugImportDependencies) { QDebug dbg(qDebug()); @@ -741,16 +746,30 @@ void ImportDependencies::removeCoreImport(const QString &importId) CoreImport &cImport = m_coreImports[importId]; QList newExports; foreach (const Export &e, cImport.possibleExports) - if (!e.intrinsic) + if (e.intrinsic) + removeImportCacheEntry(e.exportName, importId); + else newExports.append(e); if (newExports.size()>0) cImport.possibleExports = newExports; else m_coreImports.remove(importId); + if (debugImportDependencies) qDebug() << "removed import with id:"<< importId; } +void ImportDependencies::removeImportCacheEntry(const ImportKey &importKey, const QString &importId) +{ + QStringList &cImp = m_importCache[importKey]; + if (!cImp.removeOne(importId)) { + qDebug() << "missing possibleExport backpointer for " << importKey.toString() << " to " + << importId; + } + if (cImp.isEmpty()) + m_importCache.remove(importKey); +} + void ImportDependencies::addExport(const QString &importId, const ImportKey &importKey, const QString &requiredPath) { @@ -759,10 +778,12 @@ void ImportDependencies::addExport(const QString &importId, const ImportKey &imp newImport.language = Language::Unknown; newImport.possibleExports.append(Export(importKey, requiredPath, false)); m_coreImports.insert(newImport.importId, newImport); + m_importCache[importKey].append(importId); return; } CoreImport &importValue = m_coreImports[importId]; importValue.possibleExports.append(Export(importKey, requiredPath, false)); + m_importCache[importKey].append(importId); if (debugImportDependencies) qDebug() << "added export "<< importKey.toString() << " for id " < libraryImports(const ViewerContext &viewContext) const; QSet subdirImports(const ImportKey &baseKey, const ViewerContext &viewContext) const; private: + void removeImportCacheEntry(const ImportKey &importKey, const QString &importId); + QMap m_importCache; QMap m_coreImports; };