diff --git a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp index 5a4b9882df2251feff17bbd2997578ab6067e71e..a2d924e5712b04e469fc996b05c99ef34d8b5feb 100644 --- a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp +++ b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp @@ -191,7 +191,7 @@ RewriterView *ModelToTextMerger::view() return m_rewriterView; } -void ModelToTextMerger::applyChanges() +bool ModelToTextMerger::applyChanges() { if (m_rewriteActions.isEmpty()) return; @@ -223,6 +223,8 @@ void ModelToTextMerger::applyChanges() textModifier->deactivateChangeSignals(); textModifier->startGroup(); + bool success = true; + for (int i = 0; i < m_rewriteActions.size(); ++i) { if (i != 0) { textModifier->flushGroup(); @@ -235,15 +237,15 @@ void ModelToTextMerger::applyChanges() } ModelNodePositionStorage *positionStore = m_rewriterView->positionStorage(); - const bool success = action->execute(refactoring, *positionStore); + success = action->execute(refactoring, *positionStore); if (!success /*&& DebugRewriteActions*/) { qDebug() << "*** QML source code: ***"; qDebug() << qPrintable(textModifier->text()); qDebug() << "*** End of QML source code. ***"; - } - Q_ASSERT(success); + break; + } } qDeleteAll(m_rewriteActions); m_rewriteActions.clear(); @@ -254,10 +256,15 @@ void ModelToTextMerger::applyChanges() textModifier->reactivateChangeSignals(); } catch (...) { + qDeleteAll(m_rewriteActions); + m_rewriteActions.clear(); + textModifier->commitGroup(); textModifier->reactivateChangeSignals(); throw; } + + return success; } void ModelToTextMerger::reindent(const QMap<int, int> &/*dirtyAreas*/) const diff --git a/src/plugins/qmldesigner/core/model/modeltotextmerger.h b/src/plugins/qmldesigner/core/model/modeltotextmerger.h index c3bc38ebadda240c5bd9880497e8e67adb3c2004..6dca583a9081bbc252c1b9f48313cab922332c1f 100644 --- a/src/plugins/qmldesigner/core/model/modeltotextmerger.h +++ b/src/plugins/qmldesigner/core/model/modeltotextmerger.h @@ -57,7 +57,7 @@ class ModelToTextMerger public: ModelToTextMerger(RewriterView *reWriterView); - void applyChanges(); + bool applyChanges(); // Note: his method might throw exceptions, as the model works this way. So to handle rewriting failures, you will also need to catch any exception coming out. void nodeCreated(const ModelNode &createdNode); void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange);