From 2f84a129fbdf94d9e6ffb19596e3742f9c58f3a6 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Wed, 13 Mar 2024 22:21:31 +0300 Subject: [PATCH] Make CultureDictionaryRecordKey record struct (#15413) --- .../CultureDictionaryRecord.cs | 5 +- .../CultureDictionaryRecordKey.cs | 52 ++----------------- .../Localization/CultureDictionaryTests.cs | 4 +- .../Localization/LocalizationManagerTests.cs | 2 +- 4 files changed, 11 insertions(+), 52 deletions(-) diff --git a/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecord.cs b/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecord.cs index 61be036dda5..990c272d8f1 100644 --- a/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecord.cs +++ b/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecord.cs @@ -53,7 +53,10 @@ public static CultureDictionaryRecordKey GetKey(string messageId, string context throw new ArgumentException("MessageId can't be empty.", nameof(messageId)); } - return new CultureDictionaryRecordKey(messageId, context); + return new CultureDictionaryRecordKey + { + MessageId = messageId, Context = context + }; } } } diff --git a/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecordKey.cs b/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecordKey.cs index a73013932eb..557ba56b11f 100644 --- a/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecordKey.cs +++ b/src/OrchardCore/OrchardCore.Localization.Abstractions/CultureDictionaryRecordKey.cs @@ -1,70 +1,26 @@ -using System; - namespace OrchardCore.Localization { /// /// Represents a key for . /// - public readonly struct CultureDictionaryRecordKey : IEquatable + public readonly record struct CultureDictionaryRecordKey { - /// - /// Creates new instance of . - /// - /// The message Id. - public CultureDictionaryRecordKey(string messageId) : this(messageId, null) - { - - } - - /// - /// Creates new instance of . - /// - /// The message Id. - /// The message context. - public CultureDictionaryRecordKey(string messageId, string context) - { - MessageId = messageId; - Context = context; - } - /// /// Gets the message Id. /// - public string MessageId { get; } + public required string MessageId { get; init; } /// /// Gets the message context. /// - public string Context { get; } + public string Context { get; init; } public static implicit operator string(CultureDictionaryRecordKey cultureDictionaryRecordKey) => cultureDictionaryRecordKey.ToString(); - /// - public override bool Equals(object obj) - { - if (obj is CultureDictionaryRecordKey other) - { - return Equals(other); - } - - return false; - } - - /// - public bool Equals(CultureDictionaryRecordKey other) - => string.Equals(MessageId, other.MessageId) && String.Equals(Context, other.Context); - - /// - public override int GetHashCode() => HashCode.Combine(MessageId, Context); - public override string ToString() => string.IsNullOrEmpty(Context) ? MessageId - : Context.ToLowerInvariant() + "|" + MessageId; - - public static bool operator ==(CultureDictionaryRecordKey left, CultureDictionaryRecordKey right) => left.Equals(right); - - public static bool operator !=(CultureDictionaryRecordKey left, CultureDictionaryRecordKey right) => !(left == right); + : $"{Context.ToLowerInvariant()}|{MessageId}"; } } diff --git a/test/OrchardCore.Tests/Localization/CultureDictionaryTests.cs b/test/OrchardCore.Tests/Localization/CultureDictionaryTests.cs index 245cb020eef..939c638a0b7 100644 --- a/test/OrchardCore.Tests/Localization/CultureDictionaryTests.cs +++ b/test/OrchardCore.Tests/Localization/CultureDictionaryTests.cs @@ -32,7 +32,7 @@ public void MergeOverwritesTranslationsForSameKeys() public void IndexerReturnNullIfKeyDoesntExist() { var dictionary = new CultureDictionary("cs", PluralizationRule.Czech); - var key = new CultureDictionaryRecordKey("ball"); + var key = new CultureDictionaryRecordKey { MessageId = "ball" }; var translation = dictionary[key]; Assert.Null(translation); @@ -48,7 +48,7 @@ public void IndexerThrowsPluralFormNotFoundExceptionIfSpecifiedPluralFormDoesntE Assert.Throws(() => { - var key = new CultureDictionaryRecordKey("ball"); + var key = new CultureDictionaryRecordKey { MessageId = "ball" }; return dictionary[key, 5]; }); diff --git a/test/OrchardCore.Tests/Localization/LocalizationManagerTests.cs b/test/OrchardCore.Tests/Localization/LocalizationManagerTests.cs index 3685c75f84c..d95ebab0e5c 100644 --- a/test/OrchardCore.Tests/Localization/LocalizationManagerTests.cs +++ b/test/OrchardCore.Tests/Localization/LocalizationManagerTests.cs @@ -46,7 +46,7 @@ public void GetDictionaryReturnsDictionaryWithTranslationsFromProvider() var manager = new LocalizationManager(new[] { _pluralRuleProvider.Object }, new[] { _translationProvider.Object }, _memoryCache); var dictionary = manager.GetDictionary(new CultureInfo("cs")); - var key = new CultureDictionaryRecordKey("ball"); + var key = new CultureDictionaryRecordKey { MessageId = "ball" }; dictionary.Translations.TryGetValue(key, out var translations);