Skip to content

Commit 6e45d6b

Browse files
committed
Fix SR-642 Code completion does not instantiate concrete element type of optional Set
1 parent e6a1dae commit 6e45d6b

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,9 +1708,10 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
17081708
Type ContextTy = VD->getDeclContext()->getDeclaredTypeOfContext();
17091709
if (ContextTy) {
17101710
Type MaybeNominalType = ExprType->getRValueInstanceType();
1711-
if (ContextTy->getAnyNominal() == MaybeNominalType->getAnyNominal() &&
1711+
if (ContextTy->lookThroughAllAnyOptionalTypes()->getAnyNominal() ==
1712+
MaybeNominalType->lookThroughAllAnyOptionalTypes()->getAnyNominal() &&
17121713
!isBoringBoundGenericType(MaybeNominalType)) {
1713-
if (Type T = MaybeNominalType->getTypeOfMember(
1714+
if (Type T = MaybeNominalType->lookThroughAllAnyOptionalTypes()->getTypeOfMember(
17141715
CurrDeclContext->getParentModule(), VD, TypeResolver.get()))
17151716
return TransformerPt ? T.transform(TransformerPt->getTransformerFunc()) :
17161717
T;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OPTIONAL_1 | FileCheck %s -check-prefix=FOO_OPTIONAL_1
2+
3+
struct Bar {
4+
}
5+
6+
struct Foo<T> {
7+
func myFunction(foobar: T) {
8+
}
9+
}
10+
11+
// SR-642 Code completion does not instantiate generic arguments of a type wrapped in an optional
12+
let x: Foo<Bar>? = Foo<Bar>()
13+
x.#^FOO_OPTIONAL_1^#
14+
// FOO_OPTIONAL_1: Begin completions, 4 items
15+
// FOO_OPTIONAL_1-DAG: Decl[InstanceMethod]/CurrNominal/Erase[1]: ?.myFunction({#(foobar): Bar#})[#Void#]; name=myFunction(foobar: Bar)
16+
// FOO_OPTIONAL_1: End completions

0 commit comments

Comments
 (0)