diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-02-24 23:10:03 +0100 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2020-02-27 14:46:50 +0000 |
commit | 75e7f721c9661db4e253298533bf399e8320ed3c (patch) | |
tree | 61f4a10e1b71f3f6dfdb74cc720a9509820090f0 /src | |
parent | 956bf1362c596aaa023147d3f6497dc2500a2429 (diff) |
Extract some code to ModuleLoader::findExistingModulePaths()
This allows to get rid of the matchingDirectoryFound variable to reduce
possible states in the function
Change-Id: I2a86ba7e4e9a35d5c15ae48756c84136c855bcfa
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 25 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 2 |
2 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index f55dbd7e9..55e172117 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -3110,13 +3110,9 @@ Item *ModuleLoader::searchAndLoadModuleFile(ProductContext *productContext, const QString fullName = moduleName.toString(); std::vector<PrioritizedItem> candidates; const QStringList &searchPaths = m_reader->allSearchPaths(); - bool matchingDirectoryFound = false; - for (int i = 0; i < searchPaths.size(); ++i) { - const QString &path = searchPaths.at(i); - const QString dirPath = findExistingModulePath(path, moduleName); - if (dirPath.isEmpty()) - continue; - matchingDirectoryFound = true; + const auto existingPaths = findExistingModulePaths(searchPaths, moduleName); + for (int i = 0; i < existingPaths.size(); ++i) { + const QString &dirPath = existingPaths.at(i); QStringList &moduleFileNames = getModuleFileNames(dirPath); for (auto it = moduleFileNames.begin(); it != moduleFileNames.end(); ) { const QString &filePath = *it; @@ -3134,7 +3130,7 @@ Item *ModuleLoader::searchAndLoadModuleFile(ProductContext *productContext, } if (candidates.empty()) { - if (!matchingDirectoryFound) { + if (existingPaths.isEmpty()) { // no suitable names found, try to use providers bool moduleAlreadyKnown = false; ModuleProviderResult result; for (QualifiedId providerName = moduleName; !providerName.empty(); @@ -3787,6 +3783,19 @@ QString ModuleLoader::findExistingModulePath(const QString &searchPath, return moduleInfo.second = dirPath; } +QStringList ModuleLoader::findExistingModulePaths( + const QStringList &searchPaths, const QualifiedId &moduleName) +{ + QStringList result; + result.reserve(searchPaths.size()); + for (const auto &path: searchPaths) { + const QString dirPath = findExistingModulePath(path, moduleName); + if (!dirPath.isEmpty()) + result.append(dirPath); + } + return result; +} + QVariantMap ModuleLoader::moduleProviderConfig(ModuleLoader::ProductContext &product) { if (product.moduleProviderConfigRetrieved) diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h index f4324fa80..1d8b57207 100644 --- a/src/lib/corelib/language/moduleloader.h +++ b/src/lib/corelib/language/moduleloader.h @@ -340,6 +340,8 @@ private: void copyProperties(const Item *sourceProject, Item *targetProject); Item *wrapInProjectIfNecessary(Item *item); QString findExistingModulePath(const QString &searchPath, const QualifiedId &moduleName); + QStringList findExistingModulePaths( + const QStringList &searchPaths, const QualifiedId &moduleName); enum class ModuleProviderLookup { Regular, Fallback }; struct ModuleProviderResult |