diff options
Diffstat (limited to 'src/libs/qmljs/qmljsplugindumper.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsplugindumper.cpp | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp index c5ba42c13e..7ada84f28b 100644 --- a/src/libs/qmljs/qmljsplugindumper.cpp +++ b/src/libs/qmljs/qmljsplugindumper.cpp @@ -25,6 +25,7 @@ #include "qmljsplugindumper.h" #include "qmljsmodelmanagerinterface.h" +#include "qmljsutils.h" #include <qmljs/qmljsinterpreter.h> #include <qmljs/qmljsviewercontext.h> @@ -401,48 +402,35 @@ void PluginDumper::loadQmlTypeDescription(const QStringList &paths, /*! * \brief Build the path of an existing qmltypes file from a module name. * \param name - * \return the module's qmltypes file path + * \return the module's qmltypes file path or an empty string if not found * * Look for \a name qmltypes file in model manager's import paths. - * For each import path the following files are searched, in this order: - * - * - <name>.<major>.<minor>/plugins.qmltypes - * - <name>.<major>/plugins.qmltypes - * - <name>/plugins.qmltypes - * - * That means that a more qualified directory name has precedence over a - * less qualified one. Be aware that the import paths order has a stronger - * precedence, so a less qualified name could shadow a more qualified one if - * it resides in a different import path. * + * \sa QmlJs::modulePath * \sa LinkPrivate::importNonFile */ QString PluginDumper::buildQmltypesPath(const QString &name) const { QString qualifiedName; - QString majorVersion; - QString minorVersion; + QString version; QRegularExpression import("^(?<name>[\\w|\\.]+)\\s+(?<major>\\d+)\\.(?<minor>\\d+)$"); QRegularExpressionMatch m = import.match(name); if (m.hasMatch()) { qualifiedName = m.captured("name"); - majorVersion = m.captured("major"); - minorVersion = m.captured("minor"); + version = m.captured("major") + QLatin1Char('.') + m.captured("minor"); } - for (const PathAndLanguage &p: m_modelManager->importPaths()) { - QString moduleName = qualifiedName.replace(QLatin1Char('.'), QLatin1Char('/')); - QString moduleNameMajor = moduleName + QLatin1Char('.') + majorVersion; - QString moduleNameMajorMinor = moduleNameMajor + QLatin1Char('.') + minorVersion; + const QString path = modulePath(qualifiedName, version, m_modelManager->importPathsNames()); + + if (path.isEmpty()) + return QString(); + + const QString filename = path + QLatin1String("/plugins.qmltypes"); + + if (QFile::exists(filename)) + return filename; - for (const auto n: QStringList{moduleNameMajorMinor, moduleNameMajor, moduleName}) { - QString filename(p.path().toString() + QLatin1Char('/') + n - + QLatin1String("/plugins.qmltypes")); - if (QFile::exists(filename)) - return filename; - } - } return QString(); } |