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