[clang][ExtractAPI] Add support for C++ member templates

Visit and serialize C++ fields by checking if a var template's context is a CXXRecordDecl in VisitVarTemplateDecl.

Depends on D158027

Reviewed By: dang

Differential Revision: https://reviews.llvm.org/D158029
This commit is contained in:
Erick Velez
2023-08-21 09:06:53 -07:00
parent 0303137bfc
commit 634b2fd2ca
8 changed files with 308 additions and 11 deletions

View File

@@ -428,6 +428,10 @@ Object serializeSymbolKind(APIRecord::RecordKind RK, Language Lang) {
Kind["identifier"] = AddLangPrefix("method");
Kind["displayName"] = "Method Template Specialization";
break;
case APIRecord::RK_CXXFieldTemplate:
Kind["identifier"] = AddLangPrefix("property");
Kind["displayName"] = "Template Property";
break;
case APIRecord::RK_Concept:
Kind["identifier"] = AddLangPrefix("concept");
Kind["displayName"] = "Concept";
@@ -956,6 +960,19 @@ void SymbolGraphSerializer::visitMethodTemplateSpecializationRecord(
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitCXXFieldTemplateRecord(
const CXXFieldTemplateRecord &Record) {
if (!ShouldRecurse)
// Ignore child symbols
return;
auto CXXFieldTemplate = serializeAPIRecord(Record);
if (!CXXFieldTemplate)
return;
Symbols.emplace_back(std::move(*CXXFieldTemplate));
serializeRelationship(RelationshipKind::MemberOf, Record,
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitConceptRecord(const ConceptRecord &Record) {
auto Concept = serializeAPIRecord(Record);
if (!Concept)