| File: ExtensionManager\AbstractExtensionManager.cs | Web Access |
| Project: src\roslyn\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.Extensions; internal abstract class AbstractExtensionManager : IExtensionManager { private readonly ConcurrentSet<object> _disabledProviders = new(ReferenceEqualityComparer.Instance); private readonly ConcurrentSet<object> _ignoredProviders = new(ReferenceEqualityComparer.Instance); protected abstract void HandleNonCancellationException(object provider, Exception exception); protected void DisableProvider(object provider) => _disabledProviders.Add(provider); protected void EnableProvider(object provider) => _disabledProviders.Remove(provider); protected void IgnoreProvider(object provider) => _ignoredProviders.Add(provider); public bool IsIgnored(object provider) => _ignoredProviders.Contains(provider); public bool IsDisabled(object provider) => _disabledProviders.Contains(provider); public bool HandleException(object provider, Exception exception) { if (exception is OperationCanceledException) return false; HandleNonCancellationException(provider, exception); return true; } }