Skip to content

Commit b7a4088

Browse files
committed
Add SelectAsArrayAsync which does not require a state argument
1 parent eef5e31 commit b7a4088

5 files changed

Lines changed: 38 additions & 23 deletions

File tree

src/Compilers/Core/Portable/Collections/ImmutableArrayExtensions.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,21 @@ public static async ValueTask<ImmutableArray<TResult>> SelectAsArrayAsync<TItem,
289289
return builder.ToImmutableAndFree();
290290
}
291291

292+
/// <summary>
293+
/// Maps an immutable array through a function that returns ValueTasks, returning the new ImmutableArray.
294+
/// </summary>
295+
public static async ValueTask<ImmutableArray<TResult>> SelectAsArrayAsync<TItem, TArg, TResult>(this ImmutableArray<TItem> array, Func<TItem, TArg, CancellationToken, ValueTask<TResult>> selector, TArg arg, CancellationToken cancellationToken)
296+
{
297+
var builder = ArrayBuilder<TResult>.GetInstance(array.Length);
298+
299+
foreach (var item in array)
300+
{
301+
builder.Add(await selector(item, arg, cancellationToken).ConfigureAwait(false));
302+
}
303+
304+
return builder.ToImmutableAndFree();
305+
}
306+
292307
public static ValueTask<ImmutableArray<TResult>> SelectManyAsArrayAsync<TItem, TArg, TResult>(this ImmutableArray<TItem> source, Func<TItem, TArg, CancellationToken, ValueTask<ImmutableArray<TResult>>> selector, TArg arg, CancellationToken cancellationToken)
293308
{
294309
if (source.Length == 0)

src/Features/Core/Portable/FindUsages/IRemoteFindUsagesService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ public static SerializableDefinitionItem Dehydrate(int id, DefinitionItem item)
249249

250250
public async ValueTask<DefinitionItem.DefaultDefinitionItem> RehydrateAsync(Solution solution, CancellationToken cancellationToken)
251251
{
252-
var sourceSpans = await SourceSpans.SelectAsArrayAsync((ss, cancellationToken) => ss.RehydrateAsync(solution, cancellationToken), cancellationToken).ConfigureAwait(false);
252+
var sourceSpans = await SourceSpans.SelectAsArrayAsync(static (ss, solution, cancellationToken) => ss.RehydrateAsync(solution, cancellationToken), solution, cancellationToken).ConfigureAwait(false);
253253

254254
return new DefinitionItem.DefaultDefinitionItem(
255255
Tags,

src/Features/Core/Portable/InheritanceMargin/AbstractInheritanceMarginService_Helpers.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -394,20 +394,20 @@ private static async ValueTask AddInheritanceMemberItemsForMembersAsync(
394394
var baseSymbolItems = await baseSymbols
395395
.SelectAsArray(symbol => symbol.OriginalDefinition)
396396
.Distinct()
397-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(
397+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(
398398
solution,
399399
symbol,
400400
InheritanceRelationship.InheritedInterface,
401-
cancellationToken), cancellationToken)
401+
cancellationToken), solution, cancellationToken)
402402
.ConfigureAwait(false);
403403

404404
var derivedTypeItems = await derivedTypesSymbols
405405
.SelectAsArray(symbol => symbol.OriginalDefinition)
406406
.Distinct()
407-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(solution,
407+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(solution,
408408
symbol,
409409
InheritanceRelationship.ImplementingType,
410-
cancellationToken), cancellationToken)
410+
cancellationToken), solution, cancellationToken)
411411
.ConfigureAwait(false);
412412

413413
var nonNullBaseSymbolItems = GetNonNullTargetItems(baseSymbolItems);
@@ -431,11 +431,11 @@ private static async ValueTask AddInheritanceMemberItemsForMembersAsync(
431431
var implementedMemberItems = await implementingMembers
432432
.SelectAsArray(symbol => symbol.OriginalDefinition)
433433
.Distinct()
434-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(
434+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(
435435
solution,
436436
symbol,
437437
InheritanceRelationship.ImplementingMember,
438-
cancellationToken), cancellationToken).ConfigureAwait(false);
438+
cancellationToken), solution, cancellationToken).ConfigureAwait(false);
439439

440440
var nonNullImplementedMemberItems = GetNonNullTargetItems(implementedMemberItems);
441441
return InheritanceMarginItem.CreateOrdered(
@@ -459,19 +459,19 @@ private static async ValueTask AddInheritanceMemberItemsForMembersAsync(
459459
var baseSymbolItems = await baseSymbols
460460
.SelectAsArray(symbol => symbol.OriginalDefinition)
461461
.Distinct()
462-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(
462+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(
463463
solution,
464464
symbol,
465465
symbol.IsInterfaceType() ? InheritanceRelationship.ImplementedInterface : InheritanceRelationship.BaseType,
466-
cancellationToken), cancellationToken).ConfigureAwait(false);
466+
cancellationToken), solution, cancellationToken).ConfigureAwait(false);
467467

468468
var derivedTypeItems = await derivedTypesSymbols
469469
.SelectAsArray(symbol => symbol.OriginalDefinition)
470470
.Distinct()
471-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(solution,
471+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(solution,
472472
symbol,
473473
InheritanceRelationship.DerivedType,
474-
cancellationToken), cancellationToken)
474+
cancellationToken), solution, cancellationToken)
475475
.ConfigureAwait(false);
476476

477477
var nonNullBaseSymbolItems = GetNonNullTargetItems(baseSymbolItems);
@@ -497,29 +497,29 @@ private static async ValueTask AddInheritanceMemberItemsForMembersAsync(
497497
var implementedMemberItems = await implementedMembers
498498
.SelectAsArray(symbol => symbol.OriginalDefinition)
499499
.Distinct()
500-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(
500+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(
501501
solution,
502502
symbol,
503503
InheritanceRelationship.ImplementedMember,
504-
cancellationToken), cancellationToken).ConfigureAwait(false);
504+
cancellationToken), solution, cancellationToken).ConfigureAwait(false);
505505

506506
var overriddenMemberItems = await overriddenMembers
507507
.SelectAsArray(symbol => symbol.OriginalDefinition)
508508
.Distinct()
509-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(
509+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(
510510
solution,
511511
symbol,
512512
InheritanceRelationship.OverriddenMember,
513-
cancellationToken), cancellationToken).ConfigureAwait(false);
513+
cancellationToken), solution, cancellationToken).ConfigureAwait(false);
514514

515515
var overridingMemberItems = await overridingMembers
516516
.SelectAsArray(symbol => symbol.OriginalDefinition)
517517
.Distinct()
518-
.SelectAsArrayAsync((symbol, _) => CreateInheritanceItemAsync(
518+
.SelectAsArrayAsync(static (symbol, solution, cancellationToken) => CreateInheritanceItemAsync(
519519
solution,
520520
symbol,
521521
InheritanceRelationship.OverridingMember,
522-
cancellationToken), cancellationToken).ConfigureAwait(false);
522+
cancellationToken), solution, cancellationToken).ConfigureAwait(false);
523523

524524
var nonNullImplementedMemberItems = GetNonNullTargetItems(implementedMemberItems);
525525
var nonNullOverriddenMemberItems = GetNonNullTargetItems(overriddenMemberItems);

src/Features/Core/Portable/ValueTracking/ValueTrackingService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public async Task<ImmutableArray<ValueTrackedItem>> TrackValueSourceAsync(
4747
}
4848

4949
return await result.Value.SelectAsArrayAsync(
50-
(item, cancellationToken) => item.RehydrateAsync(solution, cancellationToken), cancellationToken).ConfigureAwait(false);
50+
static (item, solution, cancellationToken) => item.RehydrateAsync(solution, cancellationToken), solution, cancellationToken).ConfigureAwait(false);
5151
}
5252

5353
var progressTracker = new ValueTrackingProgressCollector();
@@ -77,7 +77,7 @@ public async Task<ImmutableArray<ValueTrackedItem>> TrackValueSourceAsync(
7777
}
7878

7979
return await result.Value.SelectAsArrayAsync(
80-
(item, cancellationToken) => item.RehydrateAsync(solution, cancellationToken), cancellationToken).ConfigureAwait(false);
80+
static (item, solution, cancellationToken) => item.RehydrateAsync(solution, cancellationToken), solution, cancellationToken).ConfigureAwait(false);
8181
}
8282

8383
var progressTracker = new ValueTrackingProgressCollector();

src/VisualStudio/Core/Def/ValueTracking/ValueTrackedTreeItemViewModel.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,11 @@ private async Task<ImmutableArray<TreeItemViewModel>> CalculateChildrenAsync(Can
191191
var valueTrackedItems = await _valueTrackingService.TrackValueSourceAsync(
192192
_solution, _trackedItem, cancellationToken).ConfigureAwait(false);
193193

194-
return await valueTrackedItems.SelectAsArrayAsync((item, cancellationToken) =>
194+
return await valueTrackedItems.SelectAsArrayAsync(static (item, self, cancellationToken) =>
195195
CreateAsync(
196-
_solution, item, children: ImmutableArray<TreeItemViewModel>.Empty,
197-
TreeViewModel, _glyphService, _valueTrackingService, _globalOptions,
198-
ThreadingContext, _listener, _threadOperationExecutor, cancellationToken), cancellationToken).ConfigureAwait(false);
196+
self._solution, item, children: ImmutableArray<TreeItemViewModel>.Empty,
197+
self.TreeViewModel, self._glyphService, self._valueTrackingService, self._globalOptions,
198+
self.ThreadingContext, self._listener, self._threadOperationExecutor, cancellationToken), this, cancellationToken).ConfigureAwait(false);
199199
}
200200
}
201201
}

0 commit comments

Comments
 (0)