提交 50bdd8e5 编写于 作者: H Heejae Chang

Merge pull request #6063 from heejaechang/workspaceworker

made WorkCoordinator test to use its own MEF containers that are not shared with others
...@@ -4,11 +4,9 @@ ...@@ -4,11 +4,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.Shared.Options; using Microsoft.CodeAnalysis.Editor.Shared.Options;
using Microsoft.CodeAnalysis.Editor.UnitTests.Utilities; using Microsoft.CodeAnalysis.Editor.UnitTests.Utilities;
using Microsoft.CodeAnalysis.Internal.Log;
using Microsoft.CodeAnalysis.Shared.Options; using Microsoft.CodeAnalysis.Shared.Options;
using Microsoft.CodeAnalysis.SolutionCrawler; using Microsoft.CodeAnalysis.SolutionCrawler;
using Microsoft.VisualStudio.Composition; using Microsoft.VisualStudio.Composition;
...@@ -19,7 +17,7 @@ namespace Microsoft.CodeAnalysis.Editor.UnitTests ...@@ -19,7 +17,7 @@ namespace Microsoft.CodeAnalysis.Editor.UnitTests
{ {
public static class MinimalTestExportProvider public static class MinimalTestExportProvider
{ {
private static readonly PartDiscovery s_partDiscovery = PartDiscovery.Combine(new AttributedPartDiscoveryV1(Resolver.DefaultInstance), new AttributedPartDiscovery(Resolver.DefaultInstance, isNonPublicSupported: true)); private static readonly PartDiscovery s_partDiscovery = CreatePartDiscovery(Resolver.DefaultInstance);
private static readonly Lazy<ComposableCatalog> s_lazyLanguageNeutralCatalog = new Lazy<ComposableCatalog>(() => CreateAssemblyCatalog(GetVisualStudioAssemblies()).WithParts(CreateAssemblyCatalog(GetLanguageNeutralTypes().Select(t => t.Assembly).Distinct()))); private static readonly Lazy<ComposableCatalog> s_lazyLanguageNeutralCatalog = new Lazy<ComposableCatalog>(() => CreateAssemblyCatalog(GetVisualStudioAssemblies()).WithParts(CreateAssemblyCatalog(GetLanguageNeutralTypes().Select(t => t.Assembly).Distinct())));
public static ComposableCatalog LanguageNeutralCatalog public static ComposableCatalog LanguageNeutralCatalog
...@@ -103,22 +101,44 @@ public static ComposableCatalog CreateAssemblyCatalog(Assembly assembly) ...@@ -103,22 +101,44 @@ public static ComposableCatalog CreateAssemblyCatalog(Assembly assembly)
return CreateAssemblyCatalog(SpecializedCollections.SingletonEnumerable(assembly)); return CreateAssemblyCatalog(SpecializedCollections.SingletonEnumerable(assembly));
} }
public static ComposableCatalog CreateAssemblyCatalog(IEnumerable<Assembly> assemblies) public static ComposableCatalog CreateAssemblyCatalog(IEnumerable<Assembly> assemblies, Resolver resolver = null)
{ {
var discovery = resolver == null ? s_partDiscovery : CreatePartDiscovery(resolver);
// If we run CreatePartsAsync on the test thread we may deadlock since it'll schedule stuff back // If we run CreatePartsAsync on the test thread we may deadlock since it'll schedule stuff back
// on the thread. // on the thread.
var parts = Task.Run(async () => await s_partDiscovery.CreatePartsAsync(assemblies).ConfigureAwait(false)).Result; var parts = Task.Run(async () => await discovery.CreatePartsAsync(assemblies).ConfigureAwait(false)).Result;
return ComposableCatalog.Create(Resolver.DefaultInstance).AddParts(parts); return ComposableCatalog.Create(resolver ?? Resolver.DefaultInstance).AddParts(parts);
} }
public static ComposableCatalog CreateTypeCatalog(IEnumerable<Type> types) public static ComposableCatalog CreateTypeCatalog(IEnumerable<Type> types, Resolver resolver = null)
{ {
var discovery = resolver == null ? s_partDiscovery : CreatePartDiscovery(resolver);
// If we run CreatePartsAsync on the test thread we may deadlock since it'll schedule stuff back // If we run CreatePartsAsync on the test thread we may deadlock since it'll schedule stuff back
// on the thread. // on the thread.
var parts = Task.Run(async () => await s_partDiscovery.CreatePartsAsync(types).ConfigureAwait(false)).Result; var parts = Task.Run(async () => await discovery.CreatePartsAsync(types).ConfigureAwait(false)).Result;
return ComposableCatalog.Create(resolver ?? Resolver.DefaultInstance).AddParts(parts);
}
public static Resolver CreateResolver()
{
// simple assembly loader is stateless, so okay to share
return new Resolver(SimpleAssemblyLoader.Instance);
}
return ComposableCatalog.Create(Resolver.DefaultInstance).AddParts(parts); public static PartDiscovery CreatePartDiscovery(Resolver resolver)
{
return PartDiscovery.Combine(new AttributedPartDiscoveryV1(resolver), new AttributedPartDiscovery(resolver, isNonPublicSupported: true));
}
public static ExportProvider CreateExportProvider(ComposableCatalog catalog)
{
var configuration = CompositionConfiguration.Create(catalog.WithDesktopSupport().WithCompositionService());
var runtimeComposition = RuntimeComposition.CreateRuntimeComposition(configuration);
return runtimeComposition.CreateExportProviderFactory().CreateExportProvider();
} }
public static ComposableCatalog WithParts(this ComposableCatalog @this, ComposableCatalog catalog) public static ComposableCatalog WithParts(this ComposableCatalog @this, ComposableCatalog catalog)
...@@ -141,11 +161,25 @@ public static ComposableCatalog WithPart(this ComposableCatalog catalog, Type t) ...@@ -141,11 +161,25 @@ public static ComposableCatalog WithPart(this ComposableCatalog catalog, Type t)
return catalog.WithParts(CreateTypeCatalog(SpecializedCollections.SingletonEnumerable(t))); return catalog.WithParts(CreateTypeCatalog(SpecializedCollections.SingletonEnumerable(t)));
} }
public static ExportProvider CreateExportProvider(ComposableCatalog catalog) private class SimpleAssemblyLoader : IAssemblyLoader
{ {
var configuration = CompositionConfiguration.Create(catalog.WithDesktopSupport().WithCompositionService()); public static readonly IAssemblyLoader Instance = new SimpleAssemblyLoader();
var runtimeComposition = RuntimeComposition.CreateRuntimeComposition(configuration);
return runtimeComposition.CreateExportProviderFactory().CreateExportProvider(); public Assembly LoadAssembly(AssemblyName assemblyName)
{
return Assembly.Load(assemblyName);
}
public Assembly LoadAssembly(string assemblyFullName, string codeBasePath)
{
var assemblyName = new AssemblyName(assemblyFullName);
if (!string.IsNullOrEmpty(codeBasePath))
{
assemblyName.CodeBase = codeBasePath;
}
return this.LoadAssembly(assemblyName);
}
} }
} }
} }
...@@ -25,7 +25,7 @@ public class WorkCoordinatorTests ...@@ -25,7 +25,7 @@ public class WorkCoordinatorTests
[WpfFact] [WpfFact]
public void RegisterService() public void RegisterService()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var registrationService = new SolutionCrawlerRegistrationService( var registrationService = new SolutionCrawlerRegistrationService(
SpecializedCollections.EmptyEnumerable<Lazy<IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata>>(), SpecializedCollections.EmptyEnumerable<Lazy<IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata>>(),
...@@ -40,7 +40,7 @@ public void RegisterService() ...@@ -40,7 +40,7 @@ public void RegisterService()
[WpfFact, WorkItem(747226)] [WpfFact, WorkItem(747226)]
public async Task SolutionAdded_Simple() public async Task SolutionAdded_Simple()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solutionId = SolutionId.CreateNewId(); var solutionId = SolutionId.CreateNewId();
var projectId = ProjectId.CreateNewId(); var projectId = ProjectId.CreateNewId();
...@@ -63,7 +63,7 @@ public async Task SolutionAdded_Simple() ...@@ -63,7 +63,7 @@ public async Task SolutionAdded_Simple()
[WpfFact] [WpfFact]
public async Task SolutionAdded_Complex() public async Task SolutionAdded_Complex()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
...@@ -75,7 +75,7 @@ public async Task SolutionAdded_Complex() ...@@ -75,7 +75,7 @@ public async Task SolutionAdded_Complex()
[WpfFact] [WpfFact]
public async Task Solution_Remove() public async Task Solution_Remove()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -89,7 +89,7 @@ public async Task Solution_Remove() ...@@ -89,7 +89,7 @@ public async Task Solution_Remove()
[WpfFact] [WpfFact]
public async Task Solution_Clear() public async Task Solution_Clear()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -103,7 +103,7 @@ public async Task Solution_Clear() ...@@ -103,7 +103,7 @@ public async Task Solution_Clear()
[WpfFact] [WpfFact]
public async Task Solution_Reload() public async Task Solution_Reload()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -117,7 +117,7 @@ public async Task Solution_Reload() ...@@ -117,7 +117,7 @@ public async Task Solution_Reload()
[WpfFact] [WpfFact]
public async Task Solution_Change() public async Task Solution_Change()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solutionInfo = GetInitialSolutionInfo(workspace); var solutionInfo = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solutionInfo); workspace.OnSolutionAdded(solutionInfo);
...@@ -137,7 +137,7 @@ public async Task Solution_Change() ...@@ -137,7 +137,7 @@ public async Task Solution_Change()
[WpfFact] [WpfFact]
public async Task Project_Add() public async Task Project_Add()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -160,7 +160,7 @@ public async Task Project_Add() ...@@ -160,7 +160,7 @@ public async Task Project_Add()
[WpfFact] [WpfFact]
public async Task Project_Remove() public async Task Project_Remove()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -177,7 +177,7 @@ public async Task Project_Remove() ...@@ -177,7 +177,7 @@ public async Task Project_Remove()
[WpfFact] [WpfFact]
public async Task Project_Change() public async Task Project_Change()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solutionInfo = GetInitialSolutionInfo(workspace); var solutionInfo = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solutionInfo); workspace.OnSolutionAdded(solutionInfo);
...@@ -196,7 +196,7 @@ public async Task Project_Change() ...@@ -196,7 +196,7 @@ public async Task Project_Change()
[WpfFact] [WpfFact]
public async Task Project_AssemblyName_Change() public async Task Project_AssemblyName_Change()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solutionInfo = GetInitialSolutionInfo(workspace); var solutionInfo = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solutionInfo); workspace.OnSolutionAdded(solutionInfo);
...@@ -213,7 +213,7 @@ public async Task Project_AssemblyName_Change() ...@@ -213,7 +213,7 @@ public async Task Project_AssemblyName_Change()
[WpfFact] [WpfFact]
public async Task Project_AnalyzerOptions_Change() public async Task Project_AnalyzerOptions_Change()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solutionInfo = GetInitialSolutionInfo(workspace); var solutionInfo = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solutionInfo); workspace.OnSolutionAdded(solutionInfo);
...@@ -230,7 +230,7 @@ public async Task Project_AnalyzerOptions_Change() ...@@ -230,7 +230,7 @@ public async Task Project_AnalyzerOptions_Change()
[WpfFact] [WpfFact]
public async Task Project_Reload() public async Task Project_Reload()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -245,7 +245,7 @@ public async Task Project_Reload() ...@@ -245,7 +245,7 @@ public async Task Project_Reload()
[WpfFact] [WpfFact]
public async Task Document_Add() public async Task Document_Add()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -263,7 +263,7 @@ public async Task Document_Add() ...@@ -263,7 +263,7 @@ public async Task Document_Add()
[WpfFact] [WpfFact]
public async Task Document_Remove() public async Task Document_Remove()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -282,7 +282,7 @@ public async Task Document_Remove() ...@@ -282,7 +282,7 @@ public async Task Document_Remove()
[WpfFact] [WpfFact]
public async Task Document_Reload() public async Task Document_Reload()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -298,7 +298,7 @@ public async Task Document_Reload() ...@@ -298,7 +298,7 @@ public async Task Document_Reload()
[WpfFact] [WpfFact]
public async Task Document_Reanalyze() public async Task Document_Reanalyze()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -331,7 +331,7 @@ public async Task Document_Reanalyze() ...@@ -331,7 +331,7 @@ public async Task Document_Reanalyze()
[WorkItem(670335)] [WorkItem(670335)]
public async Task Document_Change() public async Task Document_Change()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -348,7 +348,7 @@ public async Task Document_Change() ...@@ -348,7 +348,7 @@ public async Task Document_Change()
[WpfFact] [WpfFact]
public async Task Document_AdditionalFileChange() public async Task Document_AdditionalFileChange()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -376,7 +376,7 @@ public async Task Document_AdditionalFileChange() ...@@ -376,7 +376,7 @@ public async Task Document_AdditionalFileChange()
[WorkItem(670335)] [WorkItem(670335)]
public async Task Document_Cancellation() public async Task Document_Cancellation()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -406,7 +406,7 @@ public async Task Document_Cancellation() ...@@ -406,7 +406,7 @@ public async Task Document_Cancellation()
[WorkItem(670335)] [WorkItem(670335)]
public async Task Document_Cancellation_MultipleTimes() public async Task Document_Cancellation_MultipleTimes()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -440,7 +440,7 @@ public async Task Document_Cancellation_MultipleTimes() ...@@ -440,7 +440,7 @@ public async Task Document_Cancellation_MultipleTimes()
[WorkItem(670335)] [WorkItem(670335)]
public async Task Document_InvocationReasons() public async Task Document_InvocationReasons()
{ {
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
var solution = GetInitialSolutionInfo(workspace); var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
...@@ -700,7 +700,7 @@ public async Task SemanticChange_Propagation() ...@@ -700,7 +700,7 @@ public async Task SemanticChange_Propagation()
{ {
var solution = GetInitialSolutionInfoWithP2P(); var solution = GetInitialSolutionInfoWithP2P();
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
workspace.OnSolutionAdded(solution); workspace.OnSolutionAdded(solution);
await WaitWaiterAsync(workspace.ExportProvider).ConfigureAwait(true); await WaitWaiterAsync(workspace.ExportProvider).ConfigureAwait(true);
...@@ -727,7 +727,7 @@ public async Task ProgressReporterTest() ...@@ -727,7 +727,7 @@ public async Task ProgressReporterTest()
{ {
var solution = GetInitialSolutionInfoWithP2P(); var solution = GetInitialSolutionInfoWithP2P();
using (var workspace = new WorkCoordinatorWorkspace(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), SolutionCrawler)) using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{ {
await WaitWaiterAsync(workspace.ExportProvider).ConfigureAwait(true); await WaitWaiterAsync(workspace.ExportProvider).ConfigureAwait(true);
...@@ -941,8 +941,8 @@ private class WorkCoordinatorWorkspace : TestWorkspace ...@@ -941,8 +941,8 @@ private class WorkCoordinatorWorkspace : TestWorkspace
private readonly IAsynchronousOperationWaiter _workspaceWaiter; private readonly IAsynchronousOperationWaiter _workspaceWaiter;
private readonly IAsynchronousOperationWaiter _solutionCrawlerWaiter; private readonly IAsynchronousOperationWaiter _solutionCrawlerWaiter;
public WorkCoordinatorWorkspace(ExportProvider exportProvider, string workspaceKind = null, bool disablePartialSolutions = true) public WorkCoordinatorWorkspace(string workspaceKind = null, bool disablePartialSolutions = true)
: base(exportProvider, workspaceKind, disablePartialSolutions) : base(TestExportProvider.CreateExportProviderWithCSharpAndVisualBasic(), workspaceKind, disablePartialSolutions)
{ {
_workspaceWaiter = GetListeners(ExportProvider).First(l => l.Metadata.FeatureName == FeatureAttribute.Workspace).Value as IAsynchronousOperationWaiter; _workspaceWaiter = GetListeners(ExportProvider).First(l => l.Metadata.FeatureName == FeatureAttribute.Workspace).Value as IAsynchronousOperationWaiter;
_solutionCrawlerWaiter = GetListeners(ExportProvider).First(l => l.Metadata.FeatureName == FeatureAttribute.SolutionCrawler).Value as IAsynchronousOperationWaiter; _solutionCrawlerWaiter = GetListeners(ExportProvider).First(l => l.Metadata.FeatureName == FeatureAttribute.SolutionCrawler).Value as IAsynchronousOperationWaiter;
...@@ -955,9 +955,8 @@ protected override void Dispose(bool finalize) ...@@ -955,9 +955,8 @@ protected override void Dispose(bool finalize)
{ {
base.Dispose(finalize); base.Dispose(finalize);
// Bug https://github.com/dotnet/roslyn/issues/5915 Assert.False(_workspaceWaiter.HasPendingWork);
// Assert.False(_workspaceWaiter.HasPendingWork); Assert.False(_solutionCrawlerWaiter.HasPendingWork);
// Assert.False(_solutionCrawlerWaiter.HasPendingWork);
} }
} }
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.CodeAnalysis.CodeGeneration; using Microsoft.CodeAnalysis.CodeGeneration;
using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Formatting;
...@@ -30,7 +29,7 @@ public static ComposableCatalog EntireAssemblyCatalogWithCSharpAndVisualBasic ...@@ -30,7 +29,7 @@ public static ComposableCatalog EntireAssemblyCatalogWithCSharpAndVisualBasic
{ {
if (t_lazyEntireAssemblyCatalogWithCSharpAndVisualBasic == null) if (t_lazyEntireAssemblyCatalogWithCSharpAndVisualBasic == null)
{ {
t_lazyEntireAssemblyCatalogWithCSharpAndVisualBasic = new Lazy<ComposableCatalog>(() => MinimalTestExportProvider.CreateAssemblyCatalog(GetNeutralAndCSharpAndVisualBasicTypes().Select(t => t.Assembly).Distinct().Concat(MinimalTestExportProvider.GetVisualStudioAssemblies()))); t_lazyEntireAssemblyCatalogWithCSharpAndVisualBasic = new Lazy<ComposableCatalog>(() => CreateAssemblyCatalogWithCSharpAndVisualBasic());
} }
return t_lazyEntireAssemblyCatalogWithCSharpAndVisualBasic.Value; return t_lazyEntireAssemblyCatalogWithCSharpAndVisualBasic.Value;
...@@ -125,9 +124,24 @@ private static Type[] GetNeutralAndCSharpAndVisualBasicTypes() ...@@ -125,9 +124,24 @@ private static Type[] GetNeutralAndCSharpAndVisualBasicTypes()
.ToArray(); .ToArray();
} }
/// <summary>
/// Create fresh ExportProvider that doesnt share anything with others.
/// test can use this export provider to create all new MEF components not shared with others.
/// </summary>
public static ExportProvider CreateExportProviderWithCSharpAndVisualBasic() public static ExportProvider CreateExportProviderWithCSharpAndVisualBasic()
{ {
return MinimalTestExportProvider.CreateExportProvider(EntireAssemblyCatalogWithCSharpAndVisualBasic); return MinimalTestExportProvider.CreateExportProvider(CreateAssemblyCatalogWithCSharpAndVisualBasic());
}
/// <summary>
/// Create fresh ComposableCatalog that doesnt share anything with others.
/// everything under this catalog should have been created from scratch that doesnt share anything with others.
/// </summary>
public static ComposableCatalog CreateAssemblyCatalogWithCSharpAndVisualBasic()
{
return MinimalTestExportProvider.CreateAssemblyCatalog(
GetNeutralAndCSharpAndVisualBasicTypes().Select(t => t.Assembly).Distinct().Concat(MinimalTestExportProvider.GetVisualStudioAssemblies()),
MinimalTestExportProvider.CreateResolver());
} }
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册