From 57f248fdbfecc768c7bb05bb7d51092fde892375 Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Sat, 26 Sep 2020 01:30:51 +0200 Subject: [PATCH] Update InferTypeInForEachStatement to respect await foreach --- .../CSharpTypeInferenceService.TypeInferrer.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/CSharp/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/CSharp/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs index 9b1f1a20086..1a69b157013 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/CSharp/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/CSharp/LanguageServices/CSharpTypeInferenceService.TypeInferrer.cs @@ -1230,18 +1230,21 @@ private IEnumerable InferTypeInForEachStatement(ForEachStatem return SpecializedCollections.EmptyEnumerable(); } + + var enumerableType = forEachStatementSyntax.AwaitKeyword == default + ? this.Compilation.GetSpecialType(SpecialType.System_Collections_Generic_IEnumerable_T) + : this.Compilation.GetTypeByMetadataName(typeof(IAsyncEnumerable<>).FullName); + // foreach (int v = Goo()) var variableTypes = GetTypes(forEachStatementSyntax.Type); if (!variableTypes.Any()) { return CreateResult( - this.Compilation.GetSpecialType(SpecialType.System_Collections_Generic_IEnumerable_T) + enumerableType .Construct(Compilation.GetSpecialType(SpecialType.System_Object))); } - var type = this.Compilation.GetSpecialType(SpecialType.System_Collections_Generic_IEnumerable_T); - - return variableTypes.Select(v => new TypeInferenceInfo(type.Construct(v.InferredType))); + return variableTypes.Select(v => new TypeInferenceInfo(enumerableType.Construct(v.InferredType))); } private IEnumerable InferTypeInForStatement(ForStatementSyntax forStatement, ExpressionSyntax expressionOpt = null, SyntaxToken? previousToken = null) -- GitLab