Skip to content

Commit 2f184f7

Browse files
don't emit both requirementOf and optionalRequirementOf for the same relationship (#76983)
rdar://83519993
1 parent a0b5e93 commit 2f184f7

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

lib/SymbolGraphGen/SymbolGraph.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,8 @@ void
465465
SymbolGraph::recordRequirementRelationships(Symbol S) {
466466
const auto VD = S.getSymbolDecl();
467467
if (const auto *Protocol = dyn_cast<ProtocolDecl>(VD->getDeclContext())) {
468-
if (VD->isProtocolRequirement()) {
468+
if (VD->isProtocolRequirement() &&
469+
!VD->getAttrs().hasAttribute<OptionalAttr>()) {
469470
recordEdge(Symbol(this, VD, nullptr),
470471
Symbol(this, Protocol, nullptr),
471472
RelationshipKind::RequirementOf());

test/SymbolGraph/Relationships/OptionalRequirementOf.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
// RUN: %FileCheck %s --input-file %t/OptionalRequirementOf.symbols.json
1010

1111
// ObjCProto.objcReq -> ObjCProto
12-
// CHECK-DAG: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto(im)swiftReq",{{[[:space:]]*}}"target": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto"
12+
// CHECK-NOT: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto(im)swiftReq",{{[[:space:]]*}}"target": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto"
1313
// CHECK-DAG: "kind": "optionalRequirementOf",{{[[:space:]]*}}"source": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto(im)swiftReq",{{[[:space:]]*}}"target": "c:@M@OptionalRequirementOf@objc(pl)SwiftProto"
1414

1515
// SwiftProto.swiftReq -> SwiftProto
16-
// CHECK-DAG: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:objc(pl)ObjCProto(im)objcReq",{{[[:space:]]*}}"target": "c:objc(pl)ObjCProto"
16+
// CHECK-NOT: "kind": "requirementOf",{{[[:space:]]*}}"source": "c:objc(pl)ObjCProto(im)objcReq",{{[[:space:]]*}}"target": "c:objc(pl)ObjCProto"
1717
// CHECK-DAG: "kind": "optionalRequirementOf",{{[[:space:]]*}}"source": "c:objc(pl)ObjCProto(im)objcReq",{{[[:space:]]*}}"target": "c:objc(pl)ObjCProto"
1818

1919
//--- reqs.swift

0 commit comments

Comments
 (0)