diff options
author | Christian Stenger <[email protected]> | 2021-01-11 14:09:51 +0100 |
---|---|---|
committer | Christian Stenger <[email protected]> | 2021-01-21 13:47:45 +0000 |
commit | 6ea088c02f9b0c61a8e9df1472b0ddfe544eb601 (patch) | |
tree | abd63dd75155c225e52d5dea1209ca37bf887c57 /src/libs/qmljs/qmljsutils.cpp | |
parent | 7dc72c533e4bba81ea3126d8cb98840ca746f786 (diff) |
QmlJS: Fix handling multiple import paths into same module
It is possible to import components of different paths to fill
a module.
Take further paths into account when looking up types.
Fixes: QTCREATORBUG-24405
Change-Id: I8d6bf0a324ea9c0d1fe9d91b40857f91f00dd662
Reviewed-by: Ulf Hermann <[email protected]>
Reviewed-by: Fawzi Mohamed <[email protected]>
Diffstat (limited to 'src/libs/qmljs/qmljsutils.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsutils.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/libs/qmljs/qmljsutils.cpp b/src/libs/qmljs/qmljsutils.cpp index 4549bcbdfed..03136e40642 100644 --- a/src/libs/qmljs/qmljsutils.cpp +++ b/src/libs/qmljs/qmljsutils.cpp @@ -233,12 +233,12 @@ bool QmlJS::maybeModuleVersion(const QString &version) { * \return The module paths if found, an empty string otherwise * \see qmlimportscanner in qtdeclarative/tools */ -QString QmlJS::modulePath(const QString &name, const QString &version, - const QStringList &importPaths) +QStringList QmlJS::modulePaths(const QString &name, const QString &version, + const QStringList &importPaths) { Q_ASSERT(maybeModuleVersion(version)); if (importPaths.isEmpty()) - return QString(); + return {}; const QString sanitizedVersion = version == undefinedVersion ? QString() : version; const QStringList parts = name.split('.', Qt::SkipEmptyParts); @@ -249,6 +249,7 @@ QString QmlJS::modulePath(const QString &name, const QString &version, // sanitized version. const QRegularExpression re("\\.?\\d+$"); + QStringList result; QString candidate; for (QString ver = sanitizedVersion; !ver.isEmpty(); ver.remove(re)) { @@ -260,7 +261,7 @@ QString QmlJS::modulePath(const QString &name, const QString &version, ver, mkpath(parts.mid(i + 1)))); if (QDir(candidate).exists()) - return candidate; + result << candidate; } } } @@ -269,10 +270,10 @@ QString QmlJS::modulePath(const QString &name, const QString &version, for (const QString &path: importPaths) { candidate = QDir::cleanPath(QString::fromLatin1("%1/%2").arg(path, mkpath(parts))); if (QDir(candidate).exists()) - return candidate; + result << candidate; } - return QString(); + return result; } bool QmlJS::isValidBuiltinPropertyType(const QString &name) |