From b0b5351e20a48304fe3dd8ea3fa8148567fad7e7 Mon Sep 17 00:00:00 2001 From: Ivan Basov Date: Thu, 3 Jan 2019 18:04:14 -0800 Subject: [PATCH] async completion: fixing 'Nullable object must have a value' when deleting the whole word (#32143) --- .../AsyncCompletion/ItemManager.cs | 4 +-- .../CSharpCompletionCommandHandlerTests.vb | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/ItemManager.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/ItemManager.cs index 8c068148af1..5c619924703 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/ItemManager.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/ItemManager.cs @@ -329,8 +329,8 @@ private static bool IsAfterDot(ITextSnapshot snapshot, ITrackingSpan applicableT return new FilteredCompletionModel( highlightedList, index, filters, hardSelect ? UpdateSelectionHint.Selected : UpdateSelectionHint.SoftSelected, - centerSelection: true, - uniqueItem: matchCount == 1 ? bestFilterResult.Value.VSCompletionItem : default); + centerSelection: true, + uniqueItem: matchCount == 1 ? bestFilterResult.GetValueOrDefault().VSCompletionItem : default); } private FilteredCompletionModel HandleAllItemsFilteredOut( diff --git a/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb b/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb index 1bd0bf2b83b..9fd362476c5 100644 --- a/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb +++ b/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb @@ -61,6 +61,40 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense End Using End Function + + + Public Async Function TestDeletingWholeWordResetCompletionToTheDefaultItem(completionImplementation As CompletionImplementation) As Task + Using state = TestStateFactory.CreateCSharpTestState(completionImplementation, + + using System; + +class C +{ + void M() + { + var replyUri = new Uri(""); + $$ + } +} + + ) + + state.Workspace.Options = state.Workspace.Options.WithChangedOption( + CompletionOptions.TriggerOnDeletion, LanguageNames.CSharp, True) + + state.SendTypeChars("repl") + state.SendTab() + For i = 1 To 7 + state.SendBackspace() + Await state.WaitForAsynchronousOperationsAsync() + Next + Await state.AssertCompletionSession() + + state.SendBackspace() + Await state.AssertSelectedCompletionItem("AccessViolationException") + End Using + End Function + Public Async Function TestNotAtStartOfExistingWord(completionImplementation As CompletionImplementation) As Task -- GitLab