forked from qt-creator/qt-creator
QmlDesigner: Get version from possible imports
If the version is missing in the import, then get the highest possible version. * Collect possible imports before the setup of imports * Do not skip all QtQuick.* imports. Task-number: QDS-4403 Change-Id: I676a1f698c39c28e447ab66f81a6edd32fb78651 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -812,9 +812,11 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc,
|
|||||||
} else {
|
} else {
|
||||||
QString importUri = toString(import->importUri);
|
QString importUri = toString(import->importUri);
|
||||||
if (version.isEmpty())
|
if (version.isEmpty())
|
||||||
version = "2.15";
|
version = getHighestPossibleImport(importUri);
|
||||||
const Import newImport =
|
const Import newImport = Import::createLibraryImport(importUri,
|
||||||
Import::createLibraryImport(importUri, version, as, m_rewriterView->importDirectories());
|
version,
|
||||||
|
as,
|
||||||
|
m_rewriterView->importDirectories());
|
||||||
|
|
||||||
if (!existingImports.removeOne(newImport))
|
if (!existingImports.removeOne(newImport))
|
||||||
differenceHandler.modelMissesImport(newImport);
|
differenceHandler.modelMissesImport(newImport);
|
||||||
@@ -869,8 +871,6 @@ static bool isBlacklistImport(const ImportKey &importKey, Model *model)
|
|||||||
|| importKey.libraryQualifiedPath() == QStringLiteral("QtBluetooth")
|
|| importKey.libraryQualifiedPath() == QStringLiteral("QtBluetooth")
|
||||||
|| importKey.libraryQualifiedPath() == QStringLiteral("Enginio")
|
|| importKey.libraryQualifiedPath() == QStringLiteral("Enginio")
|
||||||
|
|
||||||
// Don't show Quick X.X imports
|
|
||||||
|| (importKey.splitPath.count() == 1 && importPathFirst == QStringLiteral("QtQuick"))
|
|
||||||
|| filterByMetaInfo(importKey, model);
|
|| filterByMetaInfo(importKey, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -932,8 +932,9 @@ static QList<QmlDesigner::Import> generatePossibleLibraryImports(const QHash<QSt
|
|||||||
|
|
||||||
void TextToModelMerger::setupPossibleImports(const QmlJS::Snapshot &snapshot, const QmlJS::ViewerContext &viewContext)
|
void TextToModelMerger::setupPossibleImports(const QmlJS::Snapshot &snapshot, const QmlJS::ViewerContext &viewContext)
|
||||||
{
|
{
|
||||||
QHash<QString, ImportKey> filteredPossibleImportKeys =
|
m_possibleImportKeys = snapshot.importDependencies()->libraryImports(viewContext);
|
||||||
filterPossibleImportKeys(snapshot.importDependencies()->libraryImports(viewContext), m_rewriterView->model());
|
QHash<QString, ImportKey> filteredPossibleImportKeys
|
||||||
|
= filterPossibleImportKeys(m_possibleImportKeys, m_rewriterView->model());
|
||||||
|
|
||||||
const QmlJS::Imports *imports = m_scopeChain->context()->imports(m_document.data());
|
const QmlJS::Imports *imports = m_scopeChain->context()->imports(m_document.data());
|
||||||
if (imports)
|
if (imports)
|
||||||
@@ -968,8 +969,10 @@ void TextToModelMerger::setupUsedImports()
|
|||||||
|
|
||||||
for (const QmlJS::Import &import : allImports) {
|
for (const QmlJS::Import &import : allImports) {
|
||||||
QString version = import.info.version().toString();
|
QString version = import.info.version().toString();
|
||||||
if (version.isEmpty())
|
|
||||||
version = "2.15";
|
if (!import.info.version().isValid())
|
||||||
|
version = getHighestPossibleImport(import.info.name());
|
||||||
|
|
||||||
if (!import.info.name().isEmpty() && usedImportsSet.contains(import.info.name())) {
|
if (!import.info.name().isEmpty() && usedImportsSet.contains(import.info.name())) {
|
||||||
if (import.info.type() == ImportType::Library)
|
if (import.info.type() == ImportType::Library)
|
||||||
usedImports.append(
|
usedImports.append(
|
||||||
@@ -1062,8 +1065,8 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
|
|||||||
qCInfo(rewriterBenchmark) << "linked:" << time.elapsed();
|
qCInfo(rewriterBenchmark) << "linked:" << time.elapsed();
|
||||||
collectLinkErrors(&errors, ctxt);
|
collectLinkErrors(&errors, ctxt);
|
||||||
|
|
||||||
setupImports(m_document, differenceHandler);
|
|
||||||
setupPossibleImports(snapshot, m_vContext);
|
setupPossibleImports(snapshot, m_vContext);
|
||||||
|
setupImports(m_document, differenceHandler);
|
||||||
|
|
||||||
qCInfo(rewriterBenchmark) << "imports setup:" << time.elapsed();
|
qCInfo(rewriterBenchmark) << "imports setup:" << time.elapsed();
|
||||||
|
|
||||||
@@ -2266,3 +2269,19 @@ QString TextToModelMerger::textAt(const Document::Ptr &doc,
|
|||||||
{
|
{
|
||||||
return doc->source().mid(from.offset, to.end() - from.begin());
|
return doc->source().mid(from.offset, to.end() - from.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString TextToModelMerger::getHighestPossibleImport(const QString &importName) const
|
||||||
|
{
|
||||||
|
QString version = "2.15";
|
||||||
|
int maj = -1;
|
||||||
|
const auto imports = m_possibleImportKeys.values();
|
||||||
|
for (const ImportKey &import : imports) {
|
||||||
|
if (importName == import.libraryQualifiedPath()) {
|
||||||
|
if (import.majorVersion > maj) {
|
||||||
|
version = QString("%1.%2").arg(import.majorVersion).arg(import.minorVersion);
|
||||||
|
maj = import.majorVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
@@ -153,6 +153,8 @@ private:
|
|||||||
const QmlJS::SourceLocation &from,
|
const QmlJS::SourceLocation &from,
|
||||||
const QmlJS::SourceLocation &to);
|
const QmlJS::SourceLocation &to);
|
||||||
|
|
||||||
|
QString getHighestPossibleImport(const QString &importName) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RewriterView *m_rewriterView;
|
RewriterView *m_rewriterView;
|
||||||
bool m_isActive;
|
bool m_isActive;
|
||||||
@@ -163,6 +165,7 @@ private:
|
|||||||
QSet<ModelNode> m_setupCustomParserList;
|
QSet<ModelNode> m_setupCustomParserList;
|
||||||
QmlJS::ViewerContext m_vContext;
|
QmlJS::ViewerContext m_vContext;
|
||||||
QSet<QPair<QString, QString> > m_qrcMapping;
|
QSet<QPair<QString, QString> > m_qrcMapping;
|
||||||
|
QSet<QmlJS::ImportKey> m_possibleImportKeys;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DifferenceHandler
|
class DifferenceHandler
|
||||||
|
Reference in New Issue
Block a user