diff --git a/src/EditorFeatures/CSharpTest/TypeInferrer/TypeInferrerTests.cs b/src/EditorFeatures/CSharpTest/TypeInferrer/TypeInferrerTests.cs index 7a09c17c1c61e41b19287b77a6b8c2df2c46f7a2..4b2714989ad6f7e12999ef09bf05425c1233ec15 100644 --- a/src/EditorFeatures/CSharpTest/TypeInferrer/TypeInferrerTests.cs +++ b/src/EditorFeatures/CSharpTest/TypeInferrer/TypeInferrerTests.cs @@ -2028,5 +2028,22 @@ public async Task TestDeconstruction() await TestInMethodAsync( @"[|(int i, _)|] =", "global::System.Object"); } + + [WorkItem(13402, "https://github.com/dotnet/roslyn/issues/13402")] + [Fact, Trait(Traits.Feature, Traits.Features.TypeInferenceService)] + public async Task TestObjectCreationBeforeBlock() + { + var text = +@"class Program +{ + static void Main(string[] args) + { + Program p = new [||] + { } + } +}"; + + await TestAsync(text, "global::Program", testNode: false); + } } } \ No newline at end of file diff --git a/src/Workspaces/CSharp/Portable/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs b/src/Workspaces/CSharp/Portable/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs index c5e1b0cfda651c0ec895a82068c78262bf953bea..d37fccbe0ea3adc8b1148d2770b30f49db5b5c99 100644 --- a/src/Workspaces/CSharp/Portable/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs +++ b/src/Workspaces/CSharp/Portable/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs @@ -191,6 +191,7 @@ protected override IEnumerable InferTypesWorker_DoNotCallDire switch (parent) { + case AnonymousObjectCreationExpressionSyntax anonymousObjectCreation: return InferTypeInAnonymousObjectCreation(anonymousObjectCreation); case AnonymousObjectMemberDeclaratorSyntax memberDeclarator: return InferTypeInMemberDeclarator(memberDeclarator, token); case ArgumentListSyntax argument: return InferTypeInArgumentList(argument, token); case ArgumentSyntax argument: return InferTypeInArgument(argument, token); @@ -240,6 +241,8 @@ protected override IEnumerable InferTypesWorker_DoNotCallDire } } + private IEnumerable InferTypeInAnonymousObjectCreation(AnonymousObjectCreationExpressionSyntax expression) => InferTypes(expression.SpanStart); + private IEnumerable InferTypeInArgument( ArgumentSyntax argument, SyntaxToken? previousToken = null) {