forked from qt-creator/qt-creator
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>
This commit is contained in:
committed by
Nikolai Kosjar
parent
85e6f8a1c8
commit
4f0ae3b572
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user