diff --git a/src/plugins/qmldesigner/libs/designercore/include/rewriterview.h b/src/plugins/qmldesigner/libs/designercore/include/rewriterview.h index 9672fdc35d2..ac64b97cd3f 100644 --- a/src/plugins/qmldesigner/libs/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/libs/designercore/include/rewriterview.h @@ -179,6 +179,8 @@ public: void setIsDocumentRewriterView(bool b); #endif + void setRemoveImports(bool removeImports); + signals: void modelInterfaceProjectUpdated(); diff --git a/src/plugins/qmldesigner/libs/designercore/rewriter/rewriterview.cpp b/src/plugins/qmldesigner/libs/designercore/rewriter/rewriterview.cpp index 02f5c2f05d3..d94846d234a 100644 --- a/src/plugins/qmldesigner/libs/designercore/rewriter/rewriterview.cpp +++ b/src/plugins/qmldesigner/libs/designercore/rewriter/rewriterview.cpp @@ -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(); diff --git a/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp b/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp index 57785a1a570..f9f56923378 100644 --- a/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.cpp @@ -702,8 +702,10 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc, } } - for (const Import &import : std::as_const(existingImports)) - differenceHandler.importAbsentInQMl(import); + 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) { diff --git a/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.h b/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.h index 897555c301d..9220f226703 100644 --- a/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.h +++ b/src/plugins/qmldesigner/libs/designercore/rewriter/texttomodelmerger.h @@ -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 diff --git a/src/plugins/qmldesigner/qmltools/qmlvisualnode.cpp b/src/plugins/qmldesigner/qmltools/qmlvisualnode.cpp index 61f6833dd59..1e17c2e2fac 100644 --- a/src/plugins/qmldesigner/qmltools/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/qmltools/qmlvisualnode.cpp @@ -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()) {