QmlDesigner: Allow adding of file imports

All the functionality to support file imports
in the import manager is already there.
We just have to add the file imports as possible imports.
We only include direct sub directories that contain at least one qml file,
but no qmldir file.

Task-number: QTCREATORBUG-12126
Task-number: QTCREATORBUG-11518
Change-Id: I1b606ae11682886f430794f451177980b9c5f9aa
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2016-10-12 14:20:30 +02:00
committed by Tim Jenssen
parent f38a719615
commit 088972dd29

View File

@@ -819,7 +819,23 @@ static void removeUsedImports(QHash<QString, ImportKey> &filteredPossibleImportK
filteredPossibleImportKeys.remove(import.info.path()); filteredPossibleImportKeys.remove(import.info.path());
} }
static QList<QmlDesigner::Import> generatePossibleImports(const QHash<QString, ImportKey> &filteredPossibleImportKeys) static QList<QmlDesigner::Import> generatePossibleFileImports(const QString &path)
{
QList<QmlDesigner::Import> possibleImports;
foreach (const QString &subDir, QDir(path).entryList(QDir::Dirs | QDir::NoDot | QDir::NoDotDot)) {
QDir dir(path + "/" + subDir);
if (!dir.entryInfoList(QStringList("*.qml"), QDir::Files).isEmpty()
&& dir.entryInfoList(QStringList("qmldir"), QDir::Files).isEmpty()) {
QmlDesigner::Import import = QmlDesigner::Import::createFileImport(subDir);
possibleImports.append(import);
}
}
return possibleImports;
}
static QList<QmlDesigner::Import> generatePossibleLibraryImports(const QHash<QString, ImportKey> &filteredPossibleImportKeys)
{ {
QList<QmlDesigner::Import> possibleImports; QList<QmlDesigner::Import> possibleImports;
@@ -842,7 +858,9 @@ void TextToModelMerger::setupPossibleImports(const QmlJS::Snapshot &snapshot, co
removeUsedImports(filteredPossibleImportKeys, m_scopeChain->context()->imports(m_document.data())->all()); removeUsedImports(filteredPossibleImportKeys, m_scopeChain->context()->imports(m_document.data())->all());
QList<QmlDesigner::Import> possibleImports = generatePossibleImports(filteredPossibleImportKeys); QList<QmlDesigner::Import> possibleImports = generatePossibleLibraryImports(filteredPossibleImportKeys);
possibleImports.append(generatePossibleFileImports(document()->path()));
if (m_rewriterView->isAttached()) if (m_rewriterView->isAttached())
m_rewriterView->model()->setPossibleImports(possibleImports); m_rewriterView->model()->setPossibleImports(possibleImports);