diff options
author | Erick Velez <erickvelez7@gmail.com> | 2023-08-21 10:21:01 -0700 |
---|---|---|
committer | Erick Velez <erickvelez7@gmail.com> | 2023-08-21 10:38:01 -0700 |
commit | 3bb485530869d3ea43458b24df5a2d5302553bf9 (patch) | |
tree | 4c9939bd2340bf287902723b28c80ac1c3632140 /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | e620eac75e470f94928a17d215a3be947712028b (diff) | |
download | llvm-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.cpp | 43 |
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) |