From 4f0ae3b572fd5412696d4e125e2adf6dba880444 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh <orgad.shaneh@audiocodes.com> Date: Thu, 14 Nov 2013 20:55:00 +0200 Subject: [PATCH] CppEditor: Optimize non-overriding virtual functions lookup Instead of building the hierarchy from the most basic class that implements the virtual function, start from the looked up class. Change-Id: Ia674fbb4a92dd45d4ca7bc621c54b411264cbe3d Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> --- .../cppvirtualfunctionassistprovider.cpp | 36 +------------------ 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp index f3151d64873..19d8ac7cef5 100644 --- a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp +++ b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp @@ -255,35 +255,6 @@ bool FunctionHelper::isPureVirtualFunction(const Function *function, const Snaps return isVirtualFunction_helper(function, snapshot, PureVirtual); } -static bool isDerivedOf(Class *derivedClassCandidate, Class *baseClass, - const Snapshot &snapshot) -{ - QTC_ASSERT(derivedClassCandidate && baseClass, return false); - - QList<CppClass> l = QList<CppClass>() << CppClass(derivedClassCandidate); - - while (!l.isEmpty()) { - CppClass clazz = l.takeFirst(); - QTC_ASSERT(clazz.declaration, continue); - - const QString fileName = QString::fromUtf8(clazz.declaration->fileName()); - const Document::Ptr document = snapshot.document(fileName); - if (!document) - continue; - const LookupContext context(document, snapshot); - clazz.lookupBases(clazz.declaration, context); - - foreach (const CppClass &base, clazz.bases) { - if (base.declaration == baseClass) - return true; - if (!l.contains(base)) - l << base; - } - } - - return false; -} - QList<Symbol *> FunctionHelper::overrides(Function *function, Class *functionsClass, Class *staticClass, const Snapshot &snapshot) { @@ -296,7 +267,7 @@ QList<Symbol *> FunctionHelper::overrides(Function *function, Class *functionsCl // Find overrides CppEditor::Internal::CppClass cppClass = CppClass(functionsClass); - cppClass.lookupDerived(functionsClass, snapshot); + cppClass.lookupDerived(staticClass, snapshot); QList<CppClass> l; l << cppClass; @@ -309,11 +280,6 @@ QList<Symbol *> FunctionHelper::overrides(Function *function, Class *functionsCl Class *c = clazz.declaration->asClass(); QTC_ASSERT(c, continue); - if (c != functionsClass && c != staticClass) { - if (!isDerivedOf(c, staticClass, snapshot)) - continue; - } - foreach (const CppClass &d, clazz.derived) { if (!l.contains(d)) l << d; -- GitLab