diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index 977c6188554440483b945db33b57a07371eb4d8d..ba31251bf37fc432cccbcc32cb5b1f5dd34f6589 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -83,8 +83,11 @@ QList CppLocatorFilter::matchesFor( m_data->filterAllFiles([&](const IndexItem::Ptr &info) -> IndexItem::VisitorResult { if (future.isCanceled()) return IndexItem::Break; - if (info->type() & wanted) { + const IndexItem::ItemType type = info->type(); + if (type & wanted) { QString matchString = hasColonColon ? info->scopedSymbolName() : info->symbolName(); + if (type == IndexItem::Function) + matchString += info->symbolType(); QRegularExpressionMatch match = regexp.match(matchString); if (match.hasMatch()) { Core::LocatorFilterEntry filterEntry = filterEntryFromIndexItem(info); diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp index 501a396eb1352e001fe0e7f9976f47a22681ee53..1b309fbe8ae2d10019ab76f07ff49b1d86540833 100644 --- a/src/plugins/cpptools/cpplocatorfilter_test.cpp +++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp @@ -196,10 +196,26 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data() << _("pos") << (QList() << ResultData(_("positiveNumber()"), testFileShort) - << ResultData(_("getPosition()"), testFileShort) + << ResultData(_("matchArgument(Pos)"), testFileShort) << ResultData(_("pointOfService()"), testFileShort) ); + QTest::newRow("CppFunctionsFilter-arguments") + << testFile + << cppFunctionsFilter + << _("function*bool") + << (QList() + << ResultData(_("functionDefinedInClass(bool, int)"), + _("MyClass (file1.cpp)")) + << ResultData(_("functionDefinedInClass(bool, int)"), + _("MyNamespace::MyClass (file1.cpp)")) + << ResultData(_("functionDefinedInClass(bool, int)"), + _("::MyClass (file1.cpp)")) + << ResultData(_("myFunction(bool, int)"), testFileShort) + << ResultData(_("myFunction(bool, int)"), _("MyNamespace (file1.cpp)")) + << ResultData(_("myFunction(bool, int)"), _(" (file1.cpp)")) + ); + QTest::newRow("CppFunctionsFilter-WithNamespacePrefix") << testFile << cppFunctionsFilter @@ -290,8 +306,9 @@ void CppToolsPlugin::test_cpplocatorfilters_CppCurrentDocumentFilter() QList expectedResults = QList() << ResultData(_("int myVariable"), _("")) << ResultData(_("myFunction(bool, int)"), _("")) + << ResultData(_("Pos"), _("")) << ResultData(_("pointOfService()"), _("")) - << ResultData(_("getPosition()"), _("")) + << ResultData(_("matchArgument(Pos)"), _("")) << ResultData(_("positiveNumber()"), _("")) << ResultData(_("MyEnum"), _("")) << ResultData(_("int V1"), _("MyEnum")) diff --git a/tests/cpplocators/testdata_basic/file1.cpp b/tests/cpplocators/testdata_basic/file1.cpp index 5c1e3caff32c483e7dd29a4697826988e612e8af..ae8cdf9916cd53d2d99a40b336f0b209a219f31a 100644 --- a/tests/cpplocators/testdata_basic/file1.cpp +++ b/tests/cpplocators/testdata_basic/file1.cpp @@ -12,8 +12,9 @@ int myVariable; int myFunction(bool yesno, int number) {} +struct Pos {}; void pointOfService() {} -int getPosition() { return 0; } +int matchArgument(Pos p) { return 0; } int positiveNumber() { return 2; } enum MyEnum { V1, V2 };