From 5b39448083893918c984eb91c5578ac2a4f660e6 Mon Sep 17 00:00:00 2001 From: Henrik Date: Tue, 17 Sep 2024 12:21:43 +0200 Subject: [PATCH] Set dotnet_diagnostic.CA1852.severity as warning (#2289) Seal some internal types as if `dotnet_diagnostic.CA1852.severity = warning` was in effect. --- eng/analyzers/Library.globalconfig | 1 + .../CircuitBreaker/CircuitBreakerManualControl.cs | 2 +- .../CircuitBreaker/Controller/ScheduledTaskExecutor.cs | 2 +- .../Registry/RegistryPipelineComponentBuilder.cs | 4 ++-- src/Polly.Core/Simmy/Fault/ChaosFaultStrategy.cs | 2 +- src/Polly.Core/Simmy/Outcomes/ChaosOutcomeStrategy.cs | 2 +- .../Utils/Pipeline/ComponentWithDisposeCallbacks.cs | 2 +- src/Polly.Core/Utils/Pipeline/ExternalComponent.cs | 2 +- src/Polly.Core/Utils/Pipeline/ReloadableComponent.cs | 8 ++++---- .../PollyServiceCollectionExtensions.cs | 2 +- src/Polly.Extensions/Telemetry/ResilienceTelemetryTags.cs | 2 +- src/Polly/Caching/AsyncGenericCacheProvider.cs | 2 +- src/Polly/Caching/GenericCacheProvider.cs | 2 +- src/Polly/Caching/GenericTtlStrategy.cs | 2 +- src/Polly/CircuitBreaker/AdvancedCircuitController.cs | 2 +- src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs | 2 +- src/Polly/CircuitBreaker/CircuitBreakerEngine.cs | 2 +- .../CircuitBreaker/ConsecutiveCountCircuitController.cs | 2 +- src/Polly/CircuitBreaker/HealthCount.cs | 2 +- src/Polly/CircuitBreaker/RollingHealthMetrics.cs | 2 +- src/Polly/CircuitBreaker/SingleHealthMetrics.cs | 2 +- src/Polly/Fallback/AsyncFallbackEngine.cs | 2 +- src/Polly/Utilities/TimedLock.cs | 4 ++-- src/Snippets/Docs/Chaos.Behavior.cs | 2 +- src/Snippets/Docs/Chaos.Index.cs | 2 +- src/Snippets/Docs/DependencyInjection.cs | 2 +- src/Snippets/Docs/Fallback.cs | 4 ++-- src/Snippets/Docs/Hedging.cs | 2 +- src/Snippets/Docs/Performance.cs | 4 ++-- src/Snippets/Docs/Telemetry.cs | 4 ++-- src/Snippets/Docs/Utils/SomeExceptionType.cs | 2 +- 31 files changed, 39 insertions(+), 38 deletions(-) diff --git a/eng/analyzers/Library.globalconfig b/eng/analyzers/Library.globalconfig index 2a816df636d..c317983435c 100644 --- a/eng/analyzers/Library.globalconfig +++ b/eng/analyzers/Library.globalconfig @@ -941,6 +941,7 @@ dotnet_diagnostic.CA1851.severity = suggestion # Help Link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1852 # Tags : Telemetry, EnabledRuleInAggressiveMode, CompilationEnd dotnet_diagnostic.CA1852.severity = warning +dotnet_code_quality.CA1852.ignore_internalsvisibleto = true # Title : Unnecessary call to 'Dictionary.ContainsKey(key)' # Category : Performance diff --git a/src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs b/src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs index 1258c4f5ae4..4eca9c8c355 100644 --- a/src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs +++ b/src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs @@ -148,7 +148,7 @@ public async Task CloseAsync(CancellationToken cancellationToken = default) } } - private class RegistrationDisposable : IDisposable + private sealed class RegistrationDisposable : IDisposable { private readonly Action _disposeAction; diff --git a/src/Polly.Core/CircuitBreaker/Controller/ScheduledTaskExecutor.cs b/src/Polly.Core/CircuitBreaker/Controller/ScheduledTaskExecutor.cs index 7bc3f6f6d5f..a379949f38c 100644 --- a/src/Polly.Core/CircuitBreaker/Controller/ScheduledTaskExecutor.cs +++ b/src/Polly.Core/CircuitBreaker/Controller/ScheduledTaskExecutor.cs @@ -84,5 +84,5 @@ private async Task StartProcessingAsync() } } - private record Entry(Func TaskFactory, bool ContinueOnCapturedContext, TaskCompletionSource TaskCompletion); + private sealed record Entry(Func TaskFactory, bool ContinueOnCapturedContext, TaskCompletionSource TaskCompletion); } diff --git a/src/Polly.Core/Registry/RegistryPipelineComponentBuilder.cs b/src/Polly.Core/Registry/RegistryPipelineComponentBuilder.cs index fb826066e7d..848cd6eaeeb 100644 --- a/src/Polly.Core/Registry/RegistryPipelineComponentBuilder.cs +++ b/src/Polly.Core/Registry/RegistryPipelineComponentBuilder.cs @@ -6,7 +6,7 @@ namespace Polly.Registry; /// /// Builds a used by the registry. /// -internal class RegistryPipelineComponentBuilder +internal sealed class RegistryPipelineComponentBuilder where TBuilder : ResiliencePipelineBuilderBase where TKey : notnull { @@ -75,7 +75,7 @@ private Builder CreateBuilder() builder); } - private record Builder( + private sealed record Builder( Func ComponentFactory, List ReloadTokens, ResilienceStrategyTelemetry Telemetry, diff --git a/src/Polly.Core/Simmy/Fault/ChaosFaultStrategy.cs b/src/Polly.Core/Simmy/Fault/ChaosFaultStrategy.cs index 51b3a9e2914..6caede5ead6 100644 --- a/src/Polly.Core/Simmy/Fault/ChaosFaultStrategy.cs +++ b/src/Polly.Core/Simmy/Fault/ChaosFaultStrategy.cs @@ -2,7 +2,7 @@ namespace Polly.Simmy.Fault; -internal class ChaosFaultStrategy : ChaosStrategy +internal sealed class ChaosFaultStrategy : ChaosStrategy { private readonly ResilienceStrategyTelemetry _telemetry; diff --git a/src/Polly.Core/Simmy/Outcomes/ChaosOutcomeStrategy.cs b/src/Polly.Core/Simmy/Outcomes/ChaosOutcomeStrategy.cs index e9f224bfb0b..b62cf94cbb9 100644 --- a/src/Polly.Core/Simmy/Outcomes/ChaosOutcomeStrategy.cs +++ b/src/Polly.Core/Simmy/Outcomes/ChaosOutcomeStrategy.cs @@ -2,7 +2,7 @@ namespace Polly.Simmy.Outcomes; -internal class ChaosOutcomeStrategy : ChaosStrategy +internal sealed class ChaosOutcomeStrategy : ChaosStrategy { private readonly ResilienceStrategyTelemetry _telemetry; private readonly Func, ValueTask>? _onOutcomeInjected; diff --git a/src/Polly.Core/Utils/Pipeline/ComponentWithDisposeCallbacks.cs b/src/Polly.Core/Utils/Pipeline/ComponentWithDisposeCallbacks.cs index 61162a94528..ca407426ad2 100644 --- a/src/Polly.Core/Utils/Pipeline/ComponentWithDisposeCallbacks.cs +++ b/src/Polly.Core/Utils/Pipeline/ComponentWithDisposeCallbacks.cs @@ -1,6 +1,6 @@ namespace Polly.Utils.Pipeline; -internal class ComponentWithDisposeCallbacks : PipelineComponent +internal sealed class ComponentWithDisposeCallbacks : PipelineComponent { private readonly List _callbacks; diff --git a/src/Polly.Core/Utils/Pipeline/ExternalComponent.cs b/src/Polly.Core/Utils/Pipeline/ExternalComponent.cs index e8ad4cd5583..de12647c0b0 100644 --- a/src/Polly.Core/Utils/Pipeline/ExternalComponent.cs +++ b/src/Polly.Core/Utils/Pipeline/ExternalComponent.cs @@ -1,7 +1,7 @@ namespace Polly.Utils.Pipeline; [DebuggerDisplay("{Component}")] -internal class ExternalComponent : PipelineComponent +internal sealed class ExternalComponent : PipelineComponent { public ExternalComponent(PipelineComponent component) => Component = component; diff --git a/src/Polly.Core/Utils/Pipeline/ReloadableComponent.cs b/src/Polly.Core/Utils/Pipeline/ReloadableComponent.cs index 7e0b0435c1b..91c438ce2e7 100644 --- a/src/Polly.Core/Utils/Pipeline/ReloadableComponent.cs +++ b/src/Polly.Core/Utils/Pipeline/ReloadableComponent.cs @@ -98,15 +98,15 @@ private void DisposeRegistration() _tokenSource.Dispose(); } - internal record ReloadFailedArguments(Exception Exception); + internal sealed record ReloadFailedArguments(Exception Exception); - internal record DisposedFailedArguments(Exception Exception); + internal sealed record DisposedFailedArguments(Exception Exception); #pragma warning disable S2094 // Classes should not be empty #pragma warning disable S3253 // Constructor and destructor declarations should not be redundant - internal record OnReloadArguments(); + internal sealed record OnReloadArguments(); #pragma warning restore S3253 // Constructor and destructor declarations should not be redundant #pragma warning restore S2094 // Classes should not be empty - internal record Entry(PipelineComponent Component, List ReloadTokens, ResilienceStrategyTelemetry Telemetry); + internal sealed record Entry(PipelineComponent Component, List ReloadTokens, ResilienceStrategyTelemetry Telemetry); } diff --git a/src/Polly.Extensions/DependencyInjection/PollyServiceCollectionExtensions.cs b/src/Polly.Extensions/DependencyInjection/PollyServiceCollectionExtensions.cs index 5b19cae5ef0..c310f22976e 100644 --- a/src/Polly.Extensions/DependencyInjection/PollyServiceCollectionExtensions.cs +++ b/src/Polly.Extensions/DependencyInjection/PollyServiceCollectionExtensions.cs @@ -288,7 +288,7 @@ private static void AddResiliencePipelineBuilder(this IServiceCollection service }); } - private class RegistryMarker + private sealed class RegistryMarker { public static readonly ServiceDescriptor ServiceDescriptor = ServiceDescriptor.Singleton(new RegistryMarker()); } diff --git a/src/Polly.Extensions/Telemetry/ResilienceTelemetryTags.cs b/src/Polly.Extensions/Telemetry/ResilienceTelemetryTags.cs index 0f8ed179ecf..2a38a5b9b9f 100644 --- a/src/Polly.Extensions/Telemetry/ResilienceTelemetryTags.cs +++ b/src/Polly.Extensions/Telemetry/ResilienceTelemetryTags.cs @@ -1,6 +1,6 @@ namespace Polly.Telemetry; -internal class ResilienceTelemetryTags +internal static class ResilienceTelemetryTags { public const string EventName = "event.name"; diff --git a/src/Polly/Caching/AsyncGenericCacheProvider.cs b/src/Polly/Caching/AsyncGenericCacheProvider.cs index f7480745c81..090b8cb575a 100644 --- a/src/Polly/Caching/AsyncGenericCacheProvider.cs +++ b/src/Polly/Caching/AsyncGenericCacheProvider.cs @@ -5,7 +5,7 @@ namespace Polly.Caching; /// Provides a strongly-typed wrapper over a non-generic CacheProviderAsync. /// /// The type of the objects in the cache. -internal class AsyncGenericCacheProvider : IAsyncCacheProvider +internal sealed class AsyncGenericCacheProvider : IAsyncCacheProvider { private readonly IAsyncCacheProvider _wrappedCacheProvider; diff --git a/src/Polly/Caching/GenericCacheProvider.cs b/src/Polly/Caching/GenericCacheProvider.cs index 73b617b667f..abfec5768be 100644 --- a/src/Polly/Caching/GenericCacheProvider.cs +++ b/src/Polly/Caching/GenericCacheProvider.cs @@ -5,7 +5,7 @@ namespace Polly.Caching; /// Provides a strongly-typed wrapper over a non-generic CacheProvider. /// /// The type of the objects in the cache. -internal class GenericCacheProvider : ISyncCacheProvider +internal sealed class GenericCacheProvider : ISyncCacheProvider { private readonly ISyncCacheProvider _wrappedCacheProvider; diff --git a/src/Polly/Caching/GenericTtlStrategy.cs b/src/Polly/Caching/GenericTtlStrategy.cs index ec4a6dafea4..db22a8af750 100644 --- a/src/Polly/Caching/GenericTtlStrategy.cs +++ b/src/Polly/Caching/GenericTtlStrategy.cs @@ -4,7 +4,7 @@ namespace Polly.Caching; /// /// Represents a strongly-typed wrapper of a non-generic strategy. /// -internal class GenericTtlStrategy : ITtlStrategy +internal sealed class GenericTtlStrategy : ITtlStrategy { private readonly ITtlStrategy _wrappedTtlStrategy; diff --git a/src/Polly/CircuitBreaker/AdvancedCircuitController.cs b/src/Polly/CircuitBreaker/AdvancedCircuitController.cs index 15e69154599..79e4783007c 100644 --- a/src/Polly/CircuitBreaker/AdvancedCircuitController.cs +++ b/src/Polly/CircuitBreaker/AdvancedCircuitController.cs @@ -1,6 +1,6 @@ namespace Polly.CircuitBreaker; -internal class AdvancedCircuitController : CircuitStateController +internal sealed class AdvancedCircuitController : CircuitStateController { private const short NumberOfWindows = 10; internal static readonly long ResolutionOfCircuitTimer = TimeSpan.FromMilliseconds(20).Ticks; diff --git a/src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs b/src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs index 89c6c31242c..1a5905fa228 100644 --- a/src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs +++ b/src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs @@ -1,6 +1,6 @@ namespace Polly.CircuitBreaker; -internal class AsyncCircuitBreakerEngine +internal static class AsyncCircuitBreakerEngine { internal static async Task ImplementationAsync( Func> action, diff --git a/src/Polly/CircuitBreaker/CircuitBreakerEngine.cs b/src/Polly/CircuitBreaker/CircuitBreakerEngine.cs index a51fd4b8803..ef8883aac28 100644 --- a/src/Polly/CircuitBreaker/CircuitBreakerEngine.cs +++ b/src/Polly/CircuitBreaker/CircuitBreakerEngine.cs @@ -2,7 +2,7 @@ namespace Polly.CircuitBreaker; -internal class CircuitBreakerEngine +internal static class CircuitBreakerEngine { internal static TResult Implementation( Func action, diff --git a/src/Polly/CircuitBreaker/ConsecutiveCountCircuitController.cs b/src/Polly/CircuitBreaker/ConsecutiveCountCircuitController.cs index a498c208f91..7f362d87d3d 100644 --- a/src/Polly/CircuitBreaker/ConsecutiveCountCircuitController.cs +++ b/src/Polly/CircuitBreaker/ConsecutiveCountCircuitController.cs @@ -1,6 +1,6 @@ namespace Polly.CircuitBreaker; -internal class ConsecutiveCountCircuitController : CircuitStateController +internal sealed class ConsecutiveCountCircuitController : CircuitStateController { private readonly int _exceptionsAllowedBeforeBreaking; private int _consecutiveFailureCount; diff --git a/src/Polly/CircuitBreaker/HealthCount.cs b/src/Polly/CircuitBreaker/HealthCount.cs index 92a6fd8e286..d9d16fa78af 100644 --- a/src/Polly/CircuitBreaker/HealthCount.cs +++ b/src/Polly/CircuitBreaker/HealthCount.cs @@ -1,6 +1,6 @@ namespace Polly.CircuitBreaker; -internal class HealthCount +internal sealed class HealthCount { public int Successes { get; set; } diff --git a/src/Polly/CircuitBreaker/RollingHealthMetrics.cs b/src/Polly/CircuitBreaker/RollingHealthMetrics.cs index 167da0065f4..23c1d7465b3 100644 --- a/src/Polly/CircuitBreaker/RollingHealthMetrics.cs +++ b/src/Polly/CircuitBreaker/RollingHealthMetrics.cs @@ -1,7 +1,7 @@ #nullable enable namespace Polly.CircuitBreaker; -internal class RollingHealthMetrics : IHealthMetrics +internal sealed class RollingHealthMetrics : IHealthMetrics { private readonly long _samplingDuration; private readonly long _windowDuration; diff --git a/src/Polly/CircuitBreaker/SingleHealthMetrics.cs b/src/Polly/CircuitBreaker/SingleHealthMetrics.cs index e17859f6a67..3e6e6568b50 100644 --- a/src/Polly/CircuitBreaker/SingleHealthMetrics.cs +++ b/src/Polly/CircuitBreaker/SingleHealthMetrics.cs @@ -1,7 +1,7 @@ #nullable enable namespace Polly.CircuitBreaker; -internal class SingleHealthMetrics : IHealthMetrics +internal sealed class SingleHealthMetrics : IHealthMetrics { private readonly long _samplingDuration; diff --git a/src/Polly/Fallback/AsyncFallbackEngine.cs b/src/Polly/Fallback/AsyncFallbackEngine.cs index b0e9e48c740..79a58554b32 100644 --- a/src/Polly/Fallback/AsyncFallbackEngine.cs +++ b/src/Polly/Fallback/AsyncFallbackEngine.cs @@ -1,7 +1,7 @@ #nullable enable namespace Polly.Fallback; -internal class AsyncFallbackEngine +internal static class AsyncFallbackEngine { internal static async Task ImplementationAsync( Func> action, diff --git a/src/Polly/Utilities/TimedLock.cs b/src/Polly/Utilities/TimedLock.cs index da5055fd2d1..582c99c5abf 100644 --- a/src/Polly/Utilities/TimedLock.cs +++ b/src/Polly/Utilities/TimedLock.cs @@ -68,7 +68,7 @@ public void Dispose() #if DEBUG // (In Debug mode, we make it a class so that we can add a finalizer // in order to detect when the object is not freed.) - private class Sentinel + private sealed class Sentinel { #if NETSTANDARD2_0 ~Sentinel() @@ -85,7 +85,7 @@ private class Sentinel #endif } -internal class LockTimeoutException : Exception +internal sealed class LockTimeoutException : Exception { /// /// Initializes a new instance of the class. diff --git a/src/Snippets/Docs/Chaos.Behavior.cs b/src/Snippets/Docs/Chaos.Behavior.cs index bfedb1a4111..e0cc93c17cd 100644 --- a/src/Snippets/Docs/Chaos.Behavior.cs +++ b/src/Snippets/Docs/Chaos.Behavior.cs @@ -86,7 +86,7 @@ public static void Pattern_InjectDelay() } } -internal class RedisConnectionException : Exception +internal sealed class RedisConnectionException : Exception { public RedisConnectionException() { diff --git a/src/Snippets/Docs/Chaos.Index.cs b/src/Snippets/Docs/Chaos.Index.cs index 9a6fa9e0755..0d02db88fa3 100644 --- a/src/Snippets/Docs/Chaos.Index.cs +++ b/src/Snippets/Docs/Chaos.Index.cs @@ -174,7 +174,7 @@ public static void CentralPipelineIntegration(IServiceCollection services) #region chaos-extension // Options that represent the chaos pipeline - public class MyChaosOptions + public sealed class MyChaosOptions { public ChaosFaultStrategyOptions Fault { get; set; } = new() { diff --git a/src/Snippets/Docs/DependencyInjection.cs b/src/Snippets/Docs/DependencyInjection.cs index 5ae5f1c1d19..251e30aa265 100644 --- a/src/Snippets/Docs/DependencyInjection.cs +++ b/src/Snippets/Docs/DependencyInjection.cs @@ -108,7 +108,7 @@ public static async Task KeyedServicesDefine(IServiceCollection services) #region di-keyed-services-use - public class MyApi + public sealed class MyApi { private readonly ResiliencePipeline _pipeline; private readonly ResiliencePipeline _genericPipeline; diff --git a/src/Snippets/Docs/Fallback.cs b/src/Snippets/Docs/Fallback.cs index 2699a8da426..495f21f8c9a 100644 --- a/src/Snippets/Docs/Fallback.cs +++ b/src/Snippets/Docs/Fallback.cs @@ -57,14 +57,14 @@ public static void Usage() #endregion } - public class UserAvatar + public sealed class UserAvatar { public static readonly UserAvatar Blank = new(); public static UserAvatar GetRandomAvatar() => new(); } - private class CustomNetworkException : Exception + private sealed class CustomNetworkException : Exception { public CustomNetworkException() { diff --git a/src/Snippets/Docs/Hedging.cs b/src/Snippets/Docs/Hedging.cs index d41db196fab..b3c7a8a1528 100644 --- a/src/Snippets/Docs/Hedging.cs +++ b/src/Snippets/Docs/Hedging.cs @@ -132,7 +132,7 @@ internal static class ResilienceKeys #region hedging-handler - internal class HedgingHandler : DelegatingHandler + internal sealed class HedgingHandler : DelegatingHandler { private readonly ResiliencePipeline _pipeline; diff --git a/src/Snippets/Docs/Performance.cs b/src/Snippets/Docs/Performance.cs index 5b0f6227a19..fb4bfc8cb9b 100644 --- a/src/Snippets/Docs/Performance.cs +++ b/src/Snippets/Docs/Performance.cs @@ -120,13 +120,13 @@ static async (context, state) => private static ValueTask GetMemberAsync(string id, CancellationToken token) => default; - public class Member + public sealed class Member { } #region perf-reuse-pipelines - public class MyApi + public sealed class MyApi { private readonly ResiliencePipelineRegistry _registry; diff --git a/src/Snippets/Docs/Telemetry.cs b/src/Snippets/Docs/Telemetry.cs index 2989c0ba84f..2d94357b433 100644 --- a/src/Snippets/Docs/Telemetry.cs +++ b/src/Snippets/Docs/Telemetry.cs @@ -82,7 +82,7 @@ public static void AddResiliencePipelineWithTelemetry() #region telemetry-listeners - internal class MyTelemetryListener : TelemetryListener + internal sealed class MyTelemetryListener : TelemetryListener { public override void Write(in TelemetryEventArguments args) { @@ -90,7 +90,7 @@ public override void Write(in TelemetryEventArguments(in EnrichmentContext context) { diff --git a/src/Snippets/Docs/Utils/SomeExceptionType.cs b/src/Snippets/Docs/Utils/SomeExceptionType.cs index d3a57b7911e..f55a9bb8006 100644 --- a/src/Snippets/Docs/Utils/SomeExceptionType.cs +++ b/src/Snippets/Docs/Utils/SomeExceptionType.cs @@ -1,6 +1,6 @@ namespace Snippets.Docs.Utils; -internal class SomeExceptionType : Exception +internal sealed class SomeExceptionType : Exception { public SomeExceptionType(string message) : base(message)