diff options
-rw-r--r-- | src/libs/qmljs/qmljsbundle.cpp | 19 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsbundle.h | 5 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljsbundleprovider.cpp | 29 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljsbundleprovider.h | 9 |
4 files changed, 40 insertions, 22 deletions
diff --git a/src/libs/qmljs/qmljsbundle.cpp b/src/libs/qmljs/qmljsbundle.cpp index c55edcdf5e..e4d536a3da 100644 --- a/src/libs/qmljs/qmljsbundle.cpp +++ b/src/libs/qmljs/qmljsbundle.cpp @@ -7,6 +7,7 @@ #include <QString> #include <QFile> +#include <QRegularExpression> #include <QTextStream> #include <QHash> @@ -186,8 +187,10 @@ QString QmlBundle::toString(const QString &indent) } QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config, - const QString &path, const QString &propertyName, bool required) + const QString &path, const QString &propertyName, + bool required, bool stripVersions) { + static const QRegularExpression versionNumberAtEnd("^(.+)( \\d+\\.\\d+)$"); QStringList res; if (!config->hasMember(propertyName)) { if (required) @@ -202,7 +205,13 @@ QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config, for (Utils::JsonValue *v : elements) { Utils::JsonStringValue *impStr = ((v != nullptr) ? v->toString() : nullptr); if (impStr != nullptr) { - trie.insert(impStr->value()); + QString value = impStr->value(); + if (stripVersions) { + const QRegularExpressionMatch match = versionNumberAtEnd.match(value); + if (match.hasMatch()) + value = match.captured(1); + } + trie.insert(value); } else { res.append(QString::fromLatin1("Expected all elements of array in property \"%1\" " "to be strings in QmlBundle at %2.") @@ -217,7 +226,7 @@ QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config, return res; } -bool QmlBundle::readFrom(QString path, QStringList *errors) +bool QmlBundle::readFrom(QString path, bool stripVersions, QStringList *errors) { Utils::JsonMemoryPool pool; @@ -249,8 +258,8 @@ bool QmlBundle::readFrom(QString path, QStringList *errors) } errs << maybeReadTrie(m_searchPaths, config, path, QLatin1String("searchPaths")); errs << maybeReadTrie(m_installPaths, config, path, QLatin1String("installPaths")); - errs << maybeReadTrie(m_supportedImports, config, path, QLatin1String("supportedImports") - , true); + errs << maybeReadTrie(m_supportedImports, config, path, QLatin1String("supportedImports"), + true, stripVersions); errs << maybeReadTrie(m_implicitImports, config, path, QLatin1String("implicitImports")); if (errors) (*errors) << errs; diff --git a/src/libs/qmljs/qmljsbundle.h b/src/libs/qmljs/qmljsbundle.h index 8cf3145671..5d2058eef4 100644 --- a/src/libs/qmljs/qmljsbundle.h +++ b/src/libs/qmljs/qmljsbundle.h @@ -53,14 +53,15 @@ public: bool writeTo(const QString &path) const; bool writeTo(QTextStream &stream, const QString &indent = QString()) const; QString toString(const QString &indent = QString()); - bool readFrom(QString path, QStringList *errors); + bool readFrom(QString path, bool stripVersions, QStringList *errors); bool operator==(const QmlBundle &o) const; bool operator!=(const QmlBundle &o) const; private: static void printEscaped(QTextStream &s, const QString &str); static void writeTrie(QTextStream &stream, const Trie &t, const QString &indent); QStringList maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config, const QString &path, - const QString &propertyName, bool required = false); + const QString &propertyName, bool required = false, + bool stripVersions = false); QString m_name; Trie m_searchPaths; diff --git a/src/plugins/qmljstools/qmljsbundleprovider.cpp b/src/plugins/qmljstools/qmljsbundleprovider.cpp index f44070b75e..623a6f4684 100644 --- a/src/plugins/qmljstools/qmljsbundleprovider.cpp +++ b/src/plugins/qmljstools/qmljsbundleprovider.cpp @@ -25,7 +25,8 @@ BasicBundleProvider::BasicBundleProvider(QObject *parent) : IBundleProvider(parent) { } -QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName) +QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName, + QtSupport::QtVersion *qtVersion) { static bool wroteErrors = false; QmlBundle res; @@ -37,7 +38,8 @@ QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName) return res; } QStringList errors; - if (!res.readFrom(defaultBundlePath.toString(), &errors) && !wroteErrors) { + bool stripVersions = qtVersion && qtVersion->qtVersion().majorVersion() > 5; + if (!res.readFrom(defaultBundlePath.toString(), stripVersions, &errors) && !wroteErrors) { qWarning() << "BasicBundleProvider: ERROR reading " << defaultBundlePath << " : " << errors; wroteErrors = true; @@ -45,31 +47,31 @@ QmlBundle BasicBundleProvider::defaultBundle(const QString &bundleInfoName) return res; } -QmlBundle BasicBundleProvider::defaultQt5QtQuick2Bundle(bool enhance) +QmlBundle BasicBundleProvider::defaultQt5QtQuick2Bundle(QtSupport::QtVersion *qtVersion) { - QmlBundle result = defaultBundle(QLatin1String("qt5QtQuick2-bundle.json")); - if (!enhance) + QmlBundle result = defaultBundle(QLatin1String("qt5QtQuick2-bundle.json"), qtVersion); + if (!qtVersion || qtVersion->qtVersion().majorVersion() < 6) return result; if (Utils::HostOsInfo::isMacHost()) - result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-macos-bundle.json"))); + result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-macos-bundle.json"), qtVersion)); if (Utils::HostOsInfo::isWindowsHost()) - result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-win-bundle.json"))); + result.merge(defaultBundle(QLatin1String("qt5QtQuick2ext-win-bundle.json"), qtVersion)); return result; } QmlBundle BasicBundleProvider::defaultQbsBundle() { - return defaultBundle(QLatin1String("qbs-bundle.json")); + return defaultBundle(QLatin1String("qbs-bundle.json"), nullptr); } QmlBundle BasicBundleProvider::defaultQmltypesBundle() { - return defaultBundle(QLatin1String("qmltypes-bundle.json")); + return defaultBundle(QLatin1String("qmltypes-bundle.json"), nullptr); } QmlBundle BasicBundleProvider::defaultQmlprojectBundle() { - return defaultBundle(QLatin1String("qmlproject-bundle.json")); + return defaultBundle(QLatin1String("qmlproject-bundle.json"), nullptr); } void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit @@ -84,7 +86,7 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(kit); if (!qtVersion) { - QmlBundle b2(defaultQt5QtQuick2Bundle(false)); + QmlBundle b2(defaultQt5QtQuick2Bundle(qtVersion)); bundles.mergeBundleForLanguage(Dialect::Qml, b2); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2, b2); bundles.mergeBundleForLanguage(Dialect::QmlQtQuick2Ui, b2); @@ -97,17 +99,18 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit qtQuick2Bundles.setNameFilters(QStringList(QLatin1String("*-bundle.json"))); QmlBundle qtQuick2Bundle; QFileInfoList list = qtQuick2Bundles.entryInfoList(); + bool stripVersions = qtVersion->qtVersion().majorVersion() > 5; for (int i = 0; i < list.size(); ++i) { QmlBundle bAtt; QStringList errors; - if (!bAtt.readFrom(list.value(i).filePath(), &errors)) + if (!bAtt.readFrom(list.value(i).filePath(), stripVersions, &errors)) qWarning() << "BasicBundleProvider: ERROR reading " << list[i].filePath() << " : " << errors; qtQuick2Bundle.merge(bAtt); } if (!qtQuick2Bundle.supportedImports().contains(QLatin1String("QtQuick 2."), PersistentTrie::Partial)) { - qtQuick2Bundle.merge(defaultQt5QtQuick2Bundle(qtVersion->qtVersion().majorVersion() >= 6)); + qtQuick2Bundle.merge(defaultQt5QtQuick2Bundle(qtVersion)); } qtQuick2Bundle.replaceVars(myReplacements); bundles.mergeBundleForLanguage(Dialect::Qml, qtQuick2Bundle); diff --git a/src/plugins/qmljstools/qmljsbundleprovider.h b/src/plugins/qmljstools/qmljsbundleprovider.h index 392055b032..d8cd835150 100644 --- a/src/plugins/qmljstools/qmljsbundleprovider.h +++ b/src/plugins/qmljstools/qmljsbundleprovider.h @@ -19,6 +19,10 @@ class QmlLanguageBundles; class QmlBundle; } // namespace QmlJS +namespace QtSupport { +class QtVersion; +} + namespace QmlJSTools { class QMLJSTOOLS_EXPORT IBundleProvider : public QObject @@ -43,8 +47,9 @@ public: void mergeBundlesForKit(ProjectExplorer::Kit *kit, QmlJS::QmlLanguageBundles &bundles, const QHash<QString,QString> &replacements) override; - static QmlJS::QmlBundle defaultBundle(const QString &bundleInfoName); - static QmlJS::QmlBundle defaultQt5QtQuick2Bundle(bool enhance); + static QmlJS::QmlBundle defaultBundle(const QString &bundleInfoName, + QtSupport::QtVersion *qtVersion); + static QmlJS::QmlBundle defaultQt5QtQuick2Bundle(QtSupport::QtVersion *qtVersion); static QmlJS::QmlBundle defaultQbsBundle(); static QmlJS::QmlBundle defaultQmltypesBundle(); static QmlJS::QmlBundle defaultQmlprojectBundle(); |