aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorErick Velez <erickvelez7@gmail.com>2023-08-21 10:21:01 -0700
committerErick Velez <erickvelez7@gmail.com>2023-08-21 10:38:01 -0700
commit3bb485530869d3ea43458b24df5a2d5302553bf9 (patch)
tree4c9939bd2340bf287902723b28c80ac1c3632140 /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parente620eac75e470f94928a17d215a3be947712028b (diff)
downloadllvm-3bb485530869d3ea43458b24df5a2d5302553bf9.zip
llvm-3bb485530869d3ea43458b24df5a2d5302553bf9.tar.gz
llvm-3bb485530869d3ea43458b24df5a2d5302553bf9.tar.bz2
[clang][ExtractAPI] Refactor C++ method and field visitation
Refactor visitation for C++ record children by following the Visitor's CRTP. Expand VisitCXXField, VisitCXXMethod for non-templates and introduce VisitCXXConstructor, VisitCXXDestructor. Handle relationships by finding the parent's Record via USR from DeclContext. Depends on D158029 Reviewed By: dang Differential Revision: https://reviews.llvm.org/D158031
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r--clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp43
1 files changed, 33 insertions, 10 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 6782483..e1b5f65 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -885,9 +885,6 @@ void SymbolGraphSerializer::visitCXXClassRecord(const CXXClassRecord &Record) {
return;
Symbols.emplace_back(std::move(*Class));
- serializeMembers(Record, Record.Fields);
- serializeMembers(Record, Record.Methods);
-
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
}
@@ -899,9 +896,6 @@ void SymbolGraphSerializer::visitClassTemplateRecord(
return;
Symbols.emplace_back(std::move(*Class));
- serializeMembers(Record, Record.Fields);
- serializeMembers(Record, Record.Methods);
-
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
}
@@ -913,8 +907,6 @@ void SymbolGraphSerializer::visitClassTemplateSpecializationRecord(
return;
Symbols.emplace_back(std::move(*Class));
- serializeMembers(Record, Record.Fields);
- serializeMembers(Record, Record.Methods);
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
@@ -927,13 +919,33 @@ void SymbolGraphSerializer::visitClassTemplatePartialSpecializationRecord(
return;
Symbols.emplace_back(std::move(*Class));
- serializeMembers(Record, Record.Fields);
- serializeMembers(Record, Record.Methods);
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
}
+void SymbolGraphSerializer::visitCXXInstanceMethodRecord(
+ const CXXInstanceMethodRecord &Record) {
+ auto InstanceMethod = serializeAPIRecord(Record);
+ if (!InstanceMethod)
+ return;
+
+ Symbols.emplace_back(std::move(*InstanceMethod));
+ serializeRelationship(RelationshipKind::MemberOf, Record,
+ Record.ParentInformation.ParentRecord);
+}
+
+void SymbolGraphSerializer::visitCXXStaticMethodRecord(
+ const CXXStaticMethodRecord &Record) {
+ auto StaticMethod = serializeAPIRecord(Record);
+ if (!StaticMethod)
+ return;
+
+ Symbols.emplace_back(std::move(*StaticMethod));
+ serializeRelationship(RelationshipKind::MemberOf, Record,
+ Record.ParentInformation.ParentRecord);
+}
+
void SymbolGraphSerializer::visitMethodTemplateRecord(
const CXXMethodTemplateRecord &Record) {
if (!ShouldRecurse)
@@ -960,6 +972,17 @@ void SymbolGraphSerializer::visitMethodTemplateSpecializationRecord(
Record.ParentInformation.ParentRecord);
}
+void SymbolGraphSerializer::visitCXXFieldRecord(const CXXFieldRecord &Record) {
+ if (!ShouldRecurse)
+ return;
+ auto CXXField = serializeAPIRecord(Record);
+ if (!CXXField)
+ return;
+ Symbols.emplace_back(std::move(*CXXField));
+ serializeRelationship(RelationshipKind::MemberOf, Record,
+ Record.ParentInformation.ParentRecord);
+}
+
void SymbolGraphSerializer::visitCXXFieldTemplateRecord(
const CXXFieldTemplateRecord &Record) {
if (!ShouldRecurse)