diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-10-23 09:14:58 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-10-23 10:14:47 +0000 |
commit | 6371725dbfb7ee6c46e9840dcdebdeba504b56d3 (patch) | |
tree | e3e2a5c5c3493491837e15a5e0e2472572104eca | |
parent | 3b65c0a5d599d169ddad9b86d8f952ada7ff28f1 (diff) | |
download | qt-creator-6371725dbfb7ee6c46e9840dcdebdeba504b56d3.tar.gz |
QmlJS: Clean up ViewerContext
The special ctor wasn't used anywhere, the default ctor can be replaced
by inline initialization, maybeAddPath is only meaningful in the model
manager and the language compatibility check should definitely not
pretend to be a general rule either.
Change-Id: I11cf25fe1c696550d33b56ce57316100321d564b
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | src/libs/qmljs/qmljs-lib.pri | 1 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsimportdependencies.cpp | 38 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 22 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsviewercontext.cpp | 84 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsviewercontext.h | 15 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljsmodelmanager.cpp | 2 |
6 files changed, 51 insertions, 111 deletions
diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri index 47967446bf..c9800eab81 100644 --- a/src/libs/qmljs/qmljs-lib.pri +++ b/src/libs/qmljs/qmljs-lib.pri @@ -70,7 +70,6 @@ SOURCES += \ $$PWD/qmljssimplereader.cpp \ $$PWD/persistenttrie.cpp \ $$PWD/qmljsimportdependencies.cpp \ - $$PWD/qmljsviewercontext.cpp \ $$PWD/qmljsdialect.cpp contains(QT, gui) { diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp index e5d0161665..a438b93a73 100644 --- a/src/libs/qmljs/qmljsimportdependencies.cpp +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -40,6 +40,34 @@ static Q_LOGGING_CATEGORY(importsLog, "qtc.qmljs.imports", QtWarningMsg) namespace QmlJS { +/* + which languages might be imported in this context + */ +static bool languageIsCompatible(Dialect contextLanguage, Dialect importLanguage) +{ + if (importLanguage == Dialect::AnyLanguage && contextLanguage != Dialect::NoLanguage) + return true; + switch (contextLanguage.dialect()) { + case Dialect::JavaScript: + case Dialect::Json: + case Dialect::QmlProject: + case Dialect::QmlQbs: + case Dialect::QmlTypeInfo: + return contextLanguage == importLanguage; + case Dialect::Qml: + return importLanguage == Dialect::Qml || importLanguage == Dialect::QmlQtQuick2 || importLanguage == Dialect::JavaScript; + case Dialect::QmlQtQuick2: + case Dialect::QmlQtQuick2Ui: + return importLanguage == Dialect::Qml || importLanguage == Dialect::QmlQtQuick2 || importLanguage == Dialect::QmlQtQuick2Ui + || importLanguage == Dialect::JavaScript; + case Dialect::AnyLanguage: + return true; + case Dialect::NoLanguage: + break; + } + return false; +} + ImportKind::Enum toImportKind(ImportType::Enum type) { switch (type) { @@ -587,7 +615,7 @@ void ImportDependencies::filter(const ViewerContext &vContext) bool hasChanges = false; for (auto j = m_coreImports.cbegin(), end = m_coreImports.cend(); j != end; ++j) { const CoreImport &cImport = j.value(); - if (vContext.languageIsCompatible(cImport.language)) { + if (languageIsCompatible(vContext.language, cImport.language)) { QList<Export> newExports; foreach (const Export &e, cImport.possibleExports) { if (e.visibleInVContext(vContext)) { @@ -637,7 +665,7 @@ void ImportDependencies::iterateOnCandidateImports( const QStringList imp = m_importCache.value(key.flatKey()); foreach (const QString &cImportName, imp) { CoreImport cImport = coreImport(cImportName); - if (vContext.languageIsCompatible(cImport.language)) { + if (languageIsCompatible(vContext.language, cImport.language)) { foreach (const Export e, cImport.possibleExports) { if (e.visibleInVContext(vContext)) { ImportMatchStrength m = e.exportName.matchImport(key, vContext); @@ -659,7 +687,7 @@ void ImportDependencies::iterateOnCandidateImports( if (c == ImportKey::SameDir) { foreach (const QString &cImportName, lb.value()) { CoreImport cImport = coreImport(cImportName); - if (vContext.languageIsCompatible(cImport.language)) { + if (languageIsCompatible(vContext.language, cImport.language)) { foreach (const Export e, cImport.possibleExports) { if (e.visibleInVContext(vContext)) { ImportMatchStrength m = e.exportName.matchImport(key, vContext); @@ -835,7 +863,7 @@ void ImportDependencies::iterateOnLibraryImports( qCDebug(importsLog) << "libloop:" << i.key().toString() << i.value(); foreach (const QString &cImportName, i.value()) { CoreImport cImport = coreImport(cImportName); - if (vContext.languageIsCompatible(cImport.language)) { + if (languageIsCompatible(vContext.language, cImport.language)) { foreach (const Export &e, cImport.possibleExports) { if (e.visibleInVContext(vContext) && e.exportName.type == ImportType::Library) { ImportMatchStrength m = e.exportName.matchImport(i.key(), vContext); @@ -869,7 +897,7 @@ void ImportDependencies::iterateOnSubImports( break; foreach (const QString &cImportName, i.value()) { CoreImport cImport = coreImport(cImportName); - if (vContext.languageIsCompatible(cImport.language)) { + if (languageIsCompatible(vContext.language, cImport.language)) { foreach (const Export &e, cImport.possibleExports) { if (e.visibleInVContext(vContext)) { ImportMatchStrength m = e.exportName.matchImport(i.key(), vContext); diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index 4453172e8a..e9597e7562 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -81,6 +81,12 @@ static ModelManagerInterface *g_instance = nullptr; const char qtQuickUISuffix[] = "ui.qml"; +static void maybeAddPath(ViewerContext &context, const QString &path) +{ + if (!path.isEmpty() && !context.paths.contains(path)) + context.paths.append(path); +} + static QStringList environmentImportPaths() { QStringList paths; @@ -1355,17 +1361,17 @@ ViewerContext ModelManagerInterface::completeVContext(const ViewerContext &vCtx, case ViewerContext::AddAllPaths: { foreach (const QString &path, defaultVCtx.paths) - res.maybeAddPath(path); + maybeAddPath(res, path); switch (res.language.dialect()) { case Dialect::AnyLanguage: case Dialect::Qml: - res.maybeAddPath(info.qtQmlPath); + maybeAddPath(res, info.qtQmlPath); Q_FALLTHROUGH(); case Dialect::QmlQtQuick2: case Dialect::QmlQtQuick2Ui: { if (res.language == Dialect::QmlQtQuick2 || res.language == Dialect::QmlQtQuick2Ui) - res.maybeAddPath(info.qtQmlPath); + maybeAddPath(res, info.qtQmlPath); QList<ProjectInfo> allProjects; { QMutexLocker locker(&m_mutex); @@ -1377,11 +1383,11 @@ ViewerContext ModelManagerInterface::completeVContext(const ViewerContext &vCtx, for (int i = 0; i< pInfo.importPaths.size(); ++i) { PathAndLanguage pAndL = pInfo.importPaths.at(i); if (languages.contains(pAndL.language()) || pAndL.language().companionLanguages().contains(res.language)) - res.maybeAddPath(pAndL.path().toString()); + maybeAddPath(res, pAndL.path().toString()); } } foreach (const QString &path, environmentImportPaths()) - res.maybeAddPath(path); + maybeAddPath(res, path); break; } case Dialect::NoLanguage: @@ -1399,13 +1405,13 @@ ViewerContext ModelManagerInterface::completeVContext(const ViewerContext &vCtx, Q_FALLTHROUGH(); case ViewerContext::AddDefaultPaths: foreach (const QString &path, defaultVCtx.paths) - res.maybeAddPath(path); + maybeAddPath(res, path); if (res.language == Dialect::AnyLanguage || res.language == Dialect::Qml) - res.maybeAddPath(info.qtQmlPath); + maybeAddPath(res, info.qtQmlPath); if (res.language == Dialect::AnyLanguage || res.language == Dialect::Qml || res.language == Dialect::QmlQtQuick2 || res.language == Dialect::QmlQtQuick2Ui) { foreach (const QString &path, environmentImportPaths()) - res.maybeAddPath(path); + maybeAddPath(res, path); } break; } diff --git a/src/libs/qmljs/qmljsviewercontext.cpp b/src/libs/qmljs/qmljsviewercontext.cpp deleted file mode 100644 index bc5d8e5b48..0000000000 --- a/src/libs/qmljs/qmljsviewercontext.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "qmljsviewercontext.h" - -namespace QmlJS { -/*! - \class QmlJS::ViewerContext - \brief The ViewerContext class encapsulate selector and paths for a given viewer. - - Using a a different viewer context can emulate (the pure qml part) of a device. - This allows checking how a given qml would be interpreted on another platform/viewer. - - Screen information will also most likely need to be added here. -*/ -ViewerContext::ViewerContext() - : language(Dialect::Qml), flags(AddAllPaths) -{ } - -ViewerContext::ViewerContext(const QStringList &selectors, const QStringList &paths, - QmlJS::Dialect language, - QmlJS::ViewerContext::Flags flags) - : selectors(selectors), paths(paths), language(language), - flags(flags) -{ } - - -/* - which languages might be imported in this context - */ -bool ViewerContext::languageIsCompatible(Dialect l) const -{ - if (l == Dialect::AnyLanguage && language != Dialect::NoLanguage) - return true; - switch (language.dialect()) { - case Dialect::JavaScript: - case Dialect::Json: - case Dialect::QmlProject: - case Dialect::QmlQbs: - case Dialect::QmlTypeInfo: - return language == l; - case Dialect::Qml: - return l == Dialect::Qml || l == Dialect::QmlQtQuick2 || l == Dialect::JavaScript; - case Dialect::QmlQtQuick2: - case Dialect::QmlQtQuick2Ui: - return l == Dialect::Qml || l == Dialect::QmlQtQuick2 || l == Dialect::QmlQtQuick2Ui - || l == Dialect::JavaScript; - case Dialect::AnyLanguage: - return true; - case Dialect::NoLanguage: - break; - } - return false; -} - -void ViewerContext::maybeAddPath(const QString &path) -{ - if (!path.isEmpty() && !paths.contains(path)) - paths.append(path); -} - -} // namespace QmlJS diff --git a/src/libs/qmljs/qmljsviewercontext.h b/src/libs/qmljs/qmljsviewercontext.h index a04596cdd3..716636d7b3 100644 --- a/src/libs/qmljs/qmljsviewercontext.h +++ b/src/libs/qmljs/qmljsviewercontext.h @@ -32,9 +32,8 @@ namespace QmlJS { -class QMLJS_EXPORT ViewerContext +struct QMLJS_EXPORT ViewerContext { -public: enum Flags { Complete, AddAllPathsAndDefaultSelectors, @@ -43,18 +42,10 @@ public: AddDefaultPathsAndSelectors }; - ViewerContext(); - ViewerContext(const QStringList &selectors, const QStringList &paths, - Dialect language = Dialect::Qml, - Flags flags = AddAllPaths); - - bool languageIsCompatible(Dialect l) const; - void maybeAddPath(const QString &path); - QStringList selectors; QStringList paths; - Dialect language; - Flags flags; + Dialect language = Dialect::Qml; + Flags flags = AddAllPaths; }; } // namespace QmlJS diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index b33846faf9..ca4fc55594 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -224,7 +224,7 @@ void ModelManager::delayedInitialization() ViewerContext qbsVContext; qbsVContext.language = Dialect::QmlQbs; - qbsVContext.maybeAddPath(ICore::resourcePath() + QLatin1String("/qbs")); + qbsVContext.paths.append(ICore::resourcePath() + QLatin1String("/qbs")); setDefaultVContext(qbsVContext); } |