QString fullyQualifiedName(const LookupContext &context, const Name *name, Scope *scope) { if (!name || !scope) return QString(); const QList<LookupItem> items = context.lookup(name, scope); if (items.isEmpty()) // "ui_xxx.h" might not be generated and nothing is forward declared. return Overview().prettyName(name); Symbol *symbol = items.first().declaration(); return Overview().prettyName(LookupContext::fullyQualifiedName(symbol)); }
static bool isVirtualFunction_helper(const Function *function, const LookupContext &context, VirtualType virtualType, const Function **firstVirtual) { enum { Unknown, False, True } res = Unknown; if (firstVirtual) *firstVirtual = 0; if (!function) return false; if (virtualType == PureVirtual) res = function->isPureVirtual() ? True : False; if (function->isVirtual()) { if (firstVirtual) *firstVirtual = function; if (res == Unknown) res = True; } if (!firstVirtual && res != Unknown) return res == True; QList<LookupItem> results = context.lookup(function->name(), function->enclosingScope()); if (!results.isEmpty()) { const bool isDestructor = function->name()->isDestructorNameId(); foreach (const LookupItem &item, results) { if (Symbol *symbol = item.declaration()) { if (Function *functionType = symbol->type()->asFunctionType()) { if (functionType->name()->isDestructorNameId() != isDestructor) continue; if (functionType == function) // already tested continue; if (!function->isSignatureEqualTo(functionType)) continue; if (functionType->isFinal()) return res == True; if (functionType->isVirtual()) { if (!firstVirtual) return true; if (res == Unknown) res = True; *firstVirtual = functionType; } } } } } return res == True; }