diff --git a/src/Samples/Sample.AsyncApi.Service/Controllers/WeatherForecastController.cs b/src/Samples/Sample.AsyncApi.Service/Controllers/WeatherForecastController.cs index 7ef633a5..0f88dfcd 100644 --- a/src/Samples/Sample.AsyncApi.Service/Controllers/WeatherForecastController.cs +++ b/src/Samples/Sample.AsyncApi.Service/Controllers/WeatherForecastController.cs @@ -8,8 +8,8 @@ public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; private readonly ILogger _logger; diff --git a/src/Samples/Sample.Images.Worker/GlobalSuppressions.cs b/src/Samples/Sample.Images.Worker/GlobalSuppressions.cs new file mode 100644 index 00000000..1178f4c0 --- /dev/null +++ b/src/Samples/Sample.Images.Worker/GlobalSuppressions.cs @@ -0,0 +1,8 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +using System.Diagnostics.CodeAnalysis; + +[assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility")] diff --git a/src/Samples/Sample.Nats.WebApi/PingConsumer.cs b/src/Samples/Sample.Nats.WebApi/PingConsumer.cs index 4402e545..62a7b9c6 100644 --- a/src/Samples/Sample.Nats.WebApi/PingConsumer.cs +++ b/src/Samples/Sample.Nats.WebApi/PingConsumer.cs @@ -6,7 +6,7 @@ public class PingConsumer(ILogger logger) : IConsumer { private readonly ILogger _logger = logger; - public IConsumerContext Context { get; set; } + public IConsumerContext Context { get; set; } = default!; public Task OnHandle(PingMessage message) { diff --git a/src/SlimMessageBus.Host.AzureEventHub/Consumer/EhPartitionConsumerForResponses.cs b/src/SlimMessageBus.Host.AzureEventHub/Consumer/EhPartitionConsumerForResponses.cs index 3771f066..061fcc44 100644 --- a/src/SlimMessageBus.Host.AzureEventHub/Consumer/EhPartitionConsumerForResponses.cs +++ b/src/SlimMessageBus.Host.AzureEventHub/Consumer/EhPartitionConsumerForResponses.cs @@ -9,14 +9,12 @@ namespace SlimMessageBus.Host.AzureEventHub; /// public class EhPartitionConsumerForResponses : EhPartitionConsumer { - private readonly RequestResponseSettings _requestResponseSettings; - public EhPartitionConsumerForResponses(EventHubMessageBus messageBus, RequestResponseSettings requestResponseSettings, GroupPathPartitionId pathGroupPartition) : base(messageBus, pathGroupPartition) { - _requestResponseSettings = requestResponseSettings ?? throw new ArgumentNullException(nameof(requestResponseSettings)); + if (requestResponseSettings == null) throw new ArgumentNullException(nameof(requestResponseSettings)); - MessageProcessor = new ResponseMessageProcessor(MessageBus.LoggerFactory, _requestResponseSettings, MessageBus, messagePayloadProvider: eventData => eventData.EventBody.ToArray()); - CheckpointTrigger = new CheckpointTrigger(_requestResponseSettings, MessageBus.LoggerFactory); + MessageProcessor = new ResponseMessageProcessor(MessageBus.LoggerFactory, requestResponseSettings, MessageBus, messagePayloadProvider: eventData => eventData.EventBody.ToArray()); + CheckpointTrigger = new CheckpointTrigger(requestResponseSettings, MessageBus.LoggerFactory); } } \ No newline at end of file diff --git a/src/SlimMessageBus.Host.Kafka/Consumer/KafkaGroupConsumer.cs b/src/SlimMessageBus.Host.Kafka/Consumer/KafkaGroupConsumer.cs index 3fa0e413..cfeb1082 100644 --- a/src/SlimMessageBus.Host.Kafka/Consumer/KafkaGroupConsumer.cs +++ b/src/SlimMessageBus.Host.Kafka/Consumer/KafkaGroupConsumer.cs @@ -216,7 +216,7 @@ protected virtual void OnOffsetsCommitted(CommittedOffsets e) { if (e.Error.IsError || e.Error.IsFatal) { - Logger.LogWarning("Group [{Group}]: Failed to commit offsets: [{Offsets}], error: {error}", Group, string.Join(", ", e.Offsets), e.Error.Reason); + Logger.LogWarning("Group [{Group}]: Failed to commit offsets: [{Offsets}], error: {Error}", Group, string.Join(", ", e.Offsets), e.Error.Reason); } else { @@ -235,7 +235,7 @@ protected virtual void OnClose() protected virtual void OnStatistics(string json) { - Logger.LogTrace("Group [{Group}]: Statistics: {statistics}", Group, json); + Logger.LogTrace("Group [{Group}]: Statistics: {Statistics}", Group, json); } #region Implementation of IKafkaCoordinator diff --git a/src/SlimMessageBus.Host.Outbox/Interceptors/OutboxForwardingPublishInterceptor.cs b/src/SlimMessageBus.Host.Outbox/Interceptors/OutboxForwardingPublishInterceptor.cs index 71c55872..40921b8d 100644 --- a/src/SlimMessageBus.Host.Outbox/Interceptors/OutboxForwardingPublishInterceptor.cs +++ b/src/SlimMessageBus.Host.Outbox/Interceptors/OutboxForwardingPublishInterceptor.cs @@ -20,7 +20,7 @@ public sealed class OutboxForwardingPublishInterceptor( OutboxSettings outboxSettings) : OutboxForwardingPublishInterceptor, IInterceptorWithOrder, IPublishInterceptor, IDisposable where T : class { - static readonly internal string SkipOutboxHeader = "__SkipOutbox"; + internal const string SkipOutboxHeader = "__SkipOutbox"; private readonly ILogger _logger = logger; private readonly IOutboxRepository _outboxRepository = outboxRepository; diff --git a/src/SlimMessageBus.Host.Outbox/Services/OutboxSendingTask.cs b/src/SlimMessageBus.Host.Outbox/Services/OutboxSendingTask.cs index e8cdebf8..c0b32c62 100644 --- a/src/SlimMessageBus.Host.Outbox/Services/OutboxSendingTask.cs +++ b/src/SlimMessageBus.Host.Outbox/Services/OutboxSendingTask.cs @@ -296,7 +296,7 @@ async internal Task SendMessages(IServiceProvider serviceProvider, IOutboxR if (messageType == null) { abortedIds.Add(outboxMessage.Id); - _logger.LogError("Outbox message with Id {id} - the MessageType {messageType} is not recognized. The type might have been renamed or moved namespaces.", outboxMessage.Id, outboxMessage.MessageType); + _logger.LogError("Outbox message with Id {Id} - the MessageType {MessageType} is not recognized. The type might have been renamed or moved namespaces.", outboxMessage.Id, outboxMessage.MessageType); return null; } diff --git a/src/SlimMessageBus.Host.Sql.Common/CommonSqlMigrationService.cs b/src/SlimMessageBus.Host.Sql.Common/CommonSqlMigrationService.cs index 3b6d642a..e4efa035 100644 --- a/src/SlimMessageBus.Host.Sql.Common/CommonSqlMigrationService.cs +++ b/src/SlimMessageBus.Host.Sql.Common/CommonSqlMigrationService.cs @@ -14,7 +14,7 @@ public abstract class CommonSqlMigrationService protected TRepository Repository { get; } public ISqlTransactionService TransactionService { get; } - public CommonSqlMigrationService(ILogger logger, TRepository repository, ISqlTransactionService transactionService, TSettings settings) + protected CommonSqlMigrationService(ILogger logger, TRepository repository, ISqlTransactionService transactionService, TSettings settings) { Logger = logger; Settings = settings; diff --git a/src/SlimMessageBus.Host/Consumer/AbstractConsumer.cs b/src/SlimMessageBus.Host/Consumer/AbstractConsumer.cs index 25a4ef32..dab3edb3 100644 --- a/src/SlimMessageBus.Host/Consumer/AbstractConsumer.cs +++ b/src/SlimMessageBus.Host/Consumer/AbstractConsumer.cs @@ -12,7 +12,7 @@ public abstract class AbstractConsumer : IAsyncDisposable, IConsumerControl protected CancellationToken CancellationToken => _cancellationTokenSource.Token; - public AbstractConsumer(ILogger logger) + protected AbstractConsumer(ILogger logger) { Logger = logger; } diff --git a/src/SlimMessageBus.Host/MessageBusBase.cs b/src/SlimMessageBus.Host/MessageBusBase.cs index 08c76b22..29d6cdf8 100644 --- a/src/SlimMessageBus.Host/MessageBusBase.cs +++ b/src/SlimMessageBus.Host/MessageBusBase.cs @@ -182,7 +182,7 @@ protected virtual void BuildPendingRequestStore() private Dictionary BuildProducerByBaseMessageType() { var producerByBaseMessageType = Settings.Producers.ToDictionary(producerSettings => producerSettings.MessageType); - + foreach (var consumerSettings in Settings.Consumers.Where(x => x.ResponseType != null)) { // A response type can be used across different requests hence TryAdd @@ -314,7 +314,7 @@ public void Dispose() GC.SuppressFinalize(this); } - protected void Dispose(bool disposing) + protected virtual void Dispose(bool disposing) { if (disposing) { @@ -717,7 +717,7 @@ public virtual Task OnResponseArrived(byte[] responsePayload, string public virtual bool IsMessageScopeEnabled(ConsumerSettings consumerSettings, IDictionary consumerContextProperties) => consumerSettings.IsMessageScopeEnabled ?? Settings.IsMessageScopeEnabled ?? true; - public virtual IMessageScope CreateMessageScope(ConsumerSettings consumerSettings, object message, IDictionary consumerContextProperties, IServiceProvider currentServiceProvider = null) + public virtual IMessageScope CreateMessageScope(ConsumerSettings consumerSettings, object message, IDictionary consumerContextProperties, IServiceProvider currentServiceProvider) { var createMessageScope = IsMessageScopeEnabled(consumerSettings, consumerContextProperties); return new MessageScopeWrapper(_logger, currentServiceProvider ?? Settings.ServiceProvider, createMessageScope, message); diff --git a/src/SlimMessageBus.Host/MessageWithHeadersSerializer.cs b/src/SlimMessageBus.Host/MessageWithHeadersSerializer.cs index 679bfc2c..a64e0f75 100644 --- a/src/SlimMessageBus.Host/MessageWithHeadersSerializer.cs +++ b/src/SlimMessageBus.Host/MessageWithHeadersSerializer.cs @@ -81,7 +81,7 @@ private int WriteObject(byte[] payload, int index, object v) payload[index] = TypeIdGuid; return 1 + WriteGuid(payload, index + 1, g); default: - throw new InvalidOperationException($"Not supported header value type {v?.GetType().FullName ?? "(null)"}"); + throw new InvalidOperationException($"Not supported header value type {v.GetType().FullName ?? "(null)"}"); } } @@ -95,7 +95,7 @@ private int CalculateWriteObjectByteLength(object v) int _ => sizeof(int), long _ => sizeof(long), Guid _ => 16, - _ => throw new InvalidOperationException($"Not supported header value type {v?.GetType().FullName ?? "(null)"}"), + _ => throw new InvalidOperationException($"Not supported header value type {v.GetType().FullName ?? "(null)"}"), }; return 1 + byteLength; } diff --git a/src/SlimMessageBus.Host/Producer/InterceptorPipelines/PublishInterceptorPipeline.cs b/src/SlimMessageBus.Host/Producer/InterceptorPipelines/PublishInterceptorPipeline.cs index 89cf5502..c1d51856 100644 --- a/src/SlimMessageBus.Host/Producer/InterceptorPipelines/PublishInterceptorPipeline.cs +++ b/src/SlimMessageBus.Host/Producer/InterceptorPipelines/PublishInterceptorPipeline.cs @@ -2,7 +2,6 @@ internal class PublishInterceptorPipeline : ProducerInterceptorPipeline { - private readonly IEnumerable _publishInterceptors; private readonly Func, IProducerContext, Task> _publishInterceptorFunc; private IEnumerator _publishInterceptorsEnumerator; private bool _publishInterceptorsVisited = false; @@ -10,10 +9,9 @@ internal class PublishInterceptorPipeline : ProducerInterceptorPipeline producerInterceptors, IEnumerable publishInterceptors) : base(bus, message, producerSettings, targetBus, context, producerInterceptors) { - _publishInterceptors = publishInterceptors; _publishInterceptorFunc = bus.RuntimeTypeCache.PublishInterceptorType[message.GetType()]; _publishInterceptorsVisited = publishInterceptors is null; - _publishInterceptorsEnumerator = _publishInterceptors?.GetEnumerator(); + _publishInterceptorsEnumerator = publishInterceptors?.GetEnumerator(); } public async Task Next() diff --git a/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/ConcurrentMessageProcessorQueueTests.cs b/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/ConcurrentMessageProcessorQueueTests.cs index 08f616df..c548124b 100644 --- a/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/ConcurrentMessageProcessorQueueTests.cs +++ b/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/ConcurrentMessageProcessorQueueTests.cs @@ -5,7 +5,7 @@ public class ConcurrentMessageProcessorQueueTests { [Fact] - public async void When_Enqueue_Given_FourMessagesEnqueued_Then_ProcessMessageIsCalledOnFirstTwoThenTwoAfterThat() + public async Task When_Enqueue_Given_FourMessagesEnqueued_Then_ProcessMessageIsCalledOnFirstTwoThenTwoAfterThat() { // Arrange var messageProcessor = new Mock>(); diff --git a/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/MessageProcessorQueueTests.cs b/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/MessageProcessorQueueTests.cs index 909fe235..05fa159f 100644 --- a/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/MessageProcessorQueueTests.cs +++ b/src/Tests/SlimMessageBus.Host.Memory.Test/Consumers/MessageProcessorQueueTests.cs @@ -5,7 +5,7 @@ public class MessageProcessorQueueTests { [Fact] - public async void When_Enqueue_Given_TwoMessagesEnqueued_Then_ProcessMessageIsCalledOn1stMessageAndOn2ndAfterThat() + public async Task When_Enqueue_Given_TwoMessagesEnqueued_Then_ProcessMessageIsCalledOn1stMessageAndOn2ndAfterThat() { // Arrange var messageProcessor = new Mock>(); diff --git a/src/Tests/SlimMessageBus.Host.Test/Helpers/ReflectionUtilsTests.cs b/src/Tests/SlimMessageBus.Host.Test/Helpers/ReflectionUtilsTests.cs index 06019d7b..93677b61 100644 --- a/src/Tests/SlimMessageBus.Host.Test/Helpers/ReflectionUtilsTests.cs +++ b/src/Tests/SlimMessageBus.Host.Test/Helpers/ReflectionUtilsTests.cs @@ -19,7 +19,7 @@ public void When_GenerateGetterFunc_Given_TaskOfT_Then_ResultOfTaskIsObtained() } [Fact] - public async void When_GenerateMethodCallToFunc_Given_ConsumerWithOnHandlerAsyncMethodWithTwoArguments_Then_MethodIsProperlyInvoked() + public async Task When_GenerateMethodCallToFunc_Given_ConsumerWithOnHandlerAsyncMethodWithTwoArguments_Then_MethodIsProperlyInvoked() { // arrange var message = new SomeMessage(); @@ -61,7 +61,7 @@ public void When_GenerateGenericMethodCallToFunc_Given_GenericMethid_Then_Method } [Fact] - public async void When_TaskOfObjectContinueWithTaskOfTypeFunc_Given_TaskOfObject_Then_TaskTypedIsObtained() + public async Task When_TaskOfObjectContinueWithTaskOfTypeFunc_Given_TaskOfObject_Then_TaskTypedIsObtained() { // arrange var taskOfObject = Task.FromResult(10);