Roslyn: VB: IDE crashes in the middle of typing an Import statement with an alias.

Created on 9 Sep 2017  路  4Comments  路  Source: dotnet/roslyn

Version Used:

Visual Studio Community 2017 v15.3.3

Steps to Reproduce:

We start with some code that uses an Imports declaration with an alias for a list type:

vs_import_tuples_1

So we delete the String keyword:

vs_import_tuples_2

Then we start typing the opening bracket and it crashes a split second after the bracket appears in the editor:

vs_import_tuples_3

You can produce the crash directly by typing in this malformed code:

Imports Boom = System.Collections.Generic.List(Of () '<---put caret between brackets.

Public Module Module1
  Public Sub Main()
  End Sub
End Module

...which doesn't crash until you put the caret between the brackets and press space as if you want to start typing something.

Expected Behavior:

IDE should just show a syntax error squiggly and wait for you to fix it. In fact this is what it does if you keep typing away elsewhere (e.g inside Sub Main()). It only crashes when you type inside the brackets of the malformed line as indicated above.

Actual Behavior:

It crashes completely! It seems there are a lot of corner cases regarding support for VB tuples in the IDE, that need to be ironed out. @jcouv could this be similar to #21812 where some code is not expecting tuple syntax?

Area-IDE Bug Tenet-Reliability

All 4 comments

This repros with Version 15.4.0 Preview 2.0 [26906.1.d15rel]. Based on stacktrace below, I'll assign to IDE team.
@Pilchie for triage. Thanks

   at System.Collections.Generic.Dictionary`2.get_Item(TKey key) in f:\dd\ndp\clr\src\BCL\system\collections\generic\dictionary.cs:line 184
   at Microsoft.CodeAnalysis.VisualBasic.Completion.Providers.SymbolCompletionProvider.GetCompletionItemRules(List`1 symbols, SyntaxContext context, Boolean preselect) in D:\repos\roslyn\src\Features\VisualBasic\Portable\Completion\CompletionProviders\SymbolCompletionProvider.vb:line 137
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractRecommendationServiceBasedCompletionProvider.CreateItem(String displayText, String insertionText, List`1 symbols, SyntaxContext context, Boolean preselect, SupportedPlatformData supportedPlatformData) in D:\repos\roslyn\src\Features\Core\Portable\Completion\Providers\AbstractRecommendationServiceBasedCompletionProvider.cs:line 63
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractSymbolCompletionProvider.CreateItem(String displayText, String insertionText, List`1 symbols, SyntaxContext context, Dictionary`2 invalidProjectMap, List`1 totalProjects, Boolean preselect) in D:\repos\roslyn\src\Features\Core\Portable\Completion\Providers\AbstractSymbolCompletionProvider.cs:line 115
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractSymbolCompletionProvider.<>c__DisplayClass6_0.<CreateItems>b__3(IGrouping`2 g) in D:\repos\roslyn\src\Features\Core\Portable\Completion\Providers\AbstractSymbolCompletionProvider.cs:line 55
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() in f:\dd\ndp\fx\src\Core\System\Linq\Enumerable.cs:line 292
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source) in f:\dd\ndp\fx\src\Core\System\Linq\Enumerable.cs:line 2573
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) in f:\dd\ndp\fx\src\Core\System\Linq\Enumerable.cs:line 830
   at System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items) in D:\A\_work\118\s\src\System.Collections.Immutable\src\System\Collections\Immutable\ImmutableArray.cs:line 139
   at System.Collections.Immutable.ImmutableArray.ToImmutableArray[TSource](IEnumerable`1 items) in D:\A\_work\118\s\src\System.Collections.Immutable\src\System\Collections\Immutable\ImmutableArray.cs:line 399
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractSymbolCompletionProvider.CreateItems(ImmutableArray`1 symbols, SyntaxContext context, Boolean preselect) in D:\repos\roslyn\src\Features\Core\Portable\Completion\Providers\AbstractSymbolCompletionProvider.cs:line 59
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractSymbolCompletionProvider.<GetItemsWorkerAsync>d__15.MoveNext() in D:\repos\roslyn\src\Features\Core\Portable\Completion\Providers\AbstractSymbolCompletionProvider.cs:line 195
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 184
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 156
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 530
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractSymbolCompletionProvider.<ProvideCompletionsAsync>d__14.MoveNext() in D:\repos\roslyn\src\Features\Core\Portable\Completion\Providers\AbstractSymbolCompletionProvider.cs:line 176
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 184
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 156
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult() in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 441
   at Microsoft.CodeAnalysis.Completion.CompletionServiceWithProviders.<GetContextAsync>d__31.MoveNext() in D:\repos\roslyn\src\Features\Core\Portable\Completion\CompletionServiceWithProviders.cs:line 449
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 184
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 156
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 530
   at Microsoft.CodeAnalysis.Completion.CompletionServiceWithProviders.<ComputeNonEmptyCompletionContextsAsync>d__24.MoveNext() in D:\repos\roslyn\src\Features\Core\Portable\Completion\CompletionServiceWithProviders.cs:line 311
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 184
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 156
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 530
   at Microsoft.CodeAnalysis.Completion.CompletionServiceWithProviders.<GetCompletionsAsync>d__22.MoveNext() in D:\repos\roslyn\src\Features\Core\Portable\Completion\CompletionServiceWithProviders.cs:line 241
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 184
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 156
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 530
   at Microsoft.CodeAnalysis.Completion.CompletionService.<GetCompletionsAndSetItemDocumentAsync>d__11.MoveNext() in D:\repos\roslyn\src\Features\Core\Portable\Completion\CompletionService.cs:line 183
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 184
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 156
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() in f:\dd\ndp\clr\src\BCL\system\runtime\compilerservices\TaskAwaiter.cs:line 530
   at Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion.Controller.Session.ModelComputer.<DoInBackgroundAsync>d__13.MoveNext() in D:\repos\roslyn\src\EditorFeatures\Core\Implementation\IntelliSense\Completion\Controller.Session_ComputeModel.cs:line 103

@jcouv handling Rosyln issues on a Sunday? No rest for the weary! Many thanks for following up 馃槃

Assigning to @rchande to take a look.

@dpoeschl FYI.

@rchande @Pilchie @jcouv: you guys are awesome, thanks for a super fast resolution 馃憤 馃憤

Was this page helpful?
0 / 5 - 0 ratings