From 671709f0e7d49826fd0908be2c9aed07debf5bc9 Mon Sep 17 00:00:00 2001 From: Daniel Grumberg Date: Fri, 21 Oct 2022 15:34:57 +0100 Subject: [PATCH] [clang][ExtractAPI] Add targetFallback to relationships in symbol graph Adds a 'targetFallback' field to relationships in symbol graph that contains the plain name of the relationship target. This is useful for clients when the relationship target symbol is not available. Differential Revision: https://reviews.llvm.org/D136455 --- .../Serialization/SymbolGraphSerializer.cpp | 1 + .../test/ExtractAPI/anonymous_record_no_typedef.c | 12 +++++--- clang/test/ExtractAPI/enum.c | 33 ++++++++++++++-------- clang/test/ExtractAPI/objc_category.m | 12 +++++--- clang/test/ExtractAPI/objc_interface.m | 21 +++++++++----- clang/test/ExtractAPI/objc_property.m | 21 +++++++++----- clang/test/ExtractAPI/objc_protocol.m | 3 +- clang/test/ExtractAPI/struct.c | 12 +++++--- clang/test/ExtractAPI/underscored.c | 3 +- 9 files changed, 79 insertions(+), 39 deletions(-) diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp index 988ecd2..641f1ae 100644 --- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp +++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp @@ -559,6 +559,7 @@ void SymbolGraphSerializer::serializeRelationship(RelationshipKind Kind, Object Relationship; Relationship["source"] = Source.USR; Relationship["target"] = Target.USR; + Relationship["targetFallback"] = Target.Name; Relationship["kind"] = getRelationshipString(Kind); Relationships.emplace_back(std::move(Relationship)); diff --git a/clang/test/ExtractAPI/anonymous_record_no_typedef.c b/clang/test/ExtractAPI/anonymous_record_no_typedef.c index e20abfd..abb96db 100644 --- a/clang/test/ExtractAPI/anonymous_record_no_typedef.c +++ b/clang/test/ExtractAPI/anonymous_record_no_typedef.c @@ -56,22 +56,26 @@ struct Vehicle { { "kind": "memberOf", "source": "c:@S@Vehicle@E@input.h@64@Bicycle", - "target": "c:@S@Vehicle@E@input.h@64" + "target": "c:@S@Vehicle@E@input.h@64", + "targetFallback": "Vehicle::enum (unnamed)" }, { "kind": "memberOf", "source": "c:@S@Vehicle@E@input.h@64@Car", - "target": "c:@S@Vehicle@E@input.h@64" + "target": "c:@S@Vehicle@E@input.h@64", + "targetFallback": "Vehicle::enum (unnamed)" }, { "kind": "memberOf", "source": "c:@S@Vehicle@FI@type", - "target": "c:@S@Vehicle" + "target": "c:@S@Vehicle", + "targetFallback": "Vehicle" }, { "kind": "memberOf", "source": "c:@S@Vehicle@FI@information", - "target": "c:@S@Vehicle" + "target": "c:@S@Vehicle", + "targetFallback": "Vehicle" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/enum.c b/clang/test/ExtractAPI/enum.c index 07d8480..7b34546 100644 --- a/clang/test/ExtractAPI/enum.c +++ b/clang/test/ExtractAPI/enum.c @@ -65,57 +65,68 @@ enum { { "kind": "memberOf", "source": "c:@E@Vehicle@Bicycle", - "target": "c:@E@Vehicle" + "target": "c:@E@Vehicle", + "targetFallback": "Vehicle" }, { "kind": "memberOf", "source": "c:@E@Vehicle@Car", - "target": "c:@E@Vehicle" + "target": "c:@E@Vehicle", + "targetFallback": "Vehicle" }, { "kind": "memberOf", "source": "c:@E@Vehicle@Train", - "target": "c:@E@Vehicle" + "target": "c:@E@Vehicle", + "targetFallback": "Vehicle" }, { "kind": "memberOf", "source": "c:@E@Vehicle@Ship", - "target": "c:@E@Vehicle" + "target": "c:@E@Vehicle", + "targetFallback": "Vehicle" }, { "kind": "memberOf", "source": "c:@E@Vehicle@Airplane", - "target": "c:@E@Vehicle" + "target": "c:@E@Vehicle", + "targetFallback": "Vehicle" }, { "kind": "memberOf", "source": "c:@E@Direction@North", - "target": "c:@E@Direction" + "target": "c:@E@Direction", + "targetFallback": "Direction" }, { "kind": "memberOf", "source": "c:@E@Direction@East", - "target": "c:@E@Direction" + "target": "c:@E@Direction", + "targetFallback": "Direction" }, { "kind": "memberOf", "source": "c:@E@Direction@South", - "target": "c:@E@Direction" + "target": "c:@E@Direction", + "targetFallback": "Direction" }, { "kind": "memberOf", "source": "c:@E@Direction@West", - "target": "c:@E@Direction" + "target": "c:@E@Direction", + "targetFallback": "Direction" }, { "kind": "memberOf", "source": "c:@Ea@Constant@Constant", - "target": "c:@Ea@Constant" + "target": "c:@Ea@Constant", + "targetFallback": "enum (unnamed)" }, { "kind": "memberOf", "source": "c:@Ea@OtherConstant@OtherConstant", - "target": "c:@Ea@OtherConstant" + "target": "c:@Ea@OtherConstant", + "targetFallback": "enum (unnamed)" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/objc_category.m b/clang/test/ExtractAPI/objc_category.m index 56bac43..185016d 100644 --- a/clang/test/ExtractAPI/objc_category.m +++ b/clang/test/ExtractAPI/objc_category.m @@ -54,22 +54,26 @@ { "kind": "memberOf", "source": "c:objc(cs)Interface(im)InstanceMethod", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "memberOf", "source": "c:objc(cs)Interface(cm)ClassMethod", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "memberOf", "source": "c:objc(cs)Interface(py)Property", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "conformsTo", "source": "c:objc(cs)Interface", - "target": "c:objc(pl)Protocol" + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/objc_interface.m b/clang/test/ExtractAPI/objc_interface.m index 740a215..159e97a 100644 --- a/clang/test/ExtractAPI/objc_interface.m +++ b/clang/test/ExtractAPI/objc_interface.m @@ -57,37 +57,44 @@ { "kind": "memberOf", "source": "c:objc(cs)Super(cm)getWithProperty:", - "target": "c:objc(cs)Super" + "target": "c:objc(cs)Super", + "targetFallback": "Super" }, { "kind": "memberOf", "source": "c:objc(cs)Super(im)setProperty:andOtherThing:", - "target": "c:objc(cs)Super" + "target": "c:objc(cs)Super", + "targetFallback": "Super" }, { "kind": "memberOf", "source": "c:objc(cs)Super(py)Property", - "target": "c:objc(cs)Super" + "target": "c:objc(cs)Super", + "targetFallback": "Super" }, { "kind": "conformsTo", "source": "c:objc(cs)Super", - "target": "c:objc(pl)Protocol" + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" }, { "kind": "memberOf", "source": "c:objc(cs)Derived@Ivar", - "target": "c:objc(cs)Derived" + "target": "c:objc(cs)Derived", + "targetFallback": "Derived" }, { "kind": "memberOf", "source": "c:objc(cs)Derived(im)getIvar", - "target": "c:objc(cs)Derived" + "target": "c:objc(cs)Derived", + "targetFallback": "Derived" }, { "kind": "inheritsFrom", "source": "c:objc(cs)Derived", - "target": "c:objc(cs)Super" + "target": "c:objc(cs)Super", + "targetFallback": "Super" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/objc_property.m b/clang/test/ExtractAPI/objc_property.m index 1b50950..f09a5ad 100644 --- a/clang/test/ExtractAPI/objc_property.m +++ b/clang/test/ExtractAPI/objc_property.m @@ -55,37 +55,44 @@ { "kind": "memberOf", "source": "c:objc(cs)Interface(cpy)myInterfaceTypeProp", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "memberOf", "source": "c:objc(cs)Interface(py)myInterfaceInstanceProp", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "memberOf", "source": "c:objc(cs)Interface(cpy)myCategoryTypeProp", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "memberOf", "source": "c:objc(cs)Interface(py)myCategoryInstanceProp", - "target": "c:objc(cs)Interface" + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" }, { "kind": "conformsTo", "source": "c:objc(cs)Interface", - "target": "c:objc(pl)Protocol" + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" }, { "kind": "memberOf", "source": "c:objc(pl)Protocol(cpy)myProtocolTypeProp", - "target": "c:objc(pl)Protocol" + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" }, { "kind": "memberOf", "source": "c:objc(pl)Protocol(py)myProtocolInstanceProp", - "target": "c:objc(pl)Protocol" + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/objc_protocol.m b/clang/test/ExtractAPI/objc_protocol.m index 0368509..d9a65f4 100644 --- a/clang/test/ExtractAPI/objc_protocol.m +++ b/clang/test/ExtractAPI/objc_protocol.m @@ -49,7 +49,8 @@ { "kind": "conformsTo", "source": "c:objc(pl)AnotherProtocol", - "target": "c:objc(pl)Protocol" + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/struct.c b/clang/test/ExtractAPI/struct.c index 51605576..7e93f0d 100644 --- a/clang/test/ExtractAPI/struct.c +++ b/clang/test/ExtractAPI/struct.c @@ -52,22 +52,26 @@ struct Color { { "kind": "memberOf", "source": "c:@S@Color@FI@Red", - "target": "c:@S@Color" + "target": "c:@S@Color", + "targetFallback": "Color" }, { "kind": "memberOf", "source": "c:@S@Color@FI@Green", - "target": "c:@S@Color" + "target": "c:@S@Color", + "targetFallback": "Color" }, { "kind": "memberOf", "source": "c:@S@Color@FI@Blue", - "target": "c:@S@Color" + "target": "c:@S@Color", + "targetFallback": "Color" }, { "kind": "memberOf", "source": "c:@S@Color@FI@Alpha", - "target": "c:@S@Color" + "target": "c:@S@Color", + "targetFallback": "Color" } ], "symbols": [ diff --git a/clang/test/ExtractAPI/underscored.c b/clang/test/ExtractAPI/underscored.c index 47f1893..6eeaf1c 100644 --- a/clang/test/ExtractAPI/underscored.c +++ b/clang/test/ExtractAPI/underscored.c @@ -65,7 +65,8 @@ typedef _HiddenTypedef ExposedTypedefToHidden; { "kind": "memberOf", "source": "c:@S@ExposedRecord@FI@a", - "target": "c:@S@ExposedRecord" + "target": "c:@S@ExposedRecord", + "targetFallback": "ExposedRecord" } ], "symbols": [ -- 2.7.4