Skip to content

Commit cc9023e

Browse files
committed
Code style: use c# 12 collection literals
1 parent 4a5e6b6 commit cc9023e

33 files changed

+113
-115
lines changed

.editorconfig

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ dotnet_style_qualification_for_field = false:suggestion
1717
dotnet_style_qualification_for_property = false:suggestion
1818
dotnet_style_qualification_for_method = false:suggestion
1919
dotnet_style_qualification_for_event = false:suggestion
20-
csharp_style_namespace_declarations=file_scoped:warning
20+
csharp_style_namespace_declarations = file_scoped:warning
21+
dotnet_style_prefer_collection_expression = true:warning
22+
dotnet_style_collection_initializer = true:warning
2123

2224
# ReSharper properties
2325
resharper_int_align_switch_expressions = true

src/NSubstitute/Compatibility/DiagnosticsNullabilityAttributes.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ internal sealed class MemberNotNullAttribute : Attribute
9090
/// <param name="member">
9191
/// The field or property member that is promised to be not-null.
9292
/// </param>
93-
public MemberNotNullAttribute(string member) => Members = new[] { member };
93+
public MemberNotNullAttribute(string member) => Members = [member];
9494

9595
/// <summary>Initializes the attribute with the list of field and property members.</summary>
9696
/// <param name="members">
@@ -116,7 +116,7 @@ internal sealed class MemberNotNullWhenAttribute : Attribute
116116
public MemberNotNullWhenAttribute(bool returnValue, string member)
117117
{
118118
ReturnValue = returnValue;
119-
Members = new[] { member };
119+
Members = [member];
120120
}
121121

122122
/// <summary>Initializes the attribute with the specified return value condition and list of field and property members.</summary>

src/NSubstitute/Core/ArgumentSpecificationDequeue.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace NSubstitute.Core;
55

66
public class ArgumentSpecificationDequeue : IArgumentSpecificationDequeue
77
{
8-
private static readonly IArgumentSpecification[] EmptySpecifications = new IArgumentSpecification[0];
8+
private static readonly IArgumentSpecification[] EmptySpecifications = [];
99

1010
private readonly Func<IList<IArgumentSpecification>> _dequeueAllQueuedArgSpecs;
1111

src/NSubstitute/Core/Arguments/ArrayContentsArgumentMatcher.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public bool IsSatisfiedBy(object? argument)
3131

3232
public string Format(object? argument, bool highlight)
3333
{
34-
var argArray = argument is IEnumerable enumerableArgs ? enumerableArgs.Cast<object>().ToArray() : new object[0];
34+
var argArray = argument is IEnumerable enumerableArgs ? enumerableArgs.Cast<object>().ToArray() : [];
3535
return Format(argArray, _argumentSpecifications).Join(", ");
3636
}
3737

src/NSubstitute/Core/Call.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void AssignSequenceNumber(long number)
8181
object?[] originalArray = _originalArguments;
8282
if (originalArray == _arguments && originalArray.Length > 0)
8383
{
84-
object?[] copy = originalArray.ToArray();
84+
object?[] copy = [.. originalArray];
8585
// If it happens that _originalArguments doesn't point to the `_arguments` anymore -
8686
// it might happen that other thread already created a copy and mutated the original `_arguments` array.
8787
// In this case it's unsafe to replace it with a copy.

src/NSubstitute/Core/CustomHandlers.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class CustomHandlers : ICustomHandlers
44
{
5-
private readonly List<ICallHandler> _handlers = new();
5+
private readonly List<ICallHandler> _handlers = [];
66
private readonly ISubstituteState _substituteState;
77

88
public IReadOnlyCollection<ICallHandler> Handlers => _handlers;

src/NSubstitute/Core/DependencyInjection/NSubContainer.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class NSubContainer : IConfigurableNSubContainer
1717
{
1818
private readonly NSubContainer? _parentContainer;
1919
private readonly object _syncRoot;
20-
private readonly Dictionary<Type, Registration> _registrations = new();
20+
private readonly Dictionary<Type, Registration> _registrations = [];
2121

2222
public NSubContainer()
2323
{
@@ -177,7 +177,7 @@ public object Resolve(Scope scope)
177177

178178
private class Scope : INSubResolver
179179
{
180-
private readonly Dictionary<Registration, object> _cache = new Dictionary<Registration, object>();
180+
private readonly Dictionary<Registration, object> _cache = [];
181181
private readonly NSubContainer _mostNestedContainer;
182182

183183
public Scope(NSubContainer mostNestedContainer)

src/NSubstitute/Core/EventHandlerRegistry.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class EventHandlerRegistry : IEventHandlerRegistry
66
// Events are not expected to be configured/raised concurrently, so simple locking should be sufficient.
77
// List lookup is O(n), but for really small size performance is comparable to dictionary.
88
// Given that normally a few events are configured only, it should be totally fine.
9-
private readonly List<Tuple<string, List<object>>> _handlersForEvent = new();
9+
private readonly List<Tuple<string, List<object>>> _handlersForEvent = [];
1010

1111
public void Add(string eventName, object handler)
1212
{

src/NSubstitute/Core/Events/DelegateEventWrapper.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private bool LooksLikeAnEventStyleCall(ParameterInfo[] parameters)
6464
sender = _providedArguments[0];
6565
eventArgs = GetDefaultForEventArgType(eventArgsType);
6666
}
67-
return new[] { sender, eventArgs };
67+
return [sender, eventArgs];
6868
}
6969

7070
private static bool RequiredArgsHaveBeenProvided(object?[] providedArgs, ParameterInfo[] requiredArgs)

src/NSubstitute/Core/Events/EventHandlerWrapper.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ protected override object[] WorkOutRequiredArguments(ICall call)
3535
{
3636
var sender = _sender ?? call.Target();
3737
var eventArgs = _eventArgs ?? GetDefaultForEventArgType(typeof(TEventArgs));
38-
return new[] { sender, eventArgs };
38+
return [sender, eventArgs];
3939
}
4040
}

src/NSubstitute/Core/Events/RaiseEventWrapper.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected EventArgs GetDefaultForEventArgType(Type type)
2121
, type.Name, RaiseMethodName);
2222
throw new CannotCreateEventArgsException(message);
2323
}
24-
return (EventArgs)defaultConstructor.Invoke(new object[0]);
24+
return (EventArgs)defaultConstructor.Invoke([]);
2525
}
2626

2727
private static ConstructorInfo? GetDefaultConstructor(Type type) => type.GetConstructor(Type.EmptyTypes);

src/NSubstitute/Core/Query.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class Query : IQuery, IQueryResults
44
{
5-
private readonly List<CallSpecAndTarget> _querySpec = new();
5+
private readonly List<CallSpecAndTarget> _querySpec = [];
66
private readonly HashSet<ICall> _matchingCalls = new(new CallSequenceNumberComparer());
77
private readonly ICallSpecificationFactory _callSpecificationFactory;
88

src/NSubstitute/Core/ReflectionExtensions.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ private static bool CanBePropertySetterCall(MethodInfo call)
4141

4242
private static PropertyInfo[] GetAllProperties(Type? type)
4343
{
44-
return type != null
45-
? type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
46-
: new PropertyInfo[0];
44+
return type?.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?? [];
4745
}
4846
}

src/NSubstitute/Core/ThreadLocalContext.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace NSubstitute.Core;
66

77
public class ThreadLocalContext : IThreadLocalContext
88
{
9-
private static readonly IArgumentSpecification[] EmptySpecifications = new IArgumentSpecification[0];
9+
private static readonly IArgumentSpecification[] EmptySpecifications = [];
1010

1111
private readonly RobustThreadLocal<ICallRouter?> _lastCallRouter;
1212
private readonly RobustThreadLocal<IList<IArgumentSpecification>> _argumentSpecifications;

src/NSubstitute/Extensions/ExceptionExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ private static object FromException(object value, Exception exception)
236236
{
237237
var fromExceptionMethodInfo = typeof(Task).GetMethods(BindingFlags.Static | BindingFlags.Public).Single(m => m.Name == "FromException" && m.ContainsGenericParameters);
238238
var specificFromExceptionMethod = fromExceptionMethodInfo.MakeGenericMethod(valueType.GenericTypeArguments);
239-
return specificFromExceptionMethod.Invoke(null, new object[] { exception });
239+
return specificFromExceptionMethod.Invoke(null, [exception]);
240240
}
241241

242242
return Task.FromException(exception);

src/NSubstitute/Proxies/CastleDynamicProxy/CastleDynamicProxyFactory.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private object GenerateTypeProxy(ICallRouter callRouter, Type typeToProxy, Type[
4040
typeToProxy,
4141
additionalInterfaces,
4242
constructorArguments,
43-
new IInterceptor[] { proxyIdInterceptor, forwardingInterceptor },
43+
[proxyIdInterceptor, forwardingInterceptor],
4444
proxyGenerationOptions);
4545

4646
forwardingInterceptor.SwitchToFullDispatchMode();
@@ -63,7 +63,7 @@ private object GenerateDelegateProxy(ICallRouter callRouter, Type delegateType,
6363
typeToProxy: typeof(object),
6464
additionalInterfaces: null,
6565
constructorArguments: null,
66-
interceptors: new IInterceptor[] { proxyIdInterceptor, forwardingInterceptor },
66+
interceptors: [proxyIdInterceptor, forwardingInterceptor],
6767
proxyGenerationOptions);
6868

6969
forwardingInterceptor.SwitchToFullDispatchMode();

src/NSubstitute/Raise.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private static object[] FixParamsArrayAmbiguity(object[] arguments, Type delegat
8181

8282
if (singleParameterType.IsInstanceOfType(arguments))
8383
{
84-
return new object[] { arguments };
84+
return [arguments];
8585
}
8686

8787
return arguments;

src/NSubstitute/Routing/AutoValues/AutoObservableProvider.cs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using System.Reflection;
2-
using NSubstitute.Core;
1+
using NSubstitute.Core;
2+
using System.Reflection;
33

44
namespace NSubstitute.Routing.AutoValues;
55

@@ -23,9 +23,7 @@ public bool CanProvideValueFor(Type type) =>
2323
Type innerType = type.GetGenericArguments()[0];
2424
var valueProvider = _autoValueProviders.Value.FirstOrDefault(vp => vp.CanProvideValueFor(innerType));
2525
var value = valueProvider == null ? GetDefault(type) : valueProvider.GetValue(innerType);
26-
return Activator.CreateInstance(
27-
typeof(ReturnObservable<>).MakeGenericType(innerType)
28-
, new object?[] { value });
26+
return Activator.CreateInstance(typeof(ReturnObservable<>).MakeGenericType(innerType), [value]);
2927
}
3028

3129
private static object? GetDefault(Type type)

src/NSubstitute/Routing/AutoValues/AutoSubstituteProvider.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public bool CanProvideValueFor(Type type)
2121

2222
public object GetValue(Type type)
2323
{
24-
return _substituteFactory.Create(new[] { type }, new object[0]);
24+
return _substituteFactory.Create([type], []);
2525
}
2626

2727
private bool IsPureVirtualClassWithParameterlessConstructor(Type type)

src/NSubstitute/Routing/AutoValues/AutoTaskProvider.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public object GetValue(Type type)
2626
var value = valueProvider == null ? GetDefault(type) : valueProvider.GetValue(taskType);
2727
var taskCompletionSourceType = typeof(TaskCompletionSource<>).MakeGenericType(taskType);
2828
var taskCompletionSource = Activator.CreateInstance(taskCompletionSourceType);
29-
taskCompletionSourceType.GetMethod(nameof(TaskCompletionSource<object>.SetResult))!.Invoke(taskCompletionSource, new[] { value });
29+
taskCompletionSourceType.GetMethod(nameof(TaskCompletionSource<object>.SetResult))!.Invoke(taskCompletionSource, [value]);
3030
return taskCompletionSourceType.GetProperty(nameof(TaskCompletionSource<object>.Task))!.GetValue(taskCompletionSource, null)!;
3131
}
3232
else

src/NSubstitute/Routing/AutoValues/AutoValueProvidersFactory.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ public IReadOnlyCollection<IAutoValueProvider> CreateProviders(ISubstituteFactor
1212
() => result ?? throw new SubstituteInternalException("Value was not constructed yet."),
1313
LazyThreadSafetyMode.PublicationOnly);
1414

15-
result = new IAutoValueProvider[]
16-
{
15+
result =
16+
[
1717
new AutoObservableProvider(lazyResult),
1818
new AutoQueryableProvider(),
1919
new AutoSubstituteProvider(substituteFactory),
2020
new AutoStringProvider(),
2121
new AutoArrayProvider(),
2222
new AutoTaskProvider(lazyResult)
23-
};
23+
];
2424

2525
return result;
2626
}

src/NSubstitute/Routing/RouteFactory.cs

+58-58
Original file line numberDiff line numberDiff line change
@@ -30,85 +30,85 @@ public RouteFactory(SequenceNumberGenerator sequenceNumberGenerator,
3030

3131
public IRoute CallQuery(ISubstituteState state)
3232
{
33-
return new Route(new ICallHandler[] {
34-
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification)
35-
, new AddCallToQueryResultHandler(_threadLocalContext)
36-
, new ReturnAutoValue(AutoValueBehaviour.UseValueForSubsequentCalls, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory)
37-
, ReturnDefaultForReturnTypeHandler()
38-
});
33+
return new Route([
34+
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification),
35+
new AddCallToQueryResultHandler(_threadLocalContext),
36+
new ReturnAutoValue(AutoValueBehaviour.UseValueForSubsequentCalls, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory),
37+
ReturnDefaultForReturnTypeHandler()
38+
]);
3939
}
4040
public IRoute CheckReceivedCalls(ISubstituteState state, MatchArgs matchArgs, Quantity requiredQuantity)
4141
{
42-
return new Route(new ICallHandler[] {
43-
new ClearLastCallRouterHandler(_threadLocalContext)
44-
, new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification)
45-
, new CheckReceivedCallsHandler(state.ReceivedCalls, _callSpecificationFactory, _receivedCallsExceptionThrower, matchArgs, requiredQuantity)
46-
, new ReturnAutoValue(AutoValueBehaviour.ReturnAndForgetValue, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory)
47-
, ReturnDefaultForReturnTypeHandler()
48-
});
42+
return new Route([
43+
new ClearLastCallRouterHandler(_threadLocalContext),
44+
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification),
45+
new CheckReceivedCallsHandler(state.ReceivedCalls, _callSpecificationFactory, _receivedCallsExceptionThrower, matchArgs, requiredQuantity),
46+
new ReturnAutoValue(AutoValueBehaviour.ReturnAndForgetValue, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory),
47+
ReturnDefaultForReturnTypeHandler()
48+
]);
4949
}
5050
public IRoute DoWhenCalled(ISubstituteState state, Action<CallInfo> doAction, MatchArgs matchArgs)
5151
{
52-
return new Route(new ICallHandler[] {
53-
new ClearLastCallRouterHandler(_threadLocalContext)
54-
, new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification)
55-
, new SetActionForCallHandler(_callSpecificationFactory, state.CallActions, doAction, matchArgs)
56-
, ReturnDefaultForReturnTypeHandler()
57-
});
52+
return new Route([
53+
new ClearLastCallRouterHandler(_threadLocalContext),
54+
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification),
55+
new SetActionForCallHandler(_callSpecificationFactory, state.CallActions, doAction, matchArgs),
56+
ReturnDefaultForReturnTypeHandler()
57+
]);
5858
}
5959
public IRoute DoNotCallBase(ISubstituteState state, MatchArgs matchArgs)
6060
{
61-
return new Route(new ICallHandler[] {
62-
new ClearLastCallRouterHandler(_threadLocalContext)
63-
, new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification)
64-
, new DoNotCallBaseForCallHandler(_callSpecificationFactory, state.CallBaseConfiguration, matchArgs)
65-
, ReturnDefaultForReturnTypeHandler()
66-
});
61+
return new Route([
62+
new ClearLastCallRouterHandler(_threadLocalContext),
63+
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification),
64+
new DoNotCallBaseForCallHandler(_callSpecificationFactory, state.CallBaseConfiguration, matchArgs),
65+
ReturnDefaultForReturnTypeHandler()
66+
]);
6767
}
6868
public IRoute CallBase(ISubstituteState state, MatchArgs matchArgs)
6969
{
70-
return new Route(new ICallHandler[] {
71-
new ClearLastCallRouterHandler(_threadLocalContext)
72-
, new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification)
73-
, new CallBaseForCallHandler(_callSpecificationFactory, state.CallBaseConfiguration, matchArgs)
74-
, ReturnDefaultForReturnTypeHandler()
75-
});
70+
return new Route([
71+
new ClearLastCallRouterHandler(_threadLocalContext),
72+
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification),
73+
new CallBaseForCallHandler(_callSpecificationFactory, state.CallBaseConfiguration, matchArgs),
74+
ReturnDefaultForReturnTypeHandler()
75+
]);
7676
}
7777
public IRoute RaiseEvent(ISubstituteState state, Func<ICall, object?[]> getEventArguments)
7878
{
79-
return new Route(new ICallHandler[] {
80-
new ClearLastCallRouterHandler(_threadLocalContext)
81-
, new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification)
82-
, new RaiseEventHandler(state.EventHandlerRegistry, getEventArguments)
83-
, ReturnDefaultForReturnTypeHandler()
84-
});
79+
return new Route([
80+
new ClearLastCallRouterHandler(_threadLocalContext),
81+
new ClearUnusedCallSpecHandler(_threadLocalContext.PendingSpecification),
82+
new RaiseEventHandler(state.EventHandlerRegistry, getEventArguments),
83+
ReturnDefaultForReturnTypeHandler()
84+
]);
8585
}
8686
public IRoute RecordCallSpecification(ISubstituteState state)
8787
{
88-
return new Route(new ICallHandler[] {
89-
new RecordCallSpecificationHandler(_threadLocalContext.PendingSpecification, _callSpecificationFactory, state.CallActions)
90-
, new PropertySetterHandler(_propertyHelper, state.ConfigureCall)
91-
, new ReturnAutoValue(AutoValueBehaviour.UseValueForSubsequentCalls, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory)
92-
, new ReturnFromAndConfigureDynamicCall(state.ConfigureCall)
93-
, ReturnDefaultForReturnTypeHandler()
94-
});
88+
return new Route([
89+
new RecordCallSpecificationHandler(_threadLocalContext.PendingSpecification, _callSpecificationFactory, state.CallActions),
90+
new PropertySetterHandler(_propertyHelper, state.ConfigureCall),
91+
new ReturnAutoValue(AutoValueBehaviour.UseValueForSubsequentCalls, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory),
92+
new ReturnFromAndConfigureDynamicCall(state.ConfigureCall),
93+
ReturnDefaultForReturnTypeHandler()
94+
]);
9595
}
9696
public IRoute RecordReplay(ISubstituteState state)
9797
{
98-
return new Route(new ICallHandler[] {
99-
new TrackLastCallHandler(_threadLocalContext.PendingSpecification)
100-
, new RecordCallHandler(state.ReceivedCalls, _sequenceNumberGenerator)
101-
, new EventSubscriptionHandler(state.EventHandlerRegistry)
102-
, new PropertySetterHandler(_propertyHelper, state.ConfigureCall)
103-
, new DoActionsCallHandler(state.CallActions)
104-
, new ReturnConfiguredResultHandler(state.CallResults)
105-
, new ReturnResultForTypeHandler(state.ResultsForType)
106-
, new ReturnFromBaseIfRequired(state.CallBaseConfiguration)
107-
, new ReturnFromCustomHandlers(state.CustomHandlers)
108-
, new ReturnAutoValue(AutoValueBehaviour.UseValueForSubsequentCalls, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory)
109-
, new ReturnFromAndConfigureDynamicCall(state.ConfigureCall)
110-
, ReturnDefaultForReturnTypeHandler()
111-
});
98+
return new Route([
99+
new TrackLastCallHandler(_threadLocalContext.PendingSpecification),
100+
new RecordCallHandler(state.ReceivedCalls, _sequenceNumberGenerator),
101+
new EventSubscriptionHandler(state.EventHandlerRegistry),
102+
new PropertySetterHandler(_propertyHelper, state.ConfigureCall),
103+
new DoActionsCallHandler(state.CallActions),
104+
new ReturnConfiguredResultHandler(state.CallResults),
105+
new ReturnResultForTypeHandler(state.ResultsForType),
106+
new ReturnFromBaseIfRequired(state.CallBaseConfiguration),
107+
new ReturnFromCustomHandlers(state.CustomHandlers),
108+
new ReturnAutoValue(AutoValueBehaviour.UseValueForSubsequentCalls, state.AutoValueProviders, state.AutoValuesCallResults, _callSpecificationFactory),
109+
new ReturnFromAndConfigureDynamicCall(state.ConfigureCall),
110+
ReturnDefaultForReturnTypeHandler()
111+
]);
112112
}
113113

114114
private ReturnDefaultForReturnTypeHandler ReturnDefaultForReturnTypeHandler() => new(_defaultForType);

0 commit comments

Comments
 (0)