Skip to content

Commit feb1b55

Browse files
committed
[Name lookup] Look through parentheses when finding type references.
When resolving type declarations in, e.g., the inherited type declarations request, look through parenthesized types. Fixes rdar://problem/45527696.
1 parent 54615ff commit feb1b55

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

lib/AST/NameLookup.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2438,6 +2438,15 @@ directReferencesForTypeRepr(Evaluator &evaluator,
24382438
case TypeReprKind::Dictionary:
24392439
return { 1, ctx.getDictionaryDecl()};
24402440

2441+
case TypeReprKind::Tuple: {
2442+
auto tupleRepr = cast<TupleTypeRepr>(typeRepr);
2443+
if (tupleRepr->isParenType()) {
2444+
return directReferencesForTypeRepr(evaluator, ctx,
2445+
tupleRepr->getElementType(0), dc);
2446+
}
2447+
return { };
2448+
}
2449+
24412450
case TypeReprKind::Error:
24422451
case TypeReprKind::Function:
24432452
case TypeReprKind::InOut:
@@ -2446,7 +2455,6 @@ directReferencesForTypeRepr(Evaluator &evaluator,
24462455
case TypeReprKind::Protocol:
24472456
case TypeReprKind::Shared:
24482457
case TypeReprKind::SILBox:
2449-
case TypeReprKind::Tuple:
24502458
return { };
24512459

24522460
case TypeReprKind::Fixed:

test/decl/protocol/inherited.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
// Allow inheritance from parenthesized protocol names.
4+
protocol DefaultItem {}
5+
6+
extension DefaultItem {
7+
var isEnabled: Bool { return true }
8+
}
9+
10+
protocol Item: (DefaultItem) {}
11+
12+
func test(item: Item) {
13+
_ = item.isEnabled
14+
}

0 commit comments

Comments
 (0)