logic: skip recording qualifier of template parameter decl name (e.g."A<typename T>::T" -> "T")
This commit is contained in:
committed by
Eberhard Graether
parent
517dde06e4
commit
0498d68f5b
@@ -61,83 +61,10 @@ std::unique_ptr<CxxDeclName> CxxDeclNameResolver::getName(const clang::NamedDecl
|
||||
declName->setParent(CxxSpecifierNameResolver(this).getName(usingDecl->getQualifier()));
|
||||
}
|
||||
else if (
|
||||
clang::isa<clang::TemplateTypeParmDecl>(declaration) ||
|
||||
clang::isa<clang::NonTypeTemplateParmDecl>(declaration) ||
|
||||
clang::isa<clang::TemplateTemplateParmDecl>(declaration)
|
||||
) {
|
||||
clang::ASTContext::DynTypedNodeList parents = declaration->getASTContext().getParents(*declaration);
|
||||
for (const clang::ast_type_traits::DynTypedNode* parent = parents.begin(); parent != parents.end(); parent++)
|
||||
{
|
||||
bool foundParent = false;
|
||||
|
||||
const clang::Decl* parentDecl = parent->get<clang::Decl>();
|
||||
while (parentDecl != nullptr)
|
||||
{
|
||||
parentDecl = utility::getFirstDecl(parentDecl);
|
||||
|
||||
if (clang::isa<clang::TemplateDecl>(parentDecl))
|
||||
{
|
||||
const clang::TemplateDecl* parentTemplateDecl = clang::dyn_cast_or_null<clang::TemplateDecl>(parentDecl);
|
||||
if (!ignoresContext(parentTemplateDecl) && !ignoresContext(parentTemplateDecl->getTemplatedDecl()))
|
||||
{
|
||||
declName->setParent(getName(parentTemplateDecl));
|
||||
}
|
||||
foundParent = true;
|
||||
break;
|
||||
}
|
||||
else if (clang::isa<clang::ClassTemplatePartialSpecializationDecl>(parentDecl))
|
||||
{
|
||||
const clang::ClassTemplatePartialSpecializationDecl* parentClassTemplateDecl =
|
||||
clang::dyn_cast_or_null<clang::ClassTemplatePartialSpecializationDecl>(parentDecl);
|
||||
if (!ignoresContext(parentDecl))
|
||||
{
|
||||
declName->setParent(getName(parentClassTemplateDecl));
|
||||
}
|
||||
foundParent = true;
|
||||
break;
|
||||
}
|
||||
else if (clang::isa<clang::VarTemplatePartialSpecializationDecl>(parentDecl))
|
||||
{
|
||||
const clang::VarTemplatePartialSpecializationDecl* parentVarTemplateDecl =
|
||||
clang::dyn_cast_or_null<clang::VarTemplatePartialSpecializationDecl>(parentDecl);
|
||||
if (!ignoresContext(parentDecl))
|
||||
{
|
||||
declName->setParent(getName(parentVarTemplateDecl));
|
||||
}
|
||||
foundParent = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (const clang::DeclContext* parentDeclContext = parentDecl->getDeclContext())
|
||||
{
|
||||
if (ignoresContext(parentDeclContext))
|
||||
{
|
||||
foundParent = true;
|
||||
break;
|
||||
}
|
||||
parentDecl = clang::dyn_cast_or_null<clang::Decl>(parentDeclContext);
|
||||
if (parentDecl)
|
||||
{
|
||||
if (clang::TemplateDecl* describedTemplate = parentDecl->getDescribedTemplate())
|
||||
{
|
||||
parentDecl = describedTemplate;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (foundParent)
|
||||
{
|
||||
// break for the first parent ast node that can be resolved to a parent name (also if it is ignored).
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
!clang::isa<clang::TemplateTypeParmDecl>(declaration) &&
|
||||
!clang::isa<clang::NonTypeTemplateParmDecl>(declaration) &&
|
||||
!clang::isa<clang::TemplateTemplateParmDecl>(declaration)
|
||||
)
|
||||
{
|
||||
declName->setParent(getContextName(declaration->getDeclContext()));
|
||||
}
|
||||
|
||||
@@ -2617,7 +2617,7 @@ public:
|
||||
);
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->usages, L"void A<typename T>::foo() -> A<typename T>::T A<typename T>::m_t <8:3 8:5>"
|
||||
client->usages, L"void A<typename T>::foo() -> T A<typename T>::m_t <8:3 8:5>"
|
||||
));
|
||||
}
|
||||
|
||||
@@ -3343,7 +3343,7 @@ public:
|
||||
);
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->templateMemberSpecializations, L"int A<int>::foo() -> A<typename T>::T A<typename T>::foo() <5:4 5:6>"
|
||||
client->templateMemberSpecializations, L"int A<int>::foo() -> T A<typename T>::foo() <5:4 5:6>"
|
||||
));
|
||||
}
|
||||
|
||||
@@ -3363,7 +3363,7 @@ public:
|
||||
);
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->templateMemberSpecializations, L"static int A<int>::foo -> static A<typename T>::T A<typename T>::foo <5:11 5:13>"
|
||||
client->templateMemberSpecializations, L"static int A<int>::foo -> static T A<typename T>::foo <5:11 5:13>"
|
||||
));
|
||||
}
|
||||
|
||||
@@ -3383,7 +3383,7 @@ public:
|
||||
);
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->templateMemberSpecializations, L"int A<int>::foo -> A<typename T>::T A<typename T>::foo <5:4 5:6>"
|
||||
client->templateMemberSpecializations, L"int A<int>::foo -> T A<typename T>::foo <5:4 5:6>"
|
||||
));
|
||||
}
|
||||
|
||||
@@ -3406,7 +3406,7 @@ public:
|
||||
);
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->templateMemberSpecializations, L"int A<int>::B::foo -> A<typename T>::T A<typename T>::B::foo <7:5 7:7>"
|
||||
client->templateMemberSpecializations, L"int A<int>::B::foo -> T A<typename T>::B::foo <7:5 7:7>"
|
||||
));
|
||||
}
|
||||
|
||||
@@ -3771,7 +3771,7 @@ public:
|
||||
);
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->usages, L"void A<typename T>::A<T>() -> A<typename T>::T A<typename T>::foo <4:7 4:9>"
|
||||
client->usages, L"void A<typename T>::A<T>() -> T A<typename T>::foo <4:7 4:9>"
|
||||
));
|
||||
}
|
||||
|
||||
@@ -3790,7 +3790,7 @@ public:
|
||||
));
|
||||
|
||||
TS_ASSERT(utility::containsElement<std::wstring>(
|
||||
client->methods, L"private A<typename T>::T A<typename T>::foo() <4:2 <4:4 4:6> 4:8>" // TODO: should return type just be "T"?
|
||||
client->methods, L"private T A<typename T>::foo() <4:2 <4:4 4:6> 4:8>"
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user