From 7db3b660b64d5d6fa35b067e148d6807a089b209 Mon Sep 17 00:00:00 2001
From: Przemyslaw Gorszkowski <pgorszkowski@gmail.com>
Date: Tue, 29 Jan 2013 15:19:50 +0100
Subject: [PATCH] C++ editor: Highlight member variable

Highlight member variable when there is also
enum value with the same name

Task-number: QTCREATORBUG-7525
Change-Id: I0990844a20fdf9e87a807fde10708344b9c3497b
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
---
 src/plugins/cpptools/cppchecksymbols.cpp      |  6 +++-
 .../checksymbols/tst_checksymbols.cpp         | 31 +++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp
index 5f7b6f04d78..bc807c7f6ca 100644
--- a/src/plugins/cpptools/cppchecksymbols.cpp
+++ b/src/plugins/cpptools/cppchecksymbols.cpp
@@ -787,7 +787,11 @@ void CheckSymbols::checkName(NameAST *ast, Scope *scope)
                 }
             }
         } else if (maybeType(ast->name) || maybeStatic(ast->name)) {
-            maybeAddTypeOrStatic(_context.lookup(ast->name, scope), ast);
+            if (! maybeAddTypeOrStatic(_context.lookup(ast->name, scope), ast)) {
+                // it can be a local variable
+                if (maybeField(ast->name))
+                    maybeAddField(_context.lookup(ast->name, scope), ast);
+            }
         } else if (maybeField(ast->name)) {
             maybeAddField(_context.lookup(ast->name, scope), ast);
         }
diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
index ac586b75d85..941118a18ec 100644
--- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
+++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
@@ -183,6 +183,7 @@ private slots:
     void test_checksymbols_FunctionUse();
     void test_checksymbols_PseudoKeywordUse();
     void test_checksymbols_StaticUse();
+    void test_checksymbols_VariableHasTheSameNameAsEnumUse();
 };
 
 void tst_CheckSymbols::test_checksymbols_TypeUse()
@@ -377,5 +378,35 @@ void tst_CheckSymbols::test_checksymbols_StaticUse()
     TestData::check(source, expectedUses);
 }
 
+void tst_CheckSymbols::test_checksymbols_VariableHasTheSameNameAsEnumUse()
+{
+    const QByteArray source =
+            "struct Foo\n"
+            "{\n"
+            "    enum E { bar, baz };\n"
+            "};\n"
+            "\n"
+            "struct Boo\n"
+            "{\n"
+            "    int foo;\n"
+            "    int bar;\n"
+            "    int baz;\n"
+            "};\n"
+            ;
+    const QList<Use> expectedUses = QList<Use>()
+            << Use(1, 8, 3, SemanticInfo::TypeUse)
+            << Use(3, 19, 3, SemanticInfo::EnumerationUse)
+            << Use(3, 14, 3, SemanticInfo::EnumerationUse)
+            << Use(3, 10, 1, SemanticInfo::TypeUse)
+            << Use(6, 8, 3, SemanticInfo::TypeUse)
+            << Use(8, 9, 3, SemanticInfo::FieldUse)
+            << Use(9, 9, 3, SemanticInfo::FieldUse)
+            << Use(10, 9, 3, SemanticInfo::FieldUse)
+               ;
+
+    TestData::check(source, expectedUses);
+}
+
+
 QTEST_APPLESS_MAIN(tst_CheckSymbols)
 #include "tst_checksymbols.moc"
-- 
GitLab