aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2020-02-24 20:25:43 +0100
committerIvan Komissarov <ABBAPOH@gmail.com>2020-02-26 20:23:50 +0000
commite5f115d256361359917614b34886e09d04c766f0 (patch)
tree5758a9c642137eda2d3b34b5c668fa2856aaaece /src
parent6e6510d47d61cd8b26f77b6cc83eb98acf0d2e44 (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.cpp27
-rw-r--r--src/lib/corelib/language/moduleloader.h1
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,