diff options
Diffstat (limited to 'src/plugins/cpptools/cppelementevaluator.cpp')
-rw-r--r-- | src/plugins/cpptools/cppelementevaluator.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/plugins/cpptools/cppelementevaluator.cpp b/src/plugins/cpptools/cppelementevaluator.cpp index 5d1cca68ff..971219915e 100644 --- a/src/plugins/cpptools/cppelementevaluator.cpp +++ b/src/plugins/cpptools/cppelementevaluator.cpp @@ -133,7 +133,8 @@ CppDeclarableElement::CppDeclarableElement(Symbol *declaration) name = overview.prettyName(declaration->name()); if (declaration->enclosingScope()->isClass() || declaration->enclosingScope()->isNamespace() || - declaration->enclosingScope()->isEnum()) { + declaration->enclosingScope()->isEnum() || + declaration->enclosingScope()->isTemplate()) { qualifiedName = overview.prettyName(LookupContext::fullyQualifiedName(declaration)); helpIdCandidates = stripName(qualifiedName); } else { @@ -462,9 +463,23 @@ QFuture<QSharedPointer<CppElement>> CppElementEvaluator::execute(SourceFunction if (lookupItems.isEmpty()) return createFinishedFuture(); - const LookupItem &lookupItem = lookupItems.first(); // ### TODO: select best candidate. - if (shouldOmitElement(lookupItem, scope)) + LookupItem lookupItem; + + for (const LookupItem &item : lookupItems) { + if (shouldOmitElement(item, scope)) + continue; + Symbol *symbol = item.declaration(); + if (!symbol) + continue; + if (!symbol->isClass() && !symbol->isTemplate() && !symbol->isForwardClassDeclaration()) + continue; + lookupItem = item; + break; + } + + if (!lookupItem.declaration()) return createFinishedFuture(); + return std::invoke(execFuntion, this, snapshot, lookupItem, typeOfExpression.context()); } @@ -566,6 +581,10 @@ static void handleLookupItemMatch(QFutureInterface<QSharedPointer<CppElement>> & } } + if (declaration->asTemplate() && declaration->asTemplate()->declaration() + && declaration->asTemplate()->declaration()->asClass()) + declaration = declaration->asTemplate()->declaration()->asClass(); + if (futureInterface.isCanceled()) return; QSharedPointer<CppClass> cppClass(new CppClass(declaration)); |