summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2014-06-12 17:42:09 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2014-06-12 17:49:34 +0200
commit4df72c08791dc2587f596c45fb1213f7c0277e80 (patch)
tree9c1d9d4ca92810671a0a6f59cf1e1bd8f367a092 /src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
parentdc3b8269557a58540268b0056ff9901360d27d7a (diff)
downloadqt-creator-4df72c08791dc2587f596c45fb1213f7c0277e80.tar.gz
QmlDesigner.Model: Crash fix
We have to check if the currentNode is actually valid. Change-Id: I7a36758e96cbb4ae2a17755fc841ee2518a01ca2 Reviewed-by: Marco Bubke <marco.bubke@digia.com>
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/bindingproperty.cpp')
-rw-r--r--src/plugins/qmldesigner/designercore/model/bindingproperty.cpp40
1 files changed, 22 insertions, 18 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
index 1b2ada05d8..c0744b4a45 100644
--- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
@@ -95,34 +95,38 @@ QString BindingProperty::expression() const
static ModelNode resolveBinding(const QString &binding, ModelNode currentNode, AbstractView* view)
{
- int i = 0;
+ int index = 0;
QString element = binding.split(QLatin1Char('.')).at(0);
while (!element.isEmpty())
{
- if (element == "parent") {
- if (currentNode.hasParentProperty())
- currentNode = currentNode.parentProperty().toNodeAbstractProperty().parentModelNode();
- else
- return ModelNode(); //binding not valid
- } else if (currentNode.hasProperty(element.toUtf8())) {
- if (currentNode.property(element.toUtf8()).isNodeProperty())
- currentNode = currentNode.nodeProperty(element.toUtf8()).modelNode();
- else if (view->hasId(element))
+ if (currentNode.isValid()) {
+ if (element == "parent") {
+ if (currentNode.hasParentProperty())
+ currentNode = currentNode.parentProperty().toNodeAbstractProperty().parentModelNode();
+ else
+ return ModelNode(); //binding not valid
+ } else if (currentNode.hasProperty(element.toUtf8())) {
+ if (currentNode.property(element.toUtf8()).isNodeProperty())
+ currentNode = currentNode.nodeProperty(element.toUtf8()).modelNode();
+ else if (view->hasId(element))
+ currentNode = view->modelNodeForId(element); //id
+ else
+ return ModelNode(); //binding not valid
+
+ } else {
currentNode = view->modelNodeForId(element); //id
+ }
+ index++;
+ if (index < binding.split(QLatin1Char('.')).count())
+ element = binding.split(QLatin1Char('.')).at(index);
else
- return ModelNode(); //binding not valid
+ element.clear();
} else {
- currentNode = view->modelNodeForId(element); //id
+ return ModelNode();
}
- i++;
- if (i < binding.split(QLatin1Char('.')).count())
- element = binding.split(QLatin1Char('.')).at(i);
- else
- element.clear();
}
return currentNode;
-
}
ModelNode BindingProperty::resolveToModelNode() const