aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorZixu Wang <zixu_wang@apple.com>2022-03-21 19:11:29 -0700
committerZixu Wang <zixu_wang@apple.com>2022-03-23 09:45:06 -0700
commit5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2 (patch)
treedfdf6f8149f31b13fc83902a211b55cbd5ca8119 /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parent311bdbc9b73f7aadc37be4285c74576600b9bdba (diff)
downloadllvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.zip
llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.tar.gz
llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.tar.bz2
[clang][extract-api] Add struct support
- Add `StructFieldRecord` and `StructRecord` to store API information for structs - Implement `VisitRecordDecl` in `ExtractAPIVisitor` - Implement Symbol Graph serialization for struct records. - Add test case for struct records. Depends on D121873 Differential Revision: https://reviews.llvm.org/D122202
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r--clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 574ea45..57fcc8a 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -367,6 +367,14 @@ Object serializeSymbolKind(const APIRecord &Record,
Kind["identifier"] = AddLangPrefix("enum");
Kind["displayName"] = "Enumeration";
break;
+ case APIRecord::RK_StructField:
+ Kind["identifier"] = AddLangPrefix("property");
+ Kind["displayName"] = "Instance Property";
+ break;
+ case APIRecord::RK_Struct:
+ Kind["identifier"] = AddLangPrefix("struct");
+ Kind["displayName"] = "Structure";
+ break;
}
return Kind;
@@ -474,6 +482,23 @@ void SymbolGraphSerializer::serializeEnumRecord(const EnumRecord &Record) {
}
}
+void SymbolGraphSerializer::serializeStructRecord(const StructRecord &Record) {
+ auto Struct = serializeAPIRecord(Record);
+ if (!Struct)
+ return;
+
+ Symbols.emplace_back(std::move(*Struct));
+
+ for (const auto &Field : Record.Fields) {
+ auto StructField = serializeAPIRecord(*Field);
+ if (!StructField)
+ continue;
+
+ Symbols.emplace_back(std::move(*StructField));
+ serializeRelationship(RelationshipKind::MemberOf, *Field, Record);
+ }
+}
+
Object SymbolGraphSerializer::serialize() {
Object Root;
serializeObject(Root, "metadata", serializeMetadata());
@@ -487,6 +512,10 @@ Object SymbolGraphSerializer::serialize() {
for (const auto &Enum : API.getEnums())
serializeEnumRecord(*Enum.second);
+ // Serialize struct records in the API set.
+ for (const auto &Struct : API.getStructs())
+ serializeStructRecord(*Struct.second);
+
Root["symbols"] = std::move(Symbols);
Root["relationhips"] = std::move(Relationships);