Skip to content

Commit

Permalink
Directories
Browse files Browse the repository at this point in the history
  • Loading branch information
CyrusNajmabadi committed Sep 28, 2024
1 parent 78612d6 commit 42fb81d
Showing 1 changed file with 19 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,30 +35,42 @@ internal interface IAnalyzerAssemblyLoaderProvider : IWorkspaceService
/// </summary>
internal abstract class AbstractAnalyzerAssemblyLoaderProvider : IAnalyzerAssemblyLoaderProvider
{
private readonly string _workspaceKind;
private readonly ImmutableArray<IAnalyzerAssemblyResolver> _externalResolvers;
private readonly Lazy<IAnalyzerAssemblyLoaderInternal> _shadowCopyLoader;

public AbstractAnalyzerAssemblyLoaderProvider(IEnumerable<IAnalyzerAssemblyResolver> externalResolvers)
public AbstractAnalyzerAssemblyLoaderProvider(
string workspaceKind,
IEnumerable<IAnalyzerAssemblyResolver> externalResolvers)
{
_workspaceKind = workspaceKind;
_externalResolvers = externalResolvers.ToImmutableArray();
_shadowCopyLoader = new(CreateNewShadowCopyLoader);
_shadowCopyLoader = new(() => CreateNewShadowCopyLoader());
}

public IAnalyzerAssemblyLoaderInternal SharedShadowCopyLoader
=> _shadowCopyLoader.Value;

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<IAnalyzerAssemblyResolver> externalResolvers)
: AbstractAnalyzerAssemblyLoaderProvider(externalResolvers);
internal sealed class DefaultAnalyzerAssemblyLoaderProviderFactory(
[ImportMany] IEnumerable<IAnalyzerAssemblyResolver> externalResolvers) : IWorkspaceServiceFactory
{
public IWorkspaceService CreateService(HostWorkspaceServices workspaceServices)
=> new DefaultAnalyzerAssemblyLoaderProvider(workspaceServices.Workspace.Kind ?? "Default", externalResolvers);

private sealed class DefaultAnalyzerAssemblyLoaderProvider(
string workspaceKind,
IEnumerable<IAnalyzerAssemblyResolver> externalResolvers)
: AbstractAnalyzerAssemblyLoaderProvider(workspaceKind, externalResolvers);
}

0 comments on commit 42fb81d

Please sign in to comment.