diff --git a/src/EditorFeatures/Core.Wpf/Options/EditorConfigDocumentOptionsProviderFactory.cs b/src/EditorFeatures/Core.Wpf/Options/EditorConfigDocumentOptionsProviderFactory.cs index 2ea68b35e56361909333e0b134041d1993f44666..306f4b6d7394b4d1e5070fa9c572674c0fe8747a 100644 --- a/src/EditorFeatures/Core.Wpf/Options/EditorConfigDocumentOptionsProviderFactory.cs +++ b/src/EditorFeatures/Core.Wpf/Options/EditorConfigDocumentOptionsProviderFactory.cs @@ -31,7 +31,7 @@ class EditorConfigDocumentOptionsProviderFactory : IDocumentOptionsProviderFacto _asynchronousOperationListenerProvider = asynchronousOperationListenerProvider; } - public IDocumentOptionsProvider Create(Workspace workspace) + public IDocumentOptionsProvider TryCreate(Workspace workspace) { ICodingConventionsManager codingConventionsManager; diff --git a/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs b/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs index c8e0dfe69f15f0db78d012ff948c05842bba8a43..ce49e37f42732f4e7ab3d2b3334a9c3977acb770 100644 --- a/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs +++ b/src/VisualStudio/Core/Impl/RoslynVisualStudioWorkspace.cs @@ -42,7 +42,12 @@ internal class RoslynVisualStudioWorkspace : VisualStudioWorkspaceImpl foreach (var providerFactory in documentOptionsProviderFactories) { - Services.GetRequiredService().RegisterDocumentOptionsProvider(providerFactory.Create(this)); + var optionsProvider = providerFactory.TryCreate(this); + + if (optionsProvider != null) + { + Services.GetRequiredService().RegisterDocumentOptionsProvider(optionsProvider); + } } } diff --git a/src/Workspaces/Core/Portable/Options/IDocumentOptionsProviderFactory.cs b/src/Workspaces/Core/Portable/Options/IDocumentOptionsProviderFactory.cs index a16aec797a3b24f833069499d88a489144882296..594fbf757fbc727c3b1c2155c3e9335d10cc1b81 100644 --- a/src/Workspaces/Core/Portable/Options/IDocumentOptionsProviderFactory.cs +++ b/src/Workspaces/Core/Portable/Options/IDocumentOptionsProviderFactory.cs @@ -8,6 +8,6 @@ /// interface IDocumentOptionsProviderFactory { - IDocumentOptionsProvider Create(Workspace workspace); + IDocumentOptionsProvider TryCreate(Workspace workspace); } } diff --git a/src/Workspaces/Core/Portable/Options/OptionServiceFactory.cs b/src/Workspaces/Core/Portable/Options/OptionServiceFactory.cs index 67892171a1cda56d6bdb61355cdbca57027cd3ce..f76e15d4ad1cb19abbb981046bf75f077fc23cbd 100644 --- a/src/Workspaces/Core/Portable/Options/OptionServiceFactory.cs +++ b/src/Workspaces/Core/Portable/Options/OptionServiceFactory.cs @@ -125,6 +125,11 @@ public OptionSet GetOptions() public void RegisterDocumentOptionsProvider(IDocumentOptionsProvider documentOptionsProvider) { + if (documentOptionsProvider == null) + { + throw new ArgumentNullException(nameof(documentOptionsProvider)); + } + lock (_gate) { _documentOptionsProviders = _documentOptionsProviders.Add(documentOptionsProvider); diff --git a/src/Workspaces/Remote/Core/Services/RemoteWorkspace.cs b/src/Workspaces/Remote/Core/Services/RemoteWorkspace.cs index 9fb2cca39994feedf5d82960e0cee2d01e00ff65..38f301d8fd6249e93bc768be3d0a0704fece0e42 100644 --- a/src/Workspaces/Remote/Core/Services/RemoteWorkspace.cs +++ b/src/Workspaces/Remote/Core/Services/RemoteWorkspace.cs @@ -31,7 +31,12 @@ public RemoteWorkspace() foreach (var providerFactory in exportProvider.GetExports()) { - Services.GetRequiredService().RegisterDocumentOptionsProvider(providerFactory.Value.Create(this)); + var optionsProvider = providerFactory.Value.TryCreate(this); + + if (optionsProvider != null) + { + Services.GetRequiredService().RegisterDocumentOptionsProvider(optionsProvider); + } } Options = Options.WithChangedOption(CacheOptions.RecoverableTreeLengthThreshold, 0); diff --git a/src/Workspaces/Remote/Core/Services/TemporaryWorkspaceOptionsServiceFactory.cs b/src/Workspaces/Remote/Core/Services/TemporaryWorkspaceOptionsServiceFactory.cs index 7efed05dea4243b7002ea8dbc68c97355631721c..9b71725a89034efd67e105b9d28477da9f6fb6e9 100644 --- a/src/Workspaces/Remote/Core/Services/TemporaryWorkspaceOptionsServiceFactory.cs +++ b/src/Workspaces/Remote/Core/Services/TemporaryWorkspaceOptionsServiceFactory.cs @@ -36,7 +36,12 @@ public IWorkspaceService CreateService(HostWorkspaceServices workspaceServices) foreach (var factory in _documentOptionsProviderFactories) { - service.RegisterDocumentOptionsProvider(factory.Create(workspaceServices.Workspace)); + var documentOptionsProvider = factory.TryCreate(workspaceServices.Workspace); + + if (documentOptionsProvider != null) + { + service.RegisterDocumentOptionsProvider(documentOptionsProvider); + } } return service;