From b41346cf5b37fffe3b423f5b27f460353753eab8 Mon Sep 17 00:00:00 2001
From: Christian Kandeler <christian.kandeler@theqtcompany.com>
Date: Tue, 2 Feb 2016 18:23:16 +0100
Subject: [PATCH] CppTools: Add file path to extra info in function Locator
 filter.

This helps tremendously in the not uncommon case of the same class being
implemented in several files (e.g. for different operating systems).
Until now, users would be completely at a loss as to which of the
results was the one they were interested in.

Change-Id: I3ef8c8dc93b89e68eaf323a7ad2067b075d8cfb1
Task-number: QTCREATORBUG-11125
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
---
 src/plugins/cpptools/cppfunctionsfilter.cpp   |  9 ++++-
 .../cpptools/cpplocatorfilter_test.cpp        | 38 ++++++++++---------
 2 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/src/plugins/cpptools/cppfunctionsfilter.cpp b/src/plugins/cpptools/cppfunctionsfilter.cpp
index 7161a92aeee..09da0cc7438 100644
--- a/src/plugins/cpptools/cppfunctionsfilter.cpp
+++ b/src/plugins/cpptools/cppfunctionsfilter.cpp
@@ -25,6 +25,8 @@
 
 #include "cppfunctionsfilter.h"
 
+#include <utils/fileutils.h>
+
 using namespace CppTools;
 using namespace CppTools::Internal;
 
@@ -48,8 +50,13 @@ Core::LocatorFilterEntry CppFunctionsFilter::filterEntryFromIndexItem(IndexItem:
     QString name = info->symbolName();
     QString extraInfo = info->symbolScope();
     info->unqualifiedNameAndScope(name, &name, &extraInfo);
-    if (extraInfo.isEmpty())
+    if (extraInfo.isEmpty()) {
         extraInfo = info->shortNativeFilePath();
+    } else {
+        extraInfo.append(QLatin1String(" ("))
+                .append(Utils::FileName::fromString(info->fileName()).fileName())
+                .append(QLatin1String(")"));
+    }
 
     Core::LocatorFilterEntry filterEntry(this, name + info->symbolType(), id, info->icon());
     filterEntry.extraInfo = extraInfo;
diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp
index 372b872a707..b9b08f3d547 100644
--- a/src/plugins/cpptools/cpplocatorfilter_test.cpp
+++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp
@@ -175,19 +175,21 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
         << cppFunctionsFilter
         << _("function")
         << (QList<ResultData>()
-            << ResultData(_("functionDefinedInClass(bool, int)"), _("MyClass"))
-            << ResultData(_("functionDefinedInClass(bool, int)"), _("MyNamespace::MyClass"))
+            << ResultData(_("functionDefinedInClass(bool, int)"), _("MyClass (file1.cpp)"))
             << ResultData(_("functionDefinedInClass(bool, int)"),
-                          _("<anonymous namespace>::MyClass"))
-            << ResultData(_("functionDefinedOutSideClass(char)"), _("MyClass"))
-            << ResultData(_("functionDefinedOutSideClass(char)"), _("MyNamespace::MyClass"))
+                          _("MyNamespace::MyClass (file1.cpp)"))
+            << ResultData(_("functionDefinedInClass(bool, int)"),
+                          _("<anonymous namespace>::MyClass (file1.cpp)"))
+            << ResultData(_("functionDefinedOutSideClass(char)"), _("MyClass (file1.cpp)"))
+            << ResultData(_("functionDefinedOutSideClass(char)"),
+                          _("MyNamespace::MyClass (file1.cpp)"))
             << ResultData(_("functionDefinedOutSideClass(char)"),
-                          _("<anonymous namespace>::MyClass"))
+                          _("<anonymous namespace>::MyClass (file1.cpp)"))
             << ResultData(_("functionDefinedOutSideClassAndNamespace(float)"),
-                          _("MyNamespace::MyClass"))
+                          _("MyNamespace::MyClass (file1.cpp)"))
             << ResultData(_("myFunction(bool, int)"), testFileShort)
-            << ResultData(_("myFunction(bool, int)"), _("MyNamespace"))
-            << ResultData(_("myFunction(bool, int)"), _("<anonymous namespace>"))
+            << ResultData(_("myFunction(bool, int)"), _("MyNamespace (file1.cpp)"))
+            << ResultData(_("myFunction(bool, int)"), _("<anonymous namespace> (file1.cpp)"))
            );
 
     QTest::newRow("CppFunctionsFilter-WithNamespacePrefix")
@@ -195,12 +197,14 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
         << cppFunctionsFilter
         << _("mynamespace::")
         << (QList<ResultData>()
-            << ResultData(_("MyClass()"), _("MyNamespace::MyClass"))
-            << ResultData(_("functionDefinedInClass(bool, int)"), _("MyNamespace::MyClass"))
-            << ResultData(_("functionDefinedOutSideClass(char)"), _("MyNamespace::MyClass"))
+            << ResultData(_("MyClass()"), _("MyNamespace::MyClass (file1.cpp)"))
+            << ResultData(_("functionDefinedInClass(bool, int)"),
+                          _("MyNamespace::MyClass (file1.cpp)"))
+            << ResultData(_("functionDefinedOutSideClass(char)"),
+                          _("MyNamespace::MyClass (file1.cpp)"))
             << ResultData(_("functionDefinedOutSideClassAndNamespace(float)"),
-                          _("MyNamespace::MyClass"))
-            << ResultData(_("myFunction(bool, int)"), _("MyNamespace"))
+                          _("MyNamespace::MyClass (file1.cpp)"))
+            << ResultData(_("myFunction(bool, int)"), _("MyNamespace (file1.cpp)"))
            );
 
     QTest::newRow("CppClassesFilter")
@@ -264,9 +268,9 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
         << cppFunctionsFilter
         << _("M")
         << (QList<ResultData>()
-            << ResultData(_("anotherMethod"), _("MyClass"))
-            << ResultData(_("anotherMethod:"), _("MyClass"))
-            << ResultData(_("someMethod"), _("MyClass"))
+            << ResultData(_("anotherMethod"), _("MyClass (file1.mm)"))
+            << ResultData(_("anotherMethod:"), _("MyClass (file1.mm)"))
+            << ResultData(_("someMethod"), _("MyClass (file1.mm)"))
             );
 }
 
-- 
GitLab