diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2013-11-10 23:14:17 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2013-12-04 14:45:43 +0100 |
commit | 056db856579b53f195965fd00d522de5ea745835 (patch) | |
tree | 507fc971b9445d1f43756f3a1f79e14509c31c7c /src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp | |
parent | a28005daccac853c8b02ba11327b263de43973ed (diff) | |
download | qt-creator-056db856579b53f195965fd00d522de5ea745835.tar.gz |
CppEditor: Accept LookupContext in virtual function lookup
Required for correct resolving of first virtual appearance
Change-Id: I2307027f769fb2f4c0942f4aa4e0d2b5327562b5
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp')
-rw-r--r-- | src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp index 1e0f45334f..4848275466 100644 --- a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp +++ b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp @@ -210,7 +210,7 @@ IAssistProcessor *VirtualFunctionAssistProvider::createProcessor() const enum VirtualType { Virtual, PureVirtual }; static bool isVirtualFunction_helper(const Function *function, - const Snapshot &snapshot, + const LookupContext &context, VirtualType virtualType) { if (!function) @@ -222,24 +222,20 @@ static bool isVirtualFunction_helper(const Function *function, if (function->isVirtual()) return true; - const QString filePath = QString::fromUtf8(function->fileName(), function->fileNameLength()); - if (Document::Ptr document = snapshot.document(filePath)) { - LookupContext context(document, snapshot); - 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 (functionType->isFinal()) - return false; - if (functionType->isVirtual()) - return 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 (functionType->isFinal()) + return false; + if (functionType->isVirtual()) + return true; } } } @@ -248,14 +244,14 @@ static bool isVirtualFunction_helper(const Function *function, return false; } -bool FunctionHelper::isVirtualFunction(const Function *function, const Snapshot &snapshot) +bool FunctionHelper::isVirtualFunction(const Function *function, const LookupContext &context) { - return isVirtualFunction_helper(function, snapshot, Virtual); + return isVirtualFunction_helper(function, context, Virtual); } -bool FunctionHelper::isPureVirtualFunction(const Function *function, const Snapshot &snapshot) +bool FunctionHelper::isPureVirtualFunction(const Function *function, const LookupContext &context) { - return isVirtualFunction_helper(function, snapshot, PureVirtual); + return isVirtualFunction_helper(function, context, PureVirtual); } QList<Symbol *> FunctionHelper::overrides(Function *function, Class *functionsClass, @@ -342,6 +338,7 @@ void CppEditorPlugin::test_functionhelper_virtualFunctions() // Iterate through Function symbols Snapshot snapshot; snapshot.insert(document); + const LookupContext context(document, snapshot); Control *control = document->translationUnit()->control(); Symbol **end = control->lastSymbol(); for (Symbol **it = control->firstSymbol(); it != end; ++it) { @@ -349,8 +346,8 @@ void CppEditorPlugin::test_functionhelper_virtualFunctions() if (const Function *function = symbol->asFunction()) { QTC_ASSERT(!virtualityList.isEmpty(), return); Virtuality virtuality = virtualityList.takeFirst(); - if (FunctionHelper::isVirtualFunction(function, snapshot)) { - if (FunctionHelper::isPureVirtualFunction(function, snapshot)) + if (FunctionHelper::isVirtualFunction(function, context)) { + if (FunctionHelper::isPureVirtualFunction(function, context)) QCOMPARE(virtuality, PureVirtual); else QCOMPARE(virtuality, Virtual); |