From 42fb81d1def4ca24c19620e787fb5fcd23735eba Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sat, 28 Sep 2024 10:20:26 -0700 Subject: [PATCH] Directories --- .../IAnalyzerAssemblyLoaderProvider.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/Workspaces/Core/Portable/Workspace/Host/Metadata/IAnalyzerAssemblyLoaderProvider.cs b/src/Workspaces/Core/Portable/Workspace/Host/Metadata/IAnalyzerAssemblyLoaderProvider.cs index 9c5626f1e5fc8..64af82c7623d3 100644 --- a/src/Workspaces/Core/Portable/Workspace/Host/Metadata/IAnalyzerAssemblyLoaderProvider.cs +++ b/src/Workspaces/Core/Portable/Workspace/Host/Metadata/IAnalyzerAssemblyLoaderProvider.cs @@ -35,13 +35,17 @@ internal interface IAnalyzerAssemblyLoaderProvider : IWorkspaceService /// internal abstract class AbstractAnalyzerAssemblyLoaderProvider : IAnalyzerAssemblyLoaderProvider { + private readonly string _workspaceKind; private readonly ImmutableArray _externalResolvers; private readonly Lazy _shadowCopyLoader; - public AbstractAnalyzerAssemblyLoaderProvider(IEnumerable externalResolvers) + public AbstractAnalyzerAssemblyLoaderProvider( + string workspaceKind, + IEnumerable externalResolvers) { + _workspaceKind = workspaceKind; _externalResolvers = externalResolvers.ToImmutableArray(); - _shadowCopyLoader = new(CreateNewShadowCopyLoader); + _shadowCopyLoader = new(() => CreateNewShadowCopyLoader()); } public IAnalyzerAssemblyLoaderInternal SharedShadowCopyLoader @@ -49,16 +53,24 @@ public IAnalyzerAssemblyLoaderInternal SharedShadowCopyLoader public IAnalyzerAssemblyLoaderInternal CreateNewShadowCopyLoader() => this.WrapLoader(DefaultAnalyzerAssemblyLoader.CreateNonLockingLoader( - Path.Combine(Path.GetTempPath(), nameof(Roslyn), "AnalyzerAssemblyLoader"), + Path.Combine(Path.GetTempPath(), nameof(Roslyn), GetType().Name, _workspaceKind), _externalResolvers)); protected virtual IAnalyzerAssemblyLoaderInternal WrapLoader(IAnalyzerAssemblyLoaderInternal loader) => loader; } -[ExportWorkspaceService(typeof(IAnalyzerAssemblyLoaderProvider)), Shared] +[ExportWorkspaceServiceFactory(typeof(IAnalyzerAssemblyLoaderProvider)), Shared] [method: ImportingConstructor] [method: Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] -internal sealed class DefaultAnalyzerAssemblyLoaderProvider( - [ImportMany] IEnumerable externalResolvers) - : AbstractAnalyzerAssemblyLoaderProvider(externalResolvers); +internal sealed class DefaultAnalyzerAssemblyLoaderProviderFactory( + [ImportMany] IEnumerable externalResolvers) : IWorkspaceServiceFactory +{ + public IWorkspaceService CreateService(HostWorkspaceServices workspaceServices) + => new DefaultAnalyzerAssemblyLoaderProvider(workspaceServices.Workspace.Kind ?? "Default", externalResolvers); + + private sealed class DefaultAnalyzerAssemblyLoaderProvider( + string workspaceKind, + IEnumerable externalResolvers) + : AbstractAnalyzerAssemblyLoaderProvider(workspaceKind, externalResolvers); +}