diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/corelib/loader/dependenciesresolver.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/lib/corelib/loader/dependenciesresolver.cpp b/src/lib/corelib/loader/dependenciesresolver.cpp index b46ed44a0..2110e3254 100644 --- a/src/lib/corelib/loader/dependenciesresolver.cpp +++ b/src/lib/corelib/loader/dependenciesresolver.cpp @@ -993,21 +993,30 @@ void DependenciesResolver::checkForModuleNamePrefixCollision( return; for (const Item::Module &m : m_product.item->modules()) { - if (m.name.length() == dependency.name.length() - || m.name.front() != dependency.name.front()) { + if (m.name.length() == dependency.name.length()) continue; - } + QualifiedId shortName; QualifiedId longName; - if (m.name < dependency.name) { + if (m.name.length() < dependency.name.length()) { shortName = m.name; longName = dependency.name; } else { shortName = dependency.name; longName = m.name; } - throw ErrorInfo(Tr::tr("The name of module '%1' is equal to the first component of the " - "name of module '%2', which is not allowed") + const auto isPrefix = [&] { + for (int i = 0; i < shortName.length(); ++i) { + if (shortName.at(i) != longName.at(i)) + return false; + } + return true; + }; + if (!isPrefix()) + continue; + + throw ErrorInfo(Tr::tr("The name of module '%1' is a prefix of the name of module '%2', " + "which is not allowed") .arg(shortName.toString(), longName.toString()), dependency.location()); } } |