forked from qt-creator/qt-creator
QmlDesigner: Do not remove imports is parsing virtual files
Since we use the same url as the QML file currently edited, if we remove imports this breaks the imports. This is because when parsing the "virtual file" imports could be removed (which is disabled by this patch). The verification step triggered by the merger does not check for "temporarily" removed imports, because this was done on a different model. The project storage cannot handle this. The alternative would be to use a different "virtual" file URL. This patch also sets all imports of the current document on the template. Task-number: QDS-15046 Change-Id: Id8826c28232eeba347af191f04a92872e1833c4e Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -179,6 +179,8 @@ public:
|
||||
void setIsDocumentRewriterView(bool b);
|
||||
#endif
|
||||
|
||||
void setRemoveImports(bool removeImports);
|
||||
|
||||
signals:
|
||||
void modelInterfaceProjectUpdated();
|
||||
|
||||
|
@@ -678,6 +678,11 @@ void RewriterView::setIsDocumentRewriterView(bool b)
|
||||
}
|
||||
#endif
|
||||
|
||||
void RewriterView::setRemoveImports(bool removeImports)
|
||||
{
|
||||
m_textToModelMerger->setRemoveImports(removeImports);
|
||||
}
|
||||
|
||||
Internal::ModelNodePositionStorage *RewriterView::positionStorage() const
|
||||
{
|
||||
return m_positionStorage.get();
|
||||
|
@@ -702,9 +702,11 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc,
|
||||
}
|
||||
}
|
||||
|
||||
if (m_removeImports) {
|
||||
for (const Import &import : std::as_const(existingImports))
|
||||
differenceHandler.importAbsentInQMl(import);
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -2439,6 +2441,11 @@ void TextToModelMerger::clearPossibleImportKeys()
|
||||
m_previousPossibleModulesSize = -1;
|
||||
}
|
||||
|
||||
void TextToModelMerger::setRemoveImports(bool removeImports)
|
||||
{
|
||||
m_removeImports = removeImports;
|
||||
}
|
||||
|
||||
QString TextToModelMerger::textAt(const Document::Ptr &doc,
|
||||
const SourceLocation &location)
|
||||
{
|
||||
|
@@ -124,6 +124,8 @@ public:
|
||||
|
||||
void clearPossibleImportKeys();
|
||||
|
||||
void setRemoveImports(bool removeImports);
|
||||
|
||||
private:
|
||||
void setupCustomParserNode(const ModelNode &node);
|
||||
void setupComponent(const ModelNode &node);
|
||||
@@ -160,6 +162,7 @@ private:
|
||||
Imports m_possibleModules;
|
||||
int m_previousPossibleModulesSize = -1;
|
||||
bool m_hasVersionlessImport = false;
|
||||
bool m_removeImports = true;
|
||||
};
|
||||
|
||||
class DifferenceHandler
|
||||
|
@@ -289,6 +289,8 @@ static QmlObjectNode createQmlObjectNodeFromSource(AbstractView *view,
|
||||
auto inputModel = Model::create("QtQuick.Item", 1, 0, view->model());
|
||||
#endif
|
||||
inputModel->setFileUrl(view->model()->fileUrl());
|
||||
inputModel->changeImports(view->model()->imports(), {});
|
||||
|
||||
QPlainTextEdit textEdit;
|
||||
|
||||
textEdit.setPlainText(source);
|
||||
@@ -300,6 +302,7 @@ static QmlObjectNode createQmlObjectNodeFromSource(AbstractView *view,
|
||||
rewriterView->setTextModifier(&modifier);
|
||||
rewriterView->setAllowComponentRoot(true);
|
||||
rewriterView->setPossibleImportsEnabled(false);
|
||||
rewriterView->setRemoveImports(false);
|
||||
inputModel->setRewriterView(rewriterView.get());
|
||||
|
||||
if (rewriterView->errors().isEmpty() && rewriterView->rootModelNode().isValid()) {
|
||||
|
Reference in New Issue
Block a user