From 8b90b96f3c4316babd49d844bb5e5a9476c0873f Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Tue, 20 Jul 2010 14:59:38 +0200
Subject: [PATCH] QmlJSEditor: adding variant for declaringMember

declaringMemberNoProperties ignores grouped properties like font
and easing curve. It also skips Gradient and GradientStops
---
 src/plugins/qmljseditor/qmljseditor.cpp | 27 +++++++++++++++++++++++++
 src/plugins/qmljseditor/qmljseditor.h   |  1 +
 2 files changed, 28 insertions(+)

diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 403591f9650..c9781893329 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -511,6 +511,33 @@ AST::Node *SemanticInfo::declaringMember(int cursorPosition) const
     return declaringMember;
 }
 
+QmlJS::AST::Node *SemanticInfo::declaringMemberNoProperties(int cursorPosition) const
+{
+   AST::Node *node = declaringMember(cursorPosition);
+
+   if (UiObjectDefinition *objectDefinition = cast<UiObjectDefinition*>(node)) {
+       QString name = objectDefinition->qualifiedTypeNameId->name->asString();
+       if (!name.isNull() && name.at(0).isLower()) {
+           QList<AST::Node *> path = astPath(cursorPosition);
+           if (path.size() > 1)
+               return path.at(path.size() - 2);
+       } else if (name.contains("GradientStop")) {
+           QList<AST::Node *> path = astPath(cursorPosition);
+           if (path.size() > 2)
+               return path.at(path.size() - 3);
+       }
+   } else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(node)) {
+       QString name = objectBinding->qualifiedTypeNameId->name->asString();
+       if (name.contains("Gradient")) {
+           QList<AST::Node *> path = astPath(cursorPosition);
+           if (path.size() > 1)
+               return path.at(path.size() - 2);
+       }
+   }
+
+   return node;
+}
+
 QList<AST::Node *> SemanticInfo::astPath(int cursorPosition) const
 {
     QList<AST::Node *> path;
diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h
index 17b7da2a74f..1517269bb77 100644
--- a/src/plugins/qmljseditor/qmljseditor.h
+++ b/src/plugins/qmljseditor/qmljseditor.h
@@ -118,6 +118,7 @@ public:
 
     // Returns the declaring member
     QmlJS::AST::Node *declaringMember(int cursorPosition) const;
+    QmlJS::AST::Node *declaringMemberNoProperties(int cursorPosition) const;
 
     // Returns the AST node under cursor
     QmlJS::AST::Node *nodeUnderCursor(int cursorPosition) const;
-- 
GitLab