From 058841e8deb7865d875d1e6ffcb190b2a9125730 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 5 Feb 2021 09:39:14 +0100 Subject: [PATCH] Locator: Enable to show C++ type aliases These were not showing up in any global symbol list so far. Fixes: QTCREATORBUG-5800 Change-Id: I8e5c3b9b26f09d8cbcd31431e28c103da05d9bf8 Reviewed-by: Eike Ziller --- src/plugins/cpptools/cppindexingsupport.h | 3 ++- src/plugins/cpptools/cpplocatordata.cpp | 3 ++- src/plugins/cpptools/cpptoolsconstants.h | 2 +- src/plugins/cpptools/searchsymbols.cpp | 6 ++++-- src/plugins/cpptools/symbolsearcher_test.cpp | 2 ++ tests/cppsymbolsearcher/testdata_basic/file1.cpp | 2 ++ 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/plugins/cpptools/cppindexingsupport.h b/src/plugins/cpptools/cppindexingsupport.h index 1a77dc822c8..5411b0742ba 100644 --- a/src/plugins/cpptools/cppindexingsupport.h +++ b/src/plugins/cpptools/cppindexingsupport.h @@ -47,7 +47,8 @@ public: Classes = 0x1, Functions = 0x2, Enums = 0x4, - Declarations = 0x8 + Declarations = 0x8, + TypeAliases = 0x16, }; Q_DECLARE_FLAGS(SymbolTypes, SymbolType) diff --git a/src/plugins/cpptools/cpplocatordata.cpp b/src/plugins/cpptools/cpplocatordata.cpp index 1fbf04f0335..be2b948a96b 100644 --- a/src/plugins/cpptools/cpplocatordata.cpp +++ b/src/plugins/cpptools/cpplocatordata.cpp @@ -35,7 +35,8 @@ CppLocatorData::CppLocatorData() { m_search.setSymbolsToSearchFor(SymbolSearcher::Enums | SymbolSearcher::Classes | - SymbolSearcher::Functions); + SymbolSearcher::Functions | + SymbolSearcher::TypeAliases); m_pendingDocuments.reserve(MaxPendingDocuments); } diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h index 2a3bfe13a8b..bae185d090e 100644 --- a/src/plugins/cpptools/cpptoolsconstants.h +++ b/src/plugins/cpptools/cpptoolsconstants.h @@ -89,7 +89,7 @@ const char INCLUDES_FILTER_ID[] = "All Included C/C++ Files"; const char INCLUDES_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "All Included C/C++ Files"); const char LOCATOR_FILTER_ID[] = "Classes and Methods"; -const char LOCATOR_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "C++ Classes, Enums and Functions"); +const char LOCATOR_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "C++ Classes, Enums, Functions and Type Aliases"); const char SYMBOLS_FIND_FILTER_ID[] = "Symbols"; const char SYMBOLS_FIND_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "C++ Symbols"); diff --git a/src/plugins/cpptools/searchsymbols.cpp b/src/plugins/cpptools/searchsymbols.cpp index 05080fdb870..8f92d7a97bf 100644 --- a/src/plugins/cpptools/searchsymbols.cpp +++ b/src/plugins/cpptools/searchsymbols.cpp @@ -121,8 +121,10 @@ bool SearchSymbols::visit(Namespace *symbol) bool SearchSymbols::visit(Declaration *symbol) { if (!(symbolsToSearchFor & SymbolSearcher::Declarations)) { - // if we're searching for functions, still allow signal declarations to show up. - if (symbolsToSearchFor & SymbolSearcher::Functions) { + if ((symbolsToSearchFor & SymbolSearcher::TypeAliases) && symbol->type().isTypedef()) { + // Continue. + } else if (symbolsToSearchFor & SymbolSearcher::Functions) { + // if we're searching for functions, still allow signal declarations to show up. Function *funTy = symbol->type()->asFunctionType(); if (!funTy) { if (!symbol->type()->asObjCMethodType()) diff --git a/src/plugins/cpptools/symbolsearcher_test.cpp b/src/plugins/cpptools/symbolsearcher_test.cpp index 65228f39025..cd43513a4c1 100644 --- a/src/plugins/cpptools/symbolsearcher_test.cpp +++ b/src/plugins/cpptools/symbolsearcher_test.cpp @@ -197,6 +197,7 @@ void CppToolsPlugin::test_builtinsymbolsearcher_data() << ResultData(_("functionDefinedOutSideClass(char)"), _("MyNamespace::MyClass")) << ResultData(_("functionDefinedOutSideClassAndNamespace(float)"), _("MyNamespace::MyClass")) + << ResultData(_("MyNamespace::MyClass MY_CLASS"), _("")) << ResultData(_("int myVariable"), _("")) << ResultData(_("myFunction(bool, int)"), _("")) << ResultData(_("MyEnum"), _("")) @@ -211,6 +212,7 @@ void CppToolsPlugin::test_builtinsymbolsearcher_data() _("::MyClass")) << ResultData(_("functionDefinedOutSideClass(char)"), _("::MyClass")) + << ResultData(_("MyClass MY_OTHER_CLASS"), _("")) << ResultData(_("main()"), _("")) ); diff --git a/tests/cppsymbolsearcher/testdata_basic/file1.cpp b/tests/cppsymbolsearcher/testdata_basic/file1.cpp index 98a53752377..9196cfc4700 100644 --- a/tests/cppsymbolsearcher/testdata_basic/file1.cpp +++ b/tests/cppsymbolsearcher/testdata_basic/file1.cpp @@ -52,6 +52,7 @@ int MyClass::functionDefinedOutSideClass(char c) {} } // namespace MyNamespace int MyNamespace::MyClass::functionDefinedOutSideClassAndNamespace(float x) {} +using MY_CLASS = MyNamespace::MyClass; // // Symbols in an anonymous namespace @@ -78,5 +79,6 @@ int MyClass::functionDefinedOutSideClass(char c) {} } // anonymous namespace +typedef MyClass MY_OTHER_CLASS; int main() {}