don't emit both requirementOf and optionalRequirementOf for the same relationship (#76983)

rdar://83519993
This commit is contained in:
QuietMisdreavus
2024-10-18 16:48:39 -06:00
committed by GitHub
parent a0b5e930b5
commit 2f184f7bac
2 changed files with 4 additions and 3 deletions

View File

@@ -465,7 +465,8 @@ void
SymbolGraph::recordRequirementRelationships(Symbol S) {
const auto VD = S.getSymbolDecl();
if (const auto *Protocol = dyn_cast<ProtocolDecl>(VD->getDeclContext())) {
if (VD->isProtocolRequirement()) {
if (VD->isProtocolRequirement() &&
!VD->getAttrs().hasAttribute<OptionalAttr>()) {
recordEdge(Symbol(this, VD, nullptr),
Symbol(this, Protocol, nullptr),
RelationshipKind::RequirementOf());

View File

@@ -9,11 +9,11 @@
// RUN: %FileCheck %s --input-file %t/OptionalRequirementOf.symbols.json
// ObjCProto.objcReq -> ObjCProto
// CHECK-DAG: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto(im)swiftReq",{{[[:space:]]*}}"target": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto"
// CHECK-NOT: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto(im)swiftReq",{{[[:space:]]*}}"target": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto"
// CHECK-DAG: "kind": "optionalRequirementOf",{{[[:space:]]*}}"source": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto(im)swiftReq",{{[[:space:]]*}}"target": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto"
// SwiftProto.swiftReq -> SwiftProto
// CHECK-DAG: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:objc(pl)ObjCProto(im)objcReq",{{[[:space:]]*}}"target": "c:objc(pl)ObjCProto"
// CHECK-NOT: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:objc(pl)ObjCProto(im)objcReq",{{[[:space:]]*}}"target": "c:objc(pl)ObjCProto"
// CHECK-DAG: "kind": "optionalRequirementOf",{{[[:space:]]*}}"source": "c:objc(pl)ObjCProto(im)objcReq",{{[[:space:]]*}}"target": "c:objc(pl)ObjCProto"
//--- reqs.swift