Skip to content

Commit 6671f38

Browse files
Merge branch 'main' into remove-redundant-ToImmutableDictionary-allocations
2 parents d13f022 + c0c774e commit 6671f38

File tree

390 files changed

+9408
-8084
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

390 files changed

+9408
-8084
lines changed

Source/Csla.Analyzers/Csla.Analyzers.Tests/EvaluateManagedBackingFieldsAnalayzerTests.cs Source/Csla.Analyzers/Csla.Analyzers.Tests/EvaluateManagedBackingFieldsAnalyzerTests.cs

+11-11
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
namespace Csla.Analyzers.Tests
55
{
66
[TestClass]
7-
public sealed class EvaluateManagedBackingFieldsAnalayzerTests
7+
public sealed class EvaluateManagedBackingFieldsAnalyzerTests
88
{
99
[TestMethod]
1010
public void VerifySupportedDiagnostics()
1111
{
12-
var analyzer = new EvaluateManagedBackingFieldsAnalayzer();
12+
var analyzer = new EvaluateManagedBackingFieldsAnalyzer();
1313
var diagnostics = analyzer.SupportedDiagnostics;
1414
Assert.AreEqual(1, diagnostics.Length);
1515

@@ -22,7 +22,7 @@ public void VerifySupportedDiagnostics()
2222
nameof(DiagnosticDescriptor.Category));
2323
Assert.AreEqual(DiagnosticSeverity.Error, diagnostic.DefaultSeverity,
2424
nameof(DiagnosticDescriptor.DefaultSeverity));
25-
Assert.AreEqual(HelpUrlBuilder.Build(Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields, nameof(EvaluateManagedBackingFieldsAnalayzer)),
25+
Assert.AreEqual(HelpUrlBuilder.Build(Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields, nameof(EvaluateManagedBackingFieldsAnalyzer)),
2626
diagnostic.HelpLinkUri,
2727
nameof(DiagnosticDescriptor.HelpLinkUri));
2828
}
@@ -31,7 +31,7 @@ public void VerifySupportedDiagnostics()
3131
public async Task AnalyzeWhenClassIsNotStereotype()
3232
{
3333
var code = "public class ClassIsNotStereotype { }";
34-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(code, []);
34+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(code, []);
3535
}
3636

3737
[TestMethod]
@@ -68,7 +68,7 @@ public string BlockData
6868
public string ExpressionData => string.Empty;
6969
}
7070
""";
71-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(code, []);
71+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(code, []);
7272
}
7373

7474
[TestMethod]
@@ -113,7 +113,7 @@ public string Data4
113113
public string ExpressionData => GetProperty(ExpressionDataProperty);
114114
}
115115
""";
116-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(code, [
116+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(code, [
117117
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,
118118
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,
119119
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields
@@ -142,7 +142,7 @@ public string Data
142142
public string ExpressionData => GetProperty(ExpressionDataProperty);
143143
}
144144
""";
145-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(code, []);
145+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(code, []);
146146
}
147147

148148
[TestMethod]
@@ -175,7 +175,7 @@ public string ArrowData
175175
public string ExpressionData => GetProperty(ExpressionDataProperty);
176176
}
177177
""";
178-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(
178+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(
179179
code,
180180
[
181181
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,
@@ -214,7 +214,7 @@ public string ArrowData
214214
public string ExpressionData => GetProperty(ExpressionDataProperty);
215215
}
216216
""";
217-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(
217+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(
218218
code,
219219
[
220220
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,
@@ -253,7 +253,7 @@ public string Data
253253
public string ExpressionData => GetProperty(ExpressionDataProperty);
254254
}
255255
""";
256-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(
256+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(
257257
code,
258258
[
259259
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,
@@ -292,7 +292,7 @@ public string ArrowData
292292
public string ExpressionData => ReadProperty(ExpressionDataProperty);
293293
}
294294
""";
295-
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalayzer>(
295+
await TestHelpers.RunAnalysisAsync<EvaluateManagedBackingFieldsAnalyzer>(
296296
code,
297297
[
298298
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,

Source/Csla.Analyzers/Csla.Analyzers.Tests/EvaluateManagedBackingFieldsCodeFixTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public string Data
4242
""";
4343
var document = TestHelpers.Create(code);
4444
var tree = await document.GetSyntaxTreeAsync();
45-
var diagnostics = await TestHelpers.GetDiagnosticsAsync(code, new EvaluateManagedBackingFieldsAnalayzer());
45+
var diagnostics = await TestHelpers.GetDiagnosticsAsync(code, new EvaluateManagedBackingFieldsAnalyzer());
4646

4747
var actions = new List<CodeAction>();
4848
var codeActionRegistration = new Action<CodeAction, ImmutableArray<Diagnostic>>(
@@ -86,7 +86,7 @@ public class A : BusinessBase<A>
8686
""";
8787
var document = TestHelpers.Create(code);
8888
var tree = await document.GetSyntaxTreeAsync();
89-
var diagnostics = await TestHelpers.GetDiagnosticsAsync(code, new EvaluateManagedBackingFieldsAnalayzer());
89+
var diagnostics = await TestHelpers.GetDiagnosticsAsync(code, new EvaluateManagedBackingFieldsAnalyzer());
9090

9191
var actions = new List<CodeAction>();
9292
var codeActionRegistration = new Action<CodeAction, ImmutableArray<Diagnostic>>(

Source/Csla.Analyzers/Csla.Analyzers/AnalyzerReleases.Unshipped.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ CSLA0004 | Usage | Warning | CheckConstructorsAnalyzer
1010
CSLA0005 | Usage | Error | FindSaveAssignmentIssueAnalyzer
1111
CSLA0006 | Usage | Error | FindSaveAssignmentIssueAnalyzer
1212
CSLA0007 | Usage | Warning | EvaluatePropertiesForSimplicityAnalyzer
13-
CSLA0008 | Usage | Error | EvaluateManagedBackingFieldsAnalayzer
13+
CSLA0008 | Usage | Error | EvaluateManagedBackingFieldsAnalyzer
1414
CSLA0009 | Design | Warning | IsOperationMethodPublicAnalyzer
1515
CSLA0010 | Design | Warning | FindOperationsWithNonSerializableArgumentsAnalyzer
1616
CSLA0011 | Usage | Error | FindBusinessObjectCreationAnalyzer

Source/Csla.Analyzers/Csla.Analyzers/DoesOperationHaveAttributeAddAttributeCodeFix.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private static void AddCodeFix(CodeFixContext context, SyntaxNode root,
7878

7979
if (!root.HasUsing(DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.CslaNamespace))
8080
{
81-
newRoot = (newRoot as CompilationUnitSyntax).AddUsings(
81+
newRoot = ((CompilationUnitSyntax)newRoot).AddUsings(
8282
SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(
8383
DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.CslaNamespace)));
8484
description = DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription;

Source/Csla.Analyzers/Csla.Analyzers/EvaluateManagedBackingFieldsAnalayzer.cs Source/Csla.Analyzers/Csla.Analyzers/EvaluateManagedBackingFieldsAnalyzer.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ namespace Csla.Analyzers
1111
///
1212
/// </summary>
1313
[DiagnosticAnalyzer(LanguageNames.CSharp)]
14-
public sealed class EvaluateManagedBackingFieldsAnalayzer
14+
public sealed class EvaluateManagedBackingFieldsAnalyzer
1515
: DiagnosticAnalyzer
1616
{
1717
private static readonly DiagnosticDescriptor mustBePublicStaticAndReadonlyRule =
1818
new(
1919
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields,
20-
EvaluateManagedBackingFieldsAnalayzerConstants.Title,
21-
EvaluateManagedBackingFieldsAnalayzerConstants.Message,
20+
EvaluateManagedBackingFieldsAnalyzerConstants.Title,
21+
EvaluateManagedBackingFieldsAnalyzerConstants.Message,
2222
Constants.Categories.Usage, DiagnosticSeverity.Error, true,
2323
helpLinkUri: HelpUrlBuilder.Build(
24-
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields, nameof(EvaluateManagedBackingFieldsAnalayzer)));
24+
Constants.AnalyzerIdentifiers.EvaluateManagedBackingFields, nameof(EvaluateManagedBackingFieldsAnalyzer)));
2525

2626
/// <summary>
2727
///
@@ -125,15 +125,15 @@ private static bool DetermineIfPropertyUsesField(SyntaxNodeAnalysisContext conte
125125
return DetermineIfPropertyUsesField(
126126
context, fieldSymbol, classProperty,
127127
propertyNode => propertyNode.ExpressionBody as SyntaxNode ??
128-
propertyNode.AccessorList?.Accessors.Single(
128+
propertyNode.AccessorList.Accessors.Single(
129129
_ => _.IsKind(SyntaxKind.GetAccessorDeclaration)));
130130
}
131131

132132
if (classProperty.SetMethod != null)
133133
{
134134
return DetermineIfPropertyUsesField(
135135
context, fieldSymbol, classProperty,
136-
propertyNode => propertyNode.AccessorList?.Accessors.Single(
136+
propertyNode => propertyNode.AccessorList.Accessors.Single(
137137
_ => _.IsKind(SyntaxKind.SetAccessorDeclaration)));
138138
}
139139

Source/Csla.Analyzers/Csla.Analyzers/EvaluateManagedBackingFieldsAnalayzerConstants.cs Source/Csla.Analyzers/Csla.Analyzers/EvaluateManagedBackingFieldsAnalyzerConstants.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Csla.Analyzers
66
/// <summary>
77
///
88
/// </summary>
9-
public static class EvaluateManagedBackingFieldsAnalayzerConstants
9+
public static class EvaluateManagedBackingFieldsAnalyzerConstants
1010
{
1111
/// <summary>
1212
///

Source/Csla.AspNetCore/Blazor/ApplicationContextManagerBlazor.cs

+1-4
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,7 @@ public IPrincipal GetUser()
130130
return CurrentPrincipal;
131131
}
132132

133-
/// <summary>
134-
/// Not supported in Blazor.
135-
/// </summary>
136-
/// <param name="principal">Principal object.</param>
133+
/// <inheritdoc />
137134
public virtual void SetUser(IPrincipal principal)
138135
{
139136
ArgumentNullException.ThrowIfNull(principal);

Source/Csla.AspNetCore/Blazor/ApplicationContextManagerInMemory.cs

+8-6
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,11 @@ public IPrincipal GetUser()
129129
return CurrentPrincipal;
130130
}
131131

132-
/// <summary>
133-
/// Attempts to set the current principal on the registered
134-
/// IHostEnvironmentAuthenticationStateProvider service.
135-
/// </summary>
136-
/// <param name="principal">Principal object.</param>
132+
/// <inheritdoc />
137133
public virtual void SetUser(IPrincipal principal)
138134
{
135+
ArgumentNullException.ThrowIfNull(principal);
136+
139137
if (!ReferenceEquals(CurrentPrincipal, principal))
140138
{
141139
if (ActiveCircuitState.CircuitExists)
@@ -151,7 +149,11 @@ public virtual void SetUser(IPrincipal principal)
151149
}
152150
else if (HttpContext is not null)
153151
{
154-
HttpContext.User = (ClaimsPrincipal)principal;
152+
if (principal is not ClaimsPrincipal claimsPrincipal)
153+
{
154+
throw new ArgumentException("typeof(principal) != ClaimsPrincipal");
155+
}
156+
HttpContext.User = claimsPrincipal;
155157
}
156158
else
157159
{

Source/Csla.AspNetCore/Blazor/State/SessionIdManager.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public string GetSessionId()
5555
httpContext.Response.Cookies.Append(sessionIdName, result);
5656
}
5757

58-
return result ?? throw new InvalidOperationException(Csla.Properties.Resources.SessionIdManagerIdMustBeNotNull);
58+
return result ?? throw new InvalidOperationException(Properties.Resources.SessionIdManagerIdMustBeNotNull);
5959
}
6060
}
6161
}

Source/Csla.AspNetCore/Blazor/State/SessionManager.cs

+1-4
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,8 @@ public class SessionManager(ISessionIdManager sessionIdManager) : ISessionManage
2626
/// </summary>
2727
public Session GetSession()
2828
{
29-
Session result;
3029
var key = _sessionIdManager.GetSessionId();
31-
if (!_sessions.ContainsKey(key))
32-
_sessions.TryAdd(key, []);
33-
result = _sessions[key];
30+
var result = _sessions.GetOrAdd(key, []);
3431
result.Touch();
3532
return result;
3633
}

Source/Csla.AspNetCore/Blazor/State/StateController.cs

+8-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
using Csla.Security;
1212
using Csla.Blazor.State.Messages;
1313
using Csla.Serialization;
14+
using System.Runtime.Serialization;
15+
using Csla.Properties;
1416

1517
namespace Csla.AspNetCore.Blazor.State
1618
{
@@ -45,8 +47,7 @@ public virtual StateResult Get(long lastTouched)
4547
}
4648
else
4749
{
48-
var message = (SessionMessage)applicationContext.CreateInstanceDI(typeof(SessionMessage));
49-
message.Session = session;
50+
var message = applicationContext.CreateInstanceDI<SessionMessage>(session);
5051
if (FlowUserIdentityToWebAssembly)
5152
{
5253
message.Principal = applicationContext.Principal;
@@ -73,7 +74,11 @@ public virtual void Put(byte[] updatedSessionData)
7374
{
7475
Position = 0
7576
};
76-
var session = (Session)formatter.Deserialize(buffer);
77+
if (formatter.Deserialize(buffer) is not Session session)
78+
{
79+
throw new SerializationException(string.Format(Resources.DeserializationFailedDueToWrongData, nameof(Session)));
80+
}
81+
7782
sessionManager.UpdateSession(session);
7883
}
7984
}

Source/Csla.AspNetCore/ConfigurationExtensions.cs

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using Microsoft.Extensions.DependencyInjection;
1414
using Csla.Core;
1515
using Csla.AspNetCore;
16+
using Csla.Web.Mvc;
1617

1718
namespace Csla.Configuration
1819
{
@@ -45,6 +46,9 @@ public static CslaOptions AddAspNetCore(this CslaOptions config, Action<AspNetCo
4546
#if NET8_0_OR_GREATER
4647
config.Services.AddScoped<ActiveCircuitState>();
4748
config.Services.AddScoped(typeof(CircuitHandler), typeof(ActiveCircuitHandler));
49+
#endif
50+
#if NETSTANDARD2_0 || NET8_0_OR_GREATER
51+
config.Services.AddMvcCore(opt => opt.ModelBinderProviders.Insert(0, new CslaModelBinderProvider()));
4852
#endif
4953
config.Services.AddScoped(typeof(IContextManager), typeof(ApplicationContextManagerHttpContext));
5054
return config;

Source/Csla.AspNetCore/Mvc/TagHelpers/CslaErrorsTagHelper.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// </copyright>
66
// <summary>Razor tag helper</summary>
77
//-----------------------------------------------------------------------
8+
using Csla.Properties;
89
using Csla.Rules;
910
using Microsoft.AspNetCore.Mvc.ViewFeatures;
1011
using Microsoft.AspNetCore.Razor.TagHelpers;
@@ -39,7 +40,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
3940
var propertyName = parts[parts.Length - 1];
4041
object source = model;
4142
for (int i = 0; i < parts.Length - 1; i++)
42-
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]);
43+
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]) ?? throw new InvalidOperationException(string.Format(Resources.TagHelperPropertyInPathHasNullValue, parts[i], CslaErrorsFor.Name));
4344
var result = string.Empty;
4445
if (source is Core.BusinessBase obj)
4546
result = obj.BrokenRulesCollection.ToString(",", RuleSeverity.Error, propertyName);

Source/Csla.AspNetCore/Mvc/TagHelpers/CslaInformationTagHelper.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// </copyright>
66
// <summary>Razor tag helper</summary>
77
//-----------------------------------------------------------------------
8+
using Csla.Properties;
89
using Csla.Rules;
910
using Microsoft.AspNetCore.Mvc.ViewFeatures;
1011
using Microsoft.AspNetCore.Razor.TagHelpers;
@@ -39,7 +40,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
3940
var propertyName = parts[parts.Length - 1];
4041
object source = model;
4142
for (int i = 0; i < parts.Length - 1; i++)
42-
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]);
43+
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]) ?? throw new InvalidOperationException(string.Format(Resources.TagHelperPropertyInPathHasNullValue, parts[i], CslaInformationFor.Name));
4344
var result = string.Empty;
4445
if (source is Core.BusinessBase obj)
4546
result = obj.BrokenRulesCollection.ToString(",", RuleSeverity.Information, propertyName);

Source/Csla.AspNetCore/Mvc/TagHelpers/CslaWarningsTagHelper.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// </copyright>
66
// <summary>Razor tag helper</summary>
77
//-----------------------------------------------------------------------
8+
using Csla.Properties;
89
using Csla.Rules;
910
using Microsoft.AspNetCore.Mvc.ViewFeatures;
1011
using Microsoft.AspNetCore.Razor.TagHelpers;
@@ -39,7 +40,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
3940
var propertyName = parts[parts.Length - 1];
4041
object source = model;
4142
for (int i = 0; i < parts.Length - 1; i++)
42-
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]);
43+
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]) ?? throw new InvalidOperationException(string.Format(Resources.TagHelperPropertyInPathHasNullValue, parts[i], CslaWarningsFor.Name));
4344
var result = string.Empty;
4445
if (source is Core.BusinessBase obj)
4546
result = obj.BrokenRulesCollection.ToString(",", RuleSeverity.Warning, propertyName);

Source/Csla.Blazor.Test/ViewModelSaveAsyncErrorTests.cs

-4
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,6 @@ public async Task SavingWithCancelledCancellationToken_ErrorEventIsInvoked()
123123

124124
private class FakeBusy : Core.ITrackStatus
125125
{
126-
public FakeBusy()
127-
{
128-
}
129-
130126
public bool IsValid { get; set; }
131127

132128
public bool IsSelfValid { get; set; }

Source/Csla.Blazor.WebAssembly.Tests/SessionManagerTests.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ public void Initialize()
3232
var provider = services.BuildServiceProvider();
3333
var _applicationContext = provider.GetRequiredService<ApplicationContext>();
3434

35-
_sessionValue = new SessionMessage
35+
_sessionValue = new SessionMessage([])
3636
{
37-
Principal = new ClaimsPrincipal() { },
38-
Session = []
37+
Principal = new ClaimsPrincipal()
3938
};
4039

4140
_sessionManager = new SessionManager(_applicationContext, GetHttpClient(_sessionValue, _applicationContext), new BlazorWebAssemblyConfigurationOptions { SyncContextWithServer = true });

0 commit comments

Comments
 (0)