Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CORELIB-182] Fix dotnet and rider warnings, remove StyleCop leftovers #750

Merged
merged 21 commits into from
Jan 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,34 @@ dotnet_naming_symbols.everything_else.applicable_accessibilities = *
dotnet_diagnostic.CA1812.severity = none
dotnet_diagnostic.CA1724.severity = none
dotnet_diagnostic.CA1515.severity = none
dotnet_diagnostic.CA2007.severity = none
dotnet_diagnostic.CA1707.severity = none
dotnet_diagnostic.CA1062.severity = none
dotnet_diagnostic.CA1816.severity = none
dotnet_diagnostic.CA1303.severity = none
dotnet_diagnostic.CA1002.severity = none
dotnet_diagnostic.CA1032.severity = none
dotnet_diagnostic.CA1034.severity = none
dotnet_diagnostic.CA1019.severity = none
dotnet_diagnostic.CA1308.severity = none
dotnet_diagnostic.IDE0058.severity = none

# Disable temporarily
dotnet_diagnostic.xUnit1051.severity = none

# Rider
resharper_inconsistent_naming_highlighting = hint
resharper_static_member_in_generic_type_highlighting = hint
resharper_check_namespace_highlighting = hint
resharper_variable_hides_outer_variable_highlighting = hint
resharper_parameter_hides_member_highlighting = hint
resharper_not_null_or_required_member_is_not_initialized_highlighting = hint

resharper_convert_type_check_pattern_to_null_check_highlighting = none
resharper_convert_type_check_to_null_check_highlighting = none
resharper_redundant_record_class_keyword_highlighting = none

[test/**]
resharper_equal_expression_comparison_highlighting = none
resharper_entity_framework_model_validation_unlimited_string_length_highlighting = none
resharper_unused_auto_property_accessor_local_highlighting = none
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ public class CQRSPipelineBuilder
{
public Func<CQRSObjectMetadata, bool> ObjectsFilter { get; set; } = _ => true;

public Action<ICQRSApplicationBuilder> Commands { get; set; } = app => { };
public Action<ICQRSApplicationBuilder> Queries { get; set; } = app => { };
public Action<ICQRSApplicationBuilder> Operations { get; set; } = app => { };
public Action<ICQRSApplicationBuilder> Commands { get; set; } = _ => { };
public Action<ICQRSApplicationBuilder> Queries { get; set; } = _ => { };
public Action<ICQRSApplicationBuilder> Operations { get; set; } = _ => { };

private readonly IEndpointRouteBuilder routeBuilder;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
Expand Down Expand Up @@ -49,6 +50,7 @@ public override ISession Session
set { }
}

[SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a question, does it have a problem with the properties set here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes setting it in constructor. https://www.jetbrains.com/help/rider/VirtualMemberCallInConstructor.html For example this might fail:

public class CustomContext : LocalCallContext
{
    private string prefix;

    public CustomContext(
        IServiceProvider requestServices,
        ClaimsPrincipal user,
        string? activityIdentifier,
        IHeaderDictionary? headers,
        CancellationToken cancellationToken
    )
        : base(requestServices, user, activityIdentifier, headers, cancellationToken)
    {
        prefix = "test_";
    }

    public override string TraceIdentifier
    {
        get => base.TraceIdentifier;
        set => base.TraceIdentifier = $"{prefix}{value}";
    }
}
var context = new CustomContext(
    requestServices: serviceProvider,
    user: user,
    activityIdentifier: "123",
    headers: null,
    cancellationToken: CancellationToken.None
);

Because base constructor runs first and calls overridden setter but CustomContext constructor has not run yet and prefix is not initialized so we might get something like Object reference not set to an instance of an object.

public LocalCallContext(
IServiceProvider requestServices,
ClaimsPrincipal user,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Metrics;
using LeanCode.CQRS.AspNetCore.Serialization;
using LeanCode.CQRS.Execution;
using Microsoft.AspNetCore.Http;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using LeanCode.Contracts;
using LeanCode.CQRS.Execution;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.AspNetCore.Mvc.ModelBinding;
Expand Down Expand Up @@ -213,6 +213,7 @@ private static void AddCommonResponses(ApiDescription apiDescription)
private static CQRSBodyModelMetadata CreateModelMetadata(Type type) => new(ModelMetadataIdentity.ForType(type));
}

[SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")]
internal sealed class CQRSBodyModelMetadata : ModelMetadata
{
public CQRSBodyModelMetadata(ModelMetadataIdentity identity)
Expand All @@ -222,7 +223,7 @@ public CQRSBodyModelMetadata(ModelMetadataIdentity identity)
ImmutableDictionary<object, object>.Empty;
public override string? BinderModelName { get; }
public override Type? BinderType { get; }
public override BindingSource? BindingSource => BindingSource.Body;
public override BindingSource BindingSource => BindingSource.Body;
public override bool ConvertEmptyStringToNull { get; }
public override string? DataTypeName { get; }
public override string? Description { get; }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Frozen;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using LeanCode.Components;
using LeanCode.Contracts;
Expand Down Expand Up @@ -26,6 +27,7 @@ public CQRSObjectsRegistrationSource(IServiceCollection services, IObjectExecuto

public CQRSObjectMetadata MetadataFor(Type type) => cachedMetadata.Value[type];

[SuppressMessage("ReSharper", "PossibleMultipleEnumeration")]
public void AddCQRSObjects(TypesCatalog contractsCatalog, TypesCatalog handlersCatalog)
{
var contracts = contractsCatalog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static void AddCQRSHandler(this IServiceCollection serviceCollection, CQR
new(MakeHandlerInterfaceType(obj), sp => sp.GetRequiredService(obj.HandlerType), ServiceLifetime.Scoped)
);

Type MakeHandlerInterfaceType(CQRSObjectMetadata obj)
static Type MakeHandlerInterfaceType(CQRSObjectMetadata obj)
{
return obj.ObjectKind switch
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Text.Json;
using LeanCode.Serialization;
using Microsoft.AspNetCore.Http.Json;
using Microsoft.Extensions.Options;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;

namespace LeanCode.CQRS.AspNetCore;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;

namespace LeanCode.CQRS.Execution;

public class CommandHandlerNotFoundException : Exception
Expand Down
1 change: 0 additions & 1 deletion src/CQRS/LeanCode.CQRS.Execution/ICommandHandler.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Threading.Tasks;
using LeanCode.Contracts;
using Microsoft.AspNetCore.Http;

Expand Down
3 changes: 1 addition & 2 deletions src/CQRS/LeanCode.CQRS.Execution/IOperationHandler.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Threading.Tasks;
using LeanCode.Contracts;
using Microsoft.AspNetCore.Http;

Expand All @@ -7,5 +6,5 @@ namespace LeanCode.CQRS.Execution;
public interface IOperationHandler<in TOperation, TResult>
where TOperation : IOperation<TResult>
{
public Task<TResult> ExecuteAsync(HttpContext context, TOperation operation);
Task<TResult> ExecuteAsync(HttpContext context, TOperation operation);
}
1 change: 0 additions & 1 deletion src/CQRS/LeanCode.CQRS.Execution/IQueryHandler.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Threading.Tasks;
using LeanCode.Contracts;
using Microsoft.AspNetCore.Http;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;

namespace LeanCode.CQRS.Execution;

public class OperationHandlerNotFoundException : Exception
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;

namespace LeanCode.CQRS.Execution;

public class QueryHandlerNotFoundException : Exception
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Type defaultDefinition
)
{
var outer = types.Where(RegistrationMetadata.IsConsumer);
var inner = types.Where((Type x) => x.HasInterface(typeof(IConsumerDefinition<>)));
var inner = types.Where(x => x.HasInterface(typeof(IConsumerDefinition<>)));
var enumerable =
from c in outer
join d in inner on c equals d.GetClosingArgument(typeof(IConsumerDefinition<>)) into dc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ public sealed class ResettableBusActivityMonitor
IPublishObserver,
IDisposable
{
private readonly object mutex = new object();
private readonly Lock mutex = new();
private readonly AsyncManualResetEvent inactive = new(true);
private readonly RollingTimer timer;
private readonly RollingTimer rollingTimer;

private volatile int consumersInFlight;
private volatile int receiversInFlight;
Expand All @@ -27,7 +27,7 @@ public sealed class ResettableBusActivityMonitor

public ResettableBusActivityMonitor(TimeSpan inactivityWaitTime)
{
timer = new RollingTimer(OnTimer, inactivityWaitTime);
rollingTimer = new RollingTimer(OnTimer, inactivityWaitTime);
}

public static ResettableBusActivityMonitor CreateFor(IBusControl bus, TimeSpan inactivityWaitTime)
Expand Down Expand Up @@ -83,15 +83,15 @@ Task IPublishObserver.PublishFault<T>(PublishContext<T> context, Exception excep
Decrement(ref publishInFlight);

[System.Diagnostics.CodeAnalysis.SuppressMessage("?", "CA1063", Justification = "We want clean API.")]
void IDisposable.Dispose() => timer.Dispose();
void IDisposable.Dispose() => rollingTimer.Dispose();

private Task Increment(ref int counter)
{
lock (mutex)
{
Interlocked.Increment(ref counter);
inactive.Reset();
timer.Stop();
rollingTimer.Stop();
}

return Task.CompletedTask;
Expand All @@ -105,7 +105,7 @@ private Task Decrement(ref int counter)

if (HasStabilized)
{
timer.Restart();
rollingTimer.Restart();
}
}

Expand Down
1 change: 0 additions & 1 deletion src/CQRS/LeanCode.CQRS.RemoteHttp.Client/Exceptions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System;
using System.Net;

namespace LeanCode.CQRS.RemoteHttp.Client;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
using System;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using System.Threading.Tasks;
using LeanCode.Contracts;
using LeanCode.Contracts.Validation;

Expand All @@ -30,7 +25,7 @@ public virtual async Task<CommandResult> RunAsync(ICommand command, Cancellation
{
using var content = JsonContent.Create(command, command.GetType(), options: serializerOptions);
using var response = await client.PostAsync(
"command/" + command.GetType().FullName,
new Uri("command/" + command.GetType().FullName, UriKind.Relative),
content,
cancellationToken
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public virtual async Task<TResult> GetAsync<TResult>(
{
using var content = JsonContent.Create(operation, operation.GetType(), options: serializerOptions);
using var response = await client.PostAsync(
"operation/" + operation.GetType().FullName,
new Uri("operation/" + operation.GetType().FullName, UriKind.Relative),
content,
cancellationToken
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using System.Threading.Tasks;
using LeanCode.Contracts;

namespace LeanCode.CQRS.RemoteHttp.Client;
Expand All @@ -27,7 +24,11 @@ public virtual async Task<TResult> GetAsync<TResult>(
)
{
using var content = JsonContent.Create(query, query.GetType(), options: serializerOptions);
using var response = await client.PostAsync("query/" + query.GetType().FullName, content, cancellationToken);
using var response = await client.PostAsync(
new Uri("query/" + query.GetType().FullName, UriKind.Relative),
content,
cancellationToken
);

response.HandleCommonCQRSErrors<QueryNotFoundException, InvalidQueryException>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;
using System.Net.Http;
using static System.Net.HttpStatusCode;

namespace LeanCode.CQRS.RemoteHttp.Client;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Linq;
using System.Security.Claims;

namespace LeanCode.CQRS.Security;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;

namespace LeanCode.CQRS.Security;

public class CustomAuthorizerNotFoundException : Exception
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using System.Security.Claims;
using System.Threading.Tasks;
using LeanCode.Contracts.Security;
using Microsoft.AspNetCore.Http;

namespace LeanCode.CQRS.Security;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;

namespace LeanCode.CQRS.Security.Exceptions;

public class InsufficientPermissionException : Exception
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;

namespace LeanCode.CQRS.Security.Exceptions;

public class UnauthenticatedException : Exception
Expand Down
2 changes: 1 addition & 1 deletion src/CQRS/LeanCode.CQRS.Security/IAuthorizerResolver.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace LeanCode.CQRS.Security;

public interface IAuthorizerResolver<TAppContext>
public interface IAuthorizerResolver
{
ICustomAuthorizerWrapper? FindAuthorizer(Type authorizerType, Type objectType);
}
Expand Down
2 changes: 0 additions & 2 deletions src/CQRS/LeanCode.CQRS.Security/IRoleRegistration.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System.Collections.Generic;

namespace LeanCode.CQRS.Security;

public interface IRoleRegistration
Expand Down
2 changes: 0 additions & 2 deletions src/CQRS/LeanCode.CQRS.Security/Role.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;

namespace LeanCode.CQRS.Security;
Expand Down
2 changes: 0 additions & 2 deletions src/CQRS/LeanCode.CQRS.Security/RoleRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;

namespace LeanCode.CQRS.Security;

Expand Down
1 change: 0 additions & 1 deletion src/CQRS/LeanCode.CQRS.Validation/ICommandValidator.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Threading.Tasks;
using LeanCode.Contracts;
using LeanCode.Contracts.Validation;
using Microsoft.AspNetCore.Http;
Expand Down
2 changes: 0 additions & 2 deletions src/Core/LeanCode.Components/TypesCatalog.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;

namespace LeanCode.Components;
Expand Down
3 changes: 1 addition & 2 deletions src/Core/LeanCode.Startup.Autofac/LeanProgram.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.IO;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
Expand All @@ -16,7 +15,7 @@ public static IHostBuilder BuildMinimalHost<TStartup>()
return new HostBuilder()
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureAppConfiguration(
(hostingContext, config) =>
(_, config) =>
{
config.AddEnvironmentVariables();
}
Expand Down
2 changes: 1 addition & 1 deletion src/Core/LeanCode.Startup.MicrosoftDI/LeanProgram.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static IHostBuilder BuildMinimalHost<TStartup>()
{
return new HostBuilder()
.ConfigureAppConfiguration(
(hostingContext, config) =>
(_, config) =>
{
config.AddEnvironmentVariables();
}
Expand Down
Loading
Loading