Skip to content

Commit a9f84e2

Browse files
Copilotdavidwengier
andcommitted
Replace interface-based collection types in ElementCompletionResult with concrete types
Co-authored-by: davidwengier <754264+davidwengier@users.noreply.github.com>
1 parent f5ad432 commit a9f84e2

File tree

5 files changed

+16
-29
lines changed

5 files changed

+16
-29
lines changed

src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.LegacyEditor/RazorWrapperFactory.TagHelperCompletionServiceWrapper.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ public ImmutableDictionary<string, ImmutableArray<IRazorTagHelperDescriptor>> Ge
2626
{
2727
var result = Object.GetElementCompletions(Unwrap(completionContext));
2828

29-
var completions = (Dictionary<string, IEnumerable<TagHelperDescriptor>>)result.Completions;
30-
31-
return completions.ToImmutableDictionary(
29+
return result.Completions.ToImmutableDictionary(
3230
keySelector: kvp => kvp.Key,
3331
elementSelector: kvp => WrapAll(kvp.Value, Wrap),
34-
keyComparer: completions.Comparer);
32+
keyComparer: result.Comparer);
3533
}
3634
}
3735
}

src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.LegacyEditor/RazorWrapperFactory.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,6 @@ private static ImmutableArray<TResult> WrapAll<TInner, TResult>(ImmutableArray<T
5858
return builder.ToImmutableAndClear();
5959
}
6060

61-
private static ImmutableArray<TResult> WrapAll<TInner, TResult>(IEnumerable<TInner> items, Func<TInner, TResult> createWrapper)
62-
where TInner : class
63-
where TResult : class
64-
{
65-
using var builder = new PooledArrayBuilder<TResult>();
66-
67-
foreach (var item in items)
68-
{
69-
builder.Add(createWrapper(item));
70-
}
71-
72-
return builder.ToImmutableAndClear();
73-
}
74-
7561
private static ImmutableArray<TResult> InitializeArrayWithWrappedItems<TInner, TResult>(
7662
ref ImmutableArray<TResult> location,
7763
ImmutableArray<TInner> list,

src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/ElementCompletionResult.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,22 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Collections.Immutable;
7+
using System.Collections.ObjectModel;
68
using Microsoft.AspNetCore.Razor.Language;
79

810
namespace Microsoft.CodeAnalysis.Razor.Completion;
911

1012
internal sealed class ElementCompletionResult
1113
{
12-
public IReadOnlyDictionary<string, IEnumerable<TagHelperDescriptor>> Completions { get; }
14+
public ReadOnlyDictionary<string, ImmutableArray<TagHelperDescriptor>> Completions { get; }
1315

14-
private ElementCompletionResult(IReadOnlyDictionary<string, IEnumerable<TagHelperDescriptor>> completions)
16+
public IEqualityComparer<string> Comparer { get; }
17+
18+
private ElementCompletionResult(ReadOnlyDictionary<string, ImmutableArray<TagHelperDescriptor>> completions, IEqualityComparer<string> comparer)
1519
{
1620
Completions = completions;
21+
Comparer = comparer;
1722
}
1823

1924
internal static ElementCompletionResult Create(Dictionary<string, HashSet<TagHelperDescriptor>> completions)
@@ -23,15 +28,15 @@ internal static ElementCompletionResult Create(Dictionary<string, HashSet<TagHel
2328
throw new ArgumentNullException(nameof(completions));
2429
}
2530

26-
var readonlyCompletions = new Dictionary<string, IEnumerable<TagHelperDescriptor>>(
31+
var readonlyCompletions = new Dictionary<string, ImmutableArray<TagHelperDescriptor>>(
2732
capacity: completions.Count,
2833
comparer: completions.Comparer);
2934

3035
foreach (var (key, value) in completions)
3136
{
32-
readonlyCompletions.Add(key, value);
37+
readonlyCompletions.Add(key, value.ToImmutableArray());
3338
}
3439

35-
return new ElementCompletionResult(readonlyCompletions);
40+
return new ElementCompletionResult(new ReadOnlyDictionary<string, ImmutableArray<TagHelperDescriptor>>(readonlyCompletions), completions.Comparer);
3641
}
3742
}

src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Completion/LanguageServerTagHelperCompletionServiceTest.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,9 +1436,8 @@ private static void AssertCompletionsAreEquivalent(ElementCompletionResult expec
14361436

14371437
foreach (var (key, value) in expected.Completions)
14381438
{
1439-
var actualValue = actual.Completions[key];
1440-
Assert.NotNull(actualValue);
1441-
Assert.Equal(value, actualValue);
1439+
Assert.True(actual.Completions.TryGetValue(key, out var actualValue), $"Key '{key}' not found in actual completions");
1440+
Assert.True(value.SequenceEqual(actualValue), $"Values for key '{key}' do not match");
14421441
}
14431442
}
14441443

src/Razor/test/Microsoft.VisualStudio.LegacyEditor.Razor.Test/Completion/LegacyTagHelperCompletionServiceTest.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,9 +1358,8 @@ private static void AssertCompletionsAreEquivalent(ElementCompletionResult expec
13581358

13591359
foreach (var expectedCompletion in expected.Completions)
13601360
{
1361-
var actualValue = actual.Completions[expectedCompletion.Key];
1362-
Assert.NotNull(actualValue);
1363-
Assert.Equal(expectedCompletion.Value, actualValue);
1361+
Assert.True(actual.Completions.TryGetValue(expectedCompletion.Key, out var actualValue), $"Key '{expectedCompletion.Key}' not found in actual completions");
1362+
Assert.True(expectedCompletion.Value.SequenceEqual(actualValue), $"Values for key '{expectedCompletion.Key}' do not match");
13641363
}
13651364
}
13661365

0 commit comments

Comments
 (0)