Skip to content

Commit f915125

Browse files
Merge pull request #74882 from CyrusNajmabadi/passAlongServices
2 parents b360f99 + eba319a commit f915125

File tree

6 files changed

+31
-28
lines changed

6 files changed

+31
-28
lines changed

src/VisualStudio/Core/Test.Next/Services/AssetProviderTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ private static async Task TestAssetAsync(object data)
5353
var storage = new SolutionAssetCache();
5454
var assetSource = new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), new Dictionary<Checksum, object>() { { checksum, data } });
5555

56-
var provider = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetService<ISerializerService>());
56+
var provider = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
5757
var stored = await provider.GetAssetAsync<object>(AssetPath.FullLookupForTesting, checksum, CancellationToken.None);
5858
Assert.Equal(data, stored);
5959

@@ -84,7 +84,7 @@ public async Task TestAssetSynchronization()
8484
var storage = new SolutionAssetCache();
8585
var assetSource = new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map);
8686

87-
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetService<ISerializerService>());
87+
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
8888
await service.GetAssetsAsync<object>(AssetPath.FullLookupForTesting, new HashSet<Checksum>(map.Keys), CancellationToken.None);
8989

9090
foreach (var kv in map)
@@ -112,7 +112,7 @@ public async Task TestSolutionSynchronization()
112112
var storage = new SolutionAssetCache();
113113
var assetSource = new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map);
114114

115-
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetService<ISerializerService>());
115+
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
116116
await service.SynchronizeSolutionAssetsAsync(await solution.CompilationState.GetChecksumAsync(CancellationToken.None), CancellationToken.None);
117117

118118
TestUtils.VerifyAssetStorage(map, storage);
@@ -137,7 +137,7 @@ public async Task TestProjectSynchronization()
137137
var storage = new SolutionAssetCache();
138138
var assetSource = new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map);
139139

140-
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetService<ISerializerService>());
140+
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
141141

142142
using var _ = ArrayBuilder<ProjectStateChecksums>.GetInstance(out var allProjectChecksums);
143143
allProjectChecksums.Add(await project.State.GetStateChecksumsAsync(CancellationToken.None));
@@ -166,7 +166,7 @@ public async Task TestAssetArrayOrdering()
166166
var storage = new SolutionAssetCache();
167167
var assetSource = new OrderedAssetSource(workspace.Services.GetService<ISerializerService>(), map);
168168

169-
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetService<ISerializerService>());
169+
var service = new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
170170

171171
using var _ = ArrayBuilder<ProjectStateChecksums>.GetInstance(out var allProjectChecksums);
172172
var stateChecksums = await project.State.GetStateChecksumsAsync(CancellationToken.None);

src/VisualStudio/Core/Test.Next/Services/ServiceHubServicesTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ private static async Task<AssetProvider> GetAssetProviderAsync(Workspace workspa
115115
var storage = new SolutionAssetCache();
116116
var assetSource = new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map);
117117

118-
return new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetService<ISerializerService>());
118+
return new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
119119
}
120120

121121
[Fact]

src/VisualStudio/Core/Test.Next/Services/SolutionServiceTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ public async Task TestPartialProjectSync_GetSolutionFirst()
548548

549549
var map = new Dictionary<Checksum, object>();
550550
var assetProvider = new AssetProvider(
551-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
551+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
552552

553553
// Do the initial full sync
554554
await solution.AppendAssetMapAsync(map, CancellationToken.None);
@@ -589,7 +589,7 @@ public async Task TestPartialProjectSync_GetSolutionLast()
589589

590590
var map = new Dictionary<Checksum, object>();
591591
var assetProvider = new AssetProvider(
592-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
592+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
593593

594594
// Syncing project 1 should just since it over.
595595
await solution.AppendAssetMapAsync(map, project1.Id, CancellationToken.None);
@@ -631,7 +631,7 @@ public async Task TestPartialProjectSync_GetDependentProjects1()
631631

632632
var map = new Dictionary<Checksum, object>();
633633
var assetProvider = new AssetProvider(
634-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
634+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
635635

636636
await solution.AppendAssetMapAsync(map, project2.Id, CancellationToken.None);
637637
var project2Checksum = await solution.CompilationState.GetChecksumAsync(project2.Id, CancellationToken.None);
@@ -664,7 +664,7 @@ public async Task TestPartialProjectSync_GetDependentProjects2()
664664

665665
var map = new Dictionary<Checksum, object>();
666666
var assetProvider = new AssetProvider(
667-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
667+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
668668

669669
// syncing P3 should since project P2 as well because of the p2p ref
670670
await solution.AppendAssetMapAsync(map, project3.Id, CancellationToken.None);
@@ -706,7 +706,7 @@ public async Task TestPartialProjectSync_GetDependentProjects3()
706706

707707
var map = new Dictionary<Checksum, object>();
708708
var assetProvider = new AssetProvider(
709-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
709+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
710710

711711
// syncing project3 should since project2 and project1 as well because of the p2p ref
712712
await solution.AppendAssetMapAsync(map, project3.Id, CancellationToken.None);
@@ -746,7 +746,7 @@ public async Task TestPartialProjectSync_GetDependentProjects4()
746746

747747
var map = new Dictionary<Checksum, object>();
748748
var assetProvider = new AssetProvider(
749-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
749+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
750750

751751
// syncing project3 should since project2 and project1 as well because of the p2p ref
752752
await solution.AppendAssetMapAsync(map, project3.Id, CancellationToken.None);
@@ -784,7 +784,7 @@ public async Task TestPartialProjectSync_Options1()
784784

785785
var map = new Dictionary<Checksum, object>();
786786
var assetProvider = new AssetProvider(
787-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
787+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
788788

789789
// Syncing over project1 should give us 1 set of options on the OOP side.
790790
await solution.AppendAssetMapAsync(map, project1.Id, CancellationToken.None);
@@ -817,7 +817,7 @@ public async Task TestPartialProjectSync_DoesNotSeeChangesOutsideOfCone()
817817

818818
var map = new Dictionary<Checksum, object>();
819819
var assetProvider = new AssetProvider(
820-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
820+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
821821

822822
// Do the initial full sync
823823
await solution.AppendAssetMapAsync(map, CancellationToken.None);
@@ -872,7 +872,7 @@ public async Task TestPartialProjectSync_AddP2PRef()
872872

873873
var map = new Dictionary<Checksum, object>();
874874
var assetProvider = new AssetProvider(
875-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
875+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
876876

877877
// Do the initial full sync
878878
await solution.AppendAssetMapAsync(map, CancellationToken.None);
@@ -941,7 +941,7 @@ public async Task TestPartialProjectSync_SourceGeneratorExecutionVersion_1()
941941

942942
var map = new Dictionary<Checksum, object>();
943943
var assetProvider = new AssetProvider(
944-
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.GetService<ISerializerService>());
944+
Checksum.Create(ImmutableArray.CreateRange(Guid.NewGuid().ToByteArray())), new SolutionAssetCache(), new SimpleAssetSource(workspace.Services.GetService<ISerializerService>(), map), remoteWorkspace.Services.SolutionServices);
945945

946946
// Do the initial full sync
947947
await solution.AppendAssetMapAsync(map, CancellationToken.None);
@@ -1277,6 +1277,6 @@ private static async Task<AssetProvider> GetAssetProviderAsync(Workspace workspa
12771277
var storage = new SolutionAssetCache();
12781278
var assetSource = new SimpleAssetSource(workspace.Services.GetRequiredService<ISerializerService>(), map);
12791279

1280-
return new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.GetRequiredService<ISerializerService>());
1280+
return new AssetProvider(sessionId, storage, assetSource, remoteWorkspace.Services.SolutionServices);
12811281
}
12821282
}

src/Workspaces/Remote/ServiceHub/Host/AssetProvider.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using Microsoft.CodeAnalysis.Diagnostics;
11+
using Microsoft.CodeAnalysis.Host;
1112
using Microsoft.CodeAnalysis.Internal.Log;
1213
using Microsoft.CodeAnalysis.PooledObjects;
1314
using Microsoft.CodeAnalysis.Serialization;
@@ -18,16 +19,20 @@ namespace Microsoft.CodeAnalysis.Remote;
1819
/// <summary>
1920
/// This service provide a way to get roslyn objects from checksum
2021
/// </summary>
21-
internal sealed partial class AssetProvider(Checksum solutionChecksum, SolutionAssetCache assetCache, IAssetSource assetSource, ISerializerService serializerService)
22+
internal sealed partial class AssetProvider(
23+
Checksum solutionChecksum,
24+
SolutionAssetCache assetCache,
25+
IAssetSource assetSource,
26+
SolutionServices solutionServices)
2227
: AbstractAssetProvider
2328
{
2429
private const int PooledChecksumArraySize = 1024;
2530
private static readonly ObjectPool<Checksum[]> s_checksumPool = new(() => new Checksum[PooledChecksumArraySize], 16);
2631

2732
private readonly Checksum _solutionChecksum = solutionChecksum;
28-
private readonly ISerializerService _serializerService = serializerService;
2933
private readonly SolutionAssetCache _assetCache = assetCache;
3034
private readonly IAssetSource _assetSource = assetSource;
35+
private readonly SolutionServices _solutionServices = solutionServices;
3136

3237
public override async ValueTask<T> GetAssetAsync<T>(
3338
AssetPath assetPath, Checksum checksum, CancellationToken cancellationToken)
@@ -295,8 +300,9 @@ private async ValueTask SynchronizeAssetsAsync<T, TArg>(
295300
Contract.ThrowIfTrue(missingChecksumsMemory.Span.IndexOf(Checksum.Null) >= 0);
296301
#endif
297302

303+
var serializerService = _solutionServices.GetRequiredService<ISerializerService>();
298304
await _assetSource.GetAssetsAsync(
299-
_solutionChecksum, assetPath, missingChecksumsMemory, _serializerService,
305+
_solutionChecksum, assetPath, missingChecksumsMemory, serializerService,
300306
static (
301307
Checksum missingChecksum,
302308
T missingAsset,

src/Workspaces/Remote/ServiceHub/Host/RemoteWorkspace.SolutionCreator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ internal partial class RemoteWorkspace
2626
/// <summary>
2727
/// Create solution for given checksum from base solution
2828
/// </summary>
29-
private readonly struct SolutionCreator(HostServices hostServices, AssetProvider assetService, Solution baseSolution)
29+
private readonly struct SolutionCreator(RemoteWorkspace workspace, AssetProvider assetService, Solution baseSolution)
3030
{
3131
#pragma warning disable IDE0052 // used only in DEBUG builds
32-
private readonly HostServices _hostServices = hostServices;
32+
private readonly RemoteWorkspace _workspace = workspace;
3333
#pragma warning restore
3434

3535
private readonly AssetProvider _assetProvider = assetService;
@@ -607,7 +607,7 @@ private async Task ValidateChecksumAsync(
607607
return;
608608

609609
var solutionInfo = await _assetProvider.CreateSolutionInfoAsync(checksumFromRequest, cancellationToken).ConfigureAwait(false);
610-
var workspace = new AdhocWorkspace(_hostServices);
610+
var workspace = new AdhocWorkspace(_workspace.Services.HostServices);
611611
workspace.AddSolution(solutionInfo);
612612

613613
await TestUtils.AssertChecksumsAsync(_assetProvider, checksumFromRequest, workspace.CurrentSolution, incrementalSolutionBuilt, projectConeId).ConfigureAwait(false);

src/Workspaces/Remote/ServiceHub/Host/RemoteWorkspace.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ internal RemoteWorkspace(HostServices hostServices)
3434
}
3535

3636
public AssetProvider CreateAssetProvider(Checksum solutionChecksum, SolutionAssetCache assetCache, IAssetSource assetSource)
37-
{
38-
var serializerService = Services.GetRequiredService<ISerializerService>();
39-
return new AssetProvider(solutionChecksum, assetCache, assetSource, serializerService);
40-
}
37+
=> new(solutionChecksum, assetCache, assetSource, this.Services.SolutionServices);
4138

4239
protected internal override bool PartialSemanticsEnabled => true;
4340

@@ -263,7 +260,7 @@ private async Task<Solution> ComputeDisconnectedSolutionAsync(
263260
assetProvider, newSolutionChecksum, cancellationToken).ConfigureAwait(false);
264261

265262
// Now, bring that solution in line with the snapshot defined by solutionChecksum.
266-
var updater = new SolutionCreator(Services.HostServices, assetProvider, solutionToUpdate);
263+
var updater = new SolutionCreator(this, assetProvider, solutionToUpdate);
267264
return await updater.CreateSolutionAsync(newSolutionChecksum, cancellationToken).ConfigureAwait(false);
268265
}
269266
catch (Exception e) when (FatalError.ReportAndPropagateUnlessCanceled(e, cancellationToken))

0 commit comments

Comments
 (0)