From a482654bb114fdb5546cf9e0f067e94ae4b239ab Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Fri, 15 Jan 2010 08:56:33 +0100
Subject: [PATCH] Improve QmlLookupContext::resolve

---
 src/plugins/qmleditor/qmllookupcontext.cpp | 41 ++++++++++++++++------
 1 file changed, 31 insertions(+), 10 deletions(-)

diff --git a/src/plugins/qmleditor/qmllookupcontext.cpp b/src/plugins/qmleditor/qmllookupcontext.cpp
index ae37b10ace7..cf6bea32311 100644
--- a/src/plugins/qmleditor/qmllookupcontext.cpp
+++ b/src/plugins/qmleditor/qmllookupcontext.cpp
@@ -91,22 +91,43 @@ static inline QmlSymbol *resolveParent(const QStack<QmlSymbol*> &scopes)
 
 QmlSymbol *QmlLookupContext::resolve(const QString &name)
 {
-    // look at property definitions
-    if (!_scopes.isEmpty())
-        if (QmlSymbol *propertySymbol = resolveProperty(name, _scopes.top(), _doc->fileName()))
-            return propertySymbol;
+    // find element type names
+    if (QmlSymbol *type = resolveType(name))
+        return type;
+
+    // find ids
+    const QmlDocument::IdTable ids = _doc->ids();
+    if (ids.contains(name))
+        return ids[name];
 
     if (name == "parent") {
         return resolveParent(_scopes);
     }
 
-    // look at the ids.
-    const QmlDocument::IdTable ids = _doc->ids();
+    // find script methods
+    // ### TODO
 
-    if (ids.contains(name))
-        return ids[name];
-    else
-        return resolveType(name);
+    // find properties of the scope object
+    int scopeObjectIndex = findFirstQmlObjectScope(_scopes, _scopes.size() - 1);
+    if (scopeObjectIndex != -1)
+        if (QmlSymbol *propertySymbol = resolveProperty(name, _scopes.at(scopeObjectIndex), _doc->fileName()))
+            return propertySymbol;
+
+    // find properties of the component's root object
+    if (!_doc->symbols().isEmpty())
+        if (QmlSymbol *propertySymbol = resolveProperty(name, _doc->symbols()[0], _doc->fileName()))
+            return propertySymbol;
+
+    // component chain
+    // ### TODO: Might lead to ambiguity.
+
+    // context chain
+    // ### TODO: ?
+
+    // global object
+    // ### TODO
+
+    return 0;
 }
 
 QmlSymbol *QmlLookupContext::resolveType(const QString &name, const QString &fileName)
-- 
GitLab