forked from qt-creator/qt-creator
Changed import reading to use the DifferenceHandler.
This commit is contained in:
@@ -57,7 +57,13 @@ class ModelToTextMerger
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ModelToTextMerger(RewriterView *reWriterView);
|
ModelToTextMerger(RewriterView *reWriterView);
|
||||||
void 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.
|
|
||||||
|
/**
|
||||||
|
* 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 applyChanges();
|
||||||
|
|
||||||
void nodeCreated(const ModelNode &createdNode);
|
void nodeCreated(const ModelNode &createdNode);
|
||||||
void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange);
|
void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange);
|
||||||
|
|||||||
@@ -68,20 +68,33 @@ bool TextToModelMerger::isActive() const
|
|||||||
return m_isActive;
|
return m_isActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextToModelMerger::setupImports(QmlDomDocument &doc)
|
void TextToModelMerger::setupImports(QmlDomDocument &doc,
|
||||||
|
DifferenceHandler &differenceHandler)
|
||||||
{
|
{
|
||||||
foreach (const Import &import, m_rewriterView->model()->imports())
|
QSet<Import> existingImports = m_rewriterView->model()->imports();
|
||||||
m_rewriterView->model()->removeImport(import);
|
|
||||||
foreach (const QmlDomImport &qmlImport, doc.imports()) {
|
foreach (const QmlDomImport &qmlImport, doc.imports()) {
|
||||||
if (qmlImport.type() == QmlDomImport::Library) {
|
if (qmlImport.type() == QmlDomImport::Library) {
|
||||||
Import import(Import::createLibraryImport(QUrl(qmlImport.uri()), qmlImport.version(), qmlImport.qualifier()));
|
Import import(Import::createLibraryImport(QUrl(qmlImport.uri()),
|
||||||
m_rewriterView->model()->addImport(import);
|
qmlImport.version(),
|
||||||
}
|
qmlImport.qualifier()));
|
||||||
if (qmlImport.type() == QmlDomImport::File) {
|
|
||||||
Import import(Import:: createFileImport(qmlImport.uri(), qmlImport.version(), qmlImport.qualifier()));
|
if (!existingImports.remove(import))
|
||||||
m_rewriterView->model()->addImport(import);
|
differenceHandler.modelMissesImport(m_rewriterView->model(),
|
||||||
|
import);
|
||||||
|
} else if (qmlImport.type() == QmlDomImport::File) {
|
||||||
|
Import import(Import:: createFileImport(qmlImport.uri(),
|
||||||
|
qmlImport.version(),
|
||||||
|
qmlImport.qualifier()));
|
||||||
|
|
||||||
|
if (!existingImports.remove(import))
|
||||||
|
differenceHandler.modelMissesImport(m_rewriterView->model(),
|
||||||
|
import);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (const Import &import, existingImports)
|
||||||
|
differenceHandler.importAbsentInQMl(m_rewriterView->model(), import);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differenceHandler)
|
bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differenceHandler)
|
||||||
@@ -95,7 +108,7 @@ bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differen
|
|||||||
const bool success = doc.load(&engine, data, url);
|
const bool success = doc.load(&engine, data, url);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
setupImports(doc);
|
setupImports(doc, differenceHandler);
|
||||||
|
|
||||||
const QmlDomObject rootDomObject = doc.rootObject();
|
const QmlDomObject rootDomObject = doc.rootObject();
|
||||||
ModelNode modelRootNode = m_rewriterView->rootModelNode();
|
ModelNode modelRootNode = m_rewriterView->rootModelNode();
|
||||||
@@ -370,6 +383,16 @@ QVariant TextToModelMerger::convertToVariant(const ModelNode &node, const QmlDom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelValidator::modelMissesImport(Model *model, const Import &import)
|
||||||
|
{
|
||||||
|
Q_ASSERT(model->imports().contains(import));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelValidator::importAbsentInQMl(Model *model, const Import &import)
|
||||||
|
{
|
||||||
|
Q_ASSERT(! model->imports().contains(import));
|
||||||
|
}
|
||||||
|
|
||||||
void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding)
|
void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding)
|
||||||
{
|
{
|
||||||
Q_ASSERT(modelProperty.expression() == qmlBinding);
|
Q_ASSERT(modelProperty.expression() == qmlBinding);
|
||||||
@@ -443,6 +466,16 @@ void ModelValidator::idsDiffer(ModelNode &modelNode, const QString &qmlId)
|
|||||||
Q_ASSERT(0);
|
Q_ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelAmender::modelMissesImport(Model *model, const Import &import)
|
||||||
|
{
|
||||||
|
model->addImport(import);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelAmender::importAbsentInQMl(Model *model, const Import &import)
|
||||||
|
{
|
||||||
|
model->removeImport(import);
|
||||||
|
}
|
||||||
|
|
||||||
void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding)
|
void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding)
|
||||||
{
|
{
|
||||||
modelProperty.toBindingProperty().setExpression(qmlBinding);
|
modelProperty.toBindingProperty().setExpression(qmlBinding);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#define TEXTTOMODELMERGER_H
|
#define TEXTTOMODELMERGER_H
|
||||||
|
|
||||||
#include "corelib_global.h"
|
#include "corelib_global.h"
|
||||||
|
#include "import.h"
|
||||||
#include "nodelistproperty.h"
|
#include "nodelistproperty.h"
|
||||||
#include "modelnode.h"
|
#include "modelnode.h"
|
||||||
|
|
||||||
@@ -53,7 +54,7 @@ public:
|
|||||||
TextToModelMerger(RewriterView *reWriterView);
|
TextToModelMerger(RewriterView *reWriterView);
|
||||||
bool isActive() const;
|
bool isActive() const;
|
||||||
|
|
||||||
void setupImports(QmlDomDocument &doc);
|
void setupImports(QmlDomDocument &doc, DifferenceHandler &differenceHandler);
|
||||||
bool load(const QByteArray &data, DifferenceHandler &differenceHandler);
|
bool load(const QByteArray &data, DifferenceHandler &differenceHandler);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -95,6 +96,8 @@ public:
|
|||||||
virtual ~DifferenceHandler()
|
virtual ~DifferenceHandler()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
virtual void modelMissesImport(Model *model, const Import &import) = 0;
|
||||||
|
virtual void importAbsentInQMl(Model *model, const Import &import) = 0;
|
||||||
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding) = 0;
|
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding) = 0;
|
||||||
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding) = 0;
|
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding) = 0;
|
||||||
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList) = 0;
|
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList) = 0;
|
||||||
@@ -120,6 +123,8 @@ public:
|
|||||||
~ModelValidator()
|
~ModelValidator()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
virtual void modelMissesImport(Model *model, const Import &import);
|
||||||
|
virtual void importAbsentInQMl(Model *model, const Import &import);
|
||||||
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding);
|
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding);
|
||||||
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding);
|
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding);
|
||||||
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList);
|
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList);
|
||||||
@@ -142,6 +147,8 @@ public:
|
|||||||
~ModelAmender()
|
~ModelAmender()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
virtual void modelMissesImport(Model *model, const Import &import);
|
||||||
|
virtual void importAbsentInQMl(Model *model, const Import &import);
|
||||||
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding);
|
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding);
|
||||||
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding);
|
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding);
|
||||||
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList);
|
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList);
|
||||||
|
|||||||
Reference in New Issue
Block a user