aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2020-02-24 23:10:03 +0100
committerIvan Komissarov <ABBAPOH@gmail.com>2020-02-27 14:46:50 +0000
commit75e7f721c9661db4e253298533bf399e8320ed3c (patch)
tree61f4a10e1b71f3f6dfdb74cc720a9509820090f0 /src
parent956bf1362c596aaa023147d3f6497dc2500a2429 (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.cpp25
-rw-r--r--src/lib/corelib/language/moduleloader.h2
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