From e6b41d7e2fa5d1faa57f0d960204cad7afef92ca Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar <nikolai.kosjar@digia.com> Date: Tue, 10 Dec 2013 10:47:41 +0100 Subject: [PATCH] CppEditor: Use TypeHierarchyBuilder in FunctionHelper::overrides ...instead going the way over CppClass. This makes FunctionHelper::overrides independent of the cppeditor plugin. Change-Id: Ifaedb94da1f67b3876e06cce9e745aaf3c1050a7 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com> --- .../cppvirtualfunctionassistprovider.cpp | 26 ++++++++++--------- src/plugins/cpptools/typehierarchybuilder.h | 3 +++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp index 4530a47b982..aff4973e05b 100644 --- a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp +++ b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp @@ -30,8 +30,8 @@ #include "cppvirtualfunctionassistprovider.h" +#include "cppeditor.h" #include "cppeditorconstants.h" -#include "cppelementevaluator.h" #include "cppvirtualfunctionproposalitem.h" #include <cplusplus/Icons.h> @@ -41,6 +41,7 @@ #include <coreplugin/actionmanager/command.h> #include <cpptools/symbolfinder.h> +#include <cpptools/typehierarchybuilder.h> #include <texteditor/codeassist/basicproposalitemlistmodel.h> #include <texteditor/codeassist/genericproposal.h> @@ -48,6 +49,7 @@ #include <texteditor/codeassist/iassistinterface.h> #include <texteditor/codeassist/iassistprocessor.h> #include <texteditor/codeassist/iassistproposal.h> +#include <texteditor/texteditorconstants.h> #include <utils/qtcassert.h> @@ -287,23 +289,23 @@ QList<Symbol *> FunctionHelper::overrides(Function *function, Class *functionsCl QTC_ASSERT(referenceName && referenceType.isValid(), return result); // Find overrides - CppEditor::Internal::CppClass cppClass = CppClass(functionsClass); - cppClass.lookupDerived(staticClass, snapshot); + CppTools::TypeHierarchyBuilder builder(staticClass, snapshot); + const CppTools::TypeHierarchy &staticClassHierarchy = builder.buildDerivedTypeHierarchy(); - QList<CppClass> l; - l << cppClass; + QList<CppTools::TypeHierarchy> l; + l.append(CppTools::TypeHierarchy(functionsClass)); + l.append(staticClassHierarchy); while (!l.isEmpty()) { // Add derived - CppClass clazz = l.takeFirst(); - - QTC_ASSERT(clazz.declaration, continue); - Class *c = clazz.declaration->asClass(); + const CppTools::TypeHierarchy hierarchy = l.takeFirst(); + QTC_ASSERT(hierarchy.symbol(), continue); + Class *c = hierarchy.symbol()->asClass(); QTC_ASSERT(c, continue); - foreach (const CppClass &d, clazz.derived) { - if (!l.contains(d)) - l << d; + foreach (const CppTools::TypeHierarchy &t, hierarchy.hierarchy()) { + if (!l.contains(t)) + l << t; } // Check member functions diff --git a/src/plugins/cpptools/typehierarchybuilder.h b/src/plugins/cpptools/typehierarchybuilder.h index 94d11510249..0820770de40 100644 --- a/src/plugins/cpptools/typehierarchybuilder.h +++ b/src/plugins/cpptools/typehierarchybuilder.h @@ -53,6 +53,9 @@ public: CPlusPlus::Symbol *symbol() const; const QList<TypeHierarchy> &hierarchy() const; + bool operator==(const TypeHierarchy &other) const + { return _symbol == other._symbol; } + private: CPlusPlus::Symbol *_symbol; QList<TypeHierarchy> _hierarchy; -- GitLab