Clang: Reuse full type qualification from tooltips

Use qualification helper function from clangtooltipinfocollector.h
instead of Unified Symbol Resolution (USR) not to deal
with special symbols used in USR.

Affects current document filter and symbol outline.

Task-number: QTCREATORBUG-20917
Change-Id: I616ba1bf066e986e0ee75d47d30e45f94474c1cd
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Ivan Donchevskii
2018-08-07 10:05:31 +02:00
parent 62e776aa8e
commit d2b951565a
3 changed files with 28 additions and 29 deletions

View File

@@ -44,6 +44,20 @@
namespace ClangBackEnd {
Utf8String qualificationPrefix(const Cursor &cursor)
{
// TODO: Implement with qualificationPrefixAsVector()
Utf8String qualifiedName;
for (Cursor parent = cursor.semanticParent();
parent.isValid() && (parent.kind() == CXCursor_Namespace);
parent = parent.semanticParent()) {
qualifiedName = parent.spelling() + Utf8StringLiteral("::") + qualifiedName;
}
return qualifiedName;
}
namespace {
Utf8StringVector qualificationPrefixAsVector(const Cursor &cursor)
@@ -59,20 +73,6 @@ Utf8StringVector qualificationPrefixAsVector(const Cursor &cursor)
return result;
}
Utf8String qualificationPrefix(const Cursor &cursor)
{
// TODO: Implement with qualificationPrefixAsVector()
Utf8String qualifiedName;
for (Cursor parent = cursor.semanticParent();
parent.isValid() && (parent.kind() == CXCursor_Namespace);
parent = parent.semanticParent()) {
qualifiedName = parent.spelling() + Utf8StringLiteral("::") + qualifiedName;
}
return qualifiedName;
}
Utf8String displayName(const Cursor &cursor)
{
if (cursor.kind() == CXCursor_ClassTemplate) {

View File

@@ -33,6 +33,7 @@
namespace ClangBackEnd {
class Cursor;
class UnsavedFiles;
ToolTipInfo collectToolTipInfo(UnsavedFiles &unsavedFiles,
@@ -42,4 +43,6 @@ ToolTipInfo collectToolTipInfo(UnsavedFiles &unsavedFiles,
uint line,
uint column);
Utf8String qualificationPrefix(const Cursor &cursor);
} // namespace ClangBackEnd

View File

@@ -24,6 +24,7 @@
****************************************************************************/
#include "clangstring.h"
#include "clangtooltipinfocollector.h"
#include "cursor.h"
#include "fulltokeninfo.h"
#include "sourcerange.h"
@@ -46,29 +47,24 @@ FullTokenInfo::operator TokenInfoContainer() const
return TokenInfoContainer(line(), column(), length(), m_types, m_extraInfo);
}
static Utf8String fullyQualifiedType(const Cursor &cursor)
{
Utf8String typeSpelling = cursor.type().canonical().utf8Spelling();
if (typeSpelling.isEmpty()) {
// Only if it's the namespaces level.
typeSpelling = cursor.unifiedSymbolResolution();
typeSpelling.replace(Utf8StringLiteral("c:@N@"), Utf8StringLiteral(""));
typeSpelling.replace(Utf8StringLiteral("@N@"), Utf8StringLiteral("::"));
typeSpelling.replace(Utf8StringLiteral("c:@aN"), Utf8StringLiteral("(anonymous)"));
}
return typeSpelling;
static Utf8String fullyQualifiedType(const Cursor &cursor) {
Utf8String prefix;
if (cursor.kind() == CXCursor_ClassTemplate || cursor.kind() == CXCursor_Namespace)
return qualificationPrefix(cursor) + cursor.displayName();
return cursor.type().canonical().spelling();
}
void FullTokenInfo::updateTypeSpelling(const Cursor &cursor, bool functionLike)
{
m_extraInfo.typeSpelling = fullyQualifiedType(cursor);
m_extraInfo.semanticParentTypeSpelling = fullyQualifiedType(cursor.semanticParent());
if (!functionLike)
if (!functionLike) {
m_extraInfo.typeSpelling = fullyQualifiedType(cursor);
return;
Type type = cursor.type().canonical();
}
m_extraInfo.token = cursor.displayName();
// On the client side full type is typeSpelling + token.
m_extraInfo.typeSpelling = type.resultType().utf8Spelling();
m_extraInfo.typeSpelling = cursor.type().resultType().utf8Spelling();
}
static Utf8String propertyParentSpelling(CXTranslationUnit cxTranslationUnit,