diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-02-24 20:25:43 +0100 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2020-02-26 20:23:50 +0000 |
commit | e5f115d256361359917614b34886e09d04c766f0 (patch) | |
tree | 5758a9c642137eda2d3b34b5c668fa2856aaaece /src | |
parent | 6e6510d47d61cd8b26f77b6cc83eb98acf0d2e44 (diff) |
Extract some searchAndLoadModuleFile() code into getModuleFileNames()
To reduce the complexity of this function and make it more readable
Also, avoid triple lookup in the m_moduleDirListCache map
Change-Id: Ia838148593b9781092314fce24844e4db3e257da
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 27 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 1 |
2 files changed, 18 insertions, 10 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 9f3a3a53e..5cd7bbb46 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -3117,22 +3117,18 @@ Item *ModuleLoader::searchAndLoadModuleFile(ProductContext *productContext, if (dirPath.isEmpty()) continue; matchingDirectoryFound = true; - QStringList moduleFileNames = m_moduleDirListCache.value(dirPath); - if (moduleFileNames.empty()) { - QDirIterator dirIter(dirPath, StringConstants::qbsFileWildcards()); - while (dirIter.hasNext()) - moduleFileNames += dirIter.next(); - - m_moduleDirListCache.insert(dirPath, moduleFileNames); - } - for (const QString &filePath : qAsConst(moduleFileNames)) { + QStringList &moduleFileNames = getModuleFileNames(dirPath); + for (auto it = moduleFileNames.begin(), end = moduleFileNames.end(); it != end; ) { + const QString &filePath = *it; triedToLoadModule = true; Item *module = loadModuleFile(productContext, fullName, isBaseModule(moduleName), filePath, &triedToLoadModule, moduleInstance); if (module) candidates.emplace_back(module, 0, i); if (!triedToLoadModule) - m_moduleDirListCache[dirPath].removeOne(filePath); + it = moduleFileNames.erase(it); + else + ++it; } } @@ -3201,6 +3197,17 @@ Item *ModuleLoader::searchAndLoadModuleFile(ProductContext *productContext, return moduleItem; } +QStringList &ModuleLoader::getModuleFileNames(const QString &dirPath) +{ + QStringList &moduleFileNames = m_moduleDirListCache[dirPath]; + if (moduleFileNames.empty()) { + QDirIterator dirIter(dirPath, StringConstants::qbsFileWildcards()); + while (dirIter.hasNext()) + moduleFileNames += dirIter.next(); + } + return moduleFileNames; +} + // returns QVariant::Invalid for types that do not need conversion static QVariant::Type variantType(PropertyDeclaration::Type t) { diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h index 410b2dde2..f4324fa80 100644 --- a/src/lib/corelib/language/moduleloader.h +++ b/src/lib/corelib/language/moduleloader.h @@ -318,6 +318,7 @@ private: Item *searchAndLoadModuleFile(ProductContext *productContext, const CodeLocation &dependsItemLocation, const QualifiedId &moduleName, FallbackMode fallbackMode, bool isRequired, Item *moduleInstance); + QStringList &getModuleFileNames(const QString &dirPath); Item *loadModuleFile(ProductContext *productContext, const QString &fullModuleName, bool isBaseModule, const QString &filePath, bool *triedToLoad, Item *moduleInstance); Item *getModulePrototype(ProductContext *productContext, const QString &fullModuleName, |