From 991ae7e783502f5f93c834f154645fe2be3388f5 Mon Sep 17 00:00:00 2001 From: Julien Couvreur Date: Mon, 22 Jan 2018 12:11:32 -0800 Subject: [PATCH] SignatureHelp: fix display or ref-returning indexer (#24359) --- ...essExpressionSignatureHelpProviderTests.cs | 46 +++++++++++++++++++ ...ntAccessExpressionSignatureHelpProvider.cs | 13 ++++++ 2 files changed, 59 insertions(+) diff --git a/src/EditorFeatures/CSharpTest/SignatureHelp/ElementAccessExpressionSignatureHelpProviderTests.cs b/src/EditorFeatures/CSharpTest/SignatureHelp/ElementAccessExpressionSignatureHelpProviderTests.cs index 95d29da1b1c..74bd5c02375 100644 --- a/src/EditorFeatures/CSharpTest/SignatureHelp/ElementAccessExpressionSignatureHelpProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/SignatureHelp/ElementAccessExpressionSignatureHelpProviderTests.cs @@ -52,6 +52,52 @@ void Goo() await TestAsync(markup, expectedOrderedItems); } + [Fact, Trait(Traits.Feature, Traits.Features.SignatureHelp)] + [WorkItem(24311, "https://github.com/dotnet/roslyn/issues/24311")] + public async Task TestInvocationWithParametersOn1_WithRefReturn() + { + var markup = @" +class C +{ + public ref int this[int a] + { + get { throw null; } + } + void Goo(C c) + { + [|c[$$]|] + } +}"; + + var expectedOrderedItems = new List(); + expectedOrderedItems.Add(new SignatureHelpTestItem("ref int C[int a]", string.Empty, string.Empty, currentParameterIndex: 0)); + + await TestAsync(markup, expectedOrderedItems); + } + + [Fact, Trait(Traits.Feature, Traits.Features.SignatureHelp)] + [WorkItem(24311, "https://github.com/dotnet/roslyn/issues/24311")] + public async Task TestInvocationWithParametersOn1_WithRefReadonlyReturn() + { + var markup = @" +class C +{ + public ref readonly int this[int a] + { + get { throw null; } + } + void Goo(C c) + { + [|c[$$]|] + } +}"; + + var expectedOrderedItems = new List(); + expectedOrderedItems.Add(new SignatureHelpTestItem("ref readonly int C[int a]", string.Empty, string.Empty, currentParameterIndex: 0)); + + await TestAsync(markup, expectedOrderedItems); + } + [WorkItem(636117, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/636117")] [Fact, Trait(Traits.Feature, Traits.Features.SignatureHelp)] public async Task TestInvocationOnExpression() diff --git a/src/Features/CSharp/Portable/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs b/src/Features/CSharp/Portable/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs index ef8048e0488..a1dfc8f3766 100644 --- a/src/Features/CSharp/Portable/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs +++ b/src/Features/CSharp/Portable/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs @@ -246,6 +246,19 @@ public override SignatureHelpState GetCurrentArgumentState(SyntaxNode root, int { var result = new List(); + if (indexer.ReturnsByRef) + { + result.Add(Keyword(SyntaxKind.RefKeyword)); + result.Add(Space()); + } + else if (indexer.ReturnsByRefReadonly) + { + result.Add(Keyword(SyntaxKind.RefKeyword)); + result.Add(Space()); + result.Add(Keyword(SyntaxKind.ReadOnlyKeyword)); + result.Add(Space()); + } + result.AddRange(indexer.Type.ToMinimalDisplayParts(semanticModel, position)); result.Add(Space()); result.AddRange(indexer.ContainingType.ToMinimalDisplayParts(semanticModel, position)); -- GitLab