From 3e8490a18cd011b81cf09b8ab59afe826541e2df Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Wed, 29 May 2024 17:49:01 +0300 Subject: [PATCH] More null safety checks just in case, fixed test utils --- .../ModuleInfoExtended.cs | 4 +-- .../ModuleInfoExtendedExtensions.cs | 26 +++++++++---------- .../ModuleUtilities.cs | 9 ++++--- .../Utils2.cs | 4 +-- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/Bannerlord.ModuleManager.Models/ModuleInfoExtended.cs b/src/Bannerlord.ModuleManager.Models/ModuleInfoExtended.cs index 6a1a941..6eaacf0 100644 --- a/src/Bannerlord.ModuleManager.Models/ModuleInfoExtended.cs +++ b/src/Bannerlord.ModuleManager.Models/ModuleInfoExtended.cs @@ -236,7 +236,7 @@ record ModuleInfoExtended var isNative = moduleId.Equals(NativeModuleId); // Override any existing metadata - if (dependentModuleMetadatas.Find(dmm => dmm.Id.Equals(moduleId, StringComparison.Ordinal)) is { } module) + if (dependentModuleMetadatas.Find(dmm => moduleId.Equals(dmm.Id, StringComparison.Ordinal)) is { } module) { dependentModuleMetadatas.Remove(module); } @@ -291,7 +291,7 @@ public ModuleInfoExtended(string id, string name, bool isOfficial, ApplicationVe Url = url; } - public bool IsNative() => Id.Equals(NativeModuleId, StringComparison.OrdinalIgnoreCase); + public bool IsNative() => NativeModuleId.Equals(Id, StringComparison.OrdinalIgnoreCase); public override string ToString() => $"{Id} - {Version}"; diff --git a/src/Bannerlord.ModuleManager/ModuleInfoExtendedExtensions.cs b/src/Bannerlord.ModuleManager/ModuleInfoExtendedExtensions.cs index 40d9586..afc1869 100644 --- a/src/Bannerlord.ModuleManager/ModuleInfoExtendedExtensions.cs +++ b/src/Bannerlord.ModuleManager/ModuleInfoExtendedExtensions.cs @@ -57,11 +57,11 @@ static class ModuleInfoExtendedExtensions public static IEnumerable DependenciesAllDistinct(this ModuleInfoExtended module) => DependenciesAll(module).DistinctBy(x => x.Id); public static IEnumerable DependenciesAll(this ModuleInfoExtended module) { - foreach (var metadata in module.DependentModuleMetadatas) + foreach (var metadata in module.DependentModuleMetadatas.Where(x => x is not null)) { yield return metadata; } - foreach (var metadata in module.DependentModules) + foreach (var metadata in module.DependentModules.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -71,7 +71,7 @@ public static IEnumerable DependenciesAll(this ModuleIn Version = metadata.Version }; } - foreach (var metadata in module.ModulesToLoadAfterThis) + foreach (var metadata in module.ModulesToLoadAfterThis.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -81,7 +81,7 @@ public static IEnumerable DependenciesAll(this ModuleIn Version = metadata.Version }; } - foreach (var metadata in module.IncompatibleModules) + foreach (var metadata in module.IncompatibleModules.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -96,11 +96,11 @@ public static IEnumerable DependenciesAll(this ModuleIn public static IEnumerable DependenciesToLoadDistinct(this ModuleInfoExtended module) => DependenciesToLoad(module).DistinctBy(x => x.Id); public static IEnumerable DependenciesToLoad(this ModuleInfoExtended module) { - foreach (var metadata in module.DependentModuleMetadatas.Where(x => !x.IsIncompatible)) + foreach (var metadata in module.DependentModuleMetadatas.Where(x => x is not null).Where(x => !x.IsIncompatible)) { yield return metadata; } - foreach (var metadata in module.DependentModules) + foreach (var metadata in module.DependentModules.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -110,7 +110,7 @@ public static IEnumerable DependenciesToLoad(this Modul Version = metadata.Version }; } - foreach (var metadata in module.ModulesToLoadAfterThis) + foreach (var metadata in module.ModulesToLoadAfterThis.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -125,11 +125,11 @@ public static IEnumerable DependenciesToLoad(this Modul public static IEnumerable DependenciesLoadBeforeThisDistinct(this ModuleInfoExtended module) => DependenciesLoadBeforeThis(module).DistinctBy(x => x.Id); public static IEnumerable DependenciesLoadBeforeThis(this ModuleInfoExtended module) { - foreach (var metadata in module.DependentModuleMetadatas.Where(x => x.LoadType == LoadType.LoadBeforeThis)) + foreach (var metadata in module.DependentModuleMetadatas.Where(x => x is not null).Where(x => x.LoadType == LoadType.LoadBeforeThis)) { yield return metadata; } - foreach (var metadata in module.DependentModules) + foreach (var metadata in module.DependentModules.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -144,11 +144,11 @@ public static IEnumerable DependenciesLoadBeforeThis(th public static IEnumerable DependenciesLoadAfterThisDistinct(this ModuleInfoExtended module) => DependenciesLoadAfterThis(module).DistinctBy(x => x.Id); public static IEnumerable DependenciesLoadAfterThis(this ModuleInfoExtended module) { - foreach (var metadata in module.DependentModuleMetadatas.Where(x => x.LoadType == LoadType.LoadAfterThis)) + foreach (var metadata in module.DependentModuleMetadatas.Where(x => x is not null).Where(x => x.LoadType == LoadType.LoadAfterThis)) { yield return metadata; } - foreach (var metadata in module.ModulesToLoadAfterThis) + foreach (var metadata in module.ModulesToLoadAfterThis.Where(x => x is not null)) { yield return new DependentModuleMetadata { @@ -163,11 +163,11 @@ public static IEnumerable DependenciesLoadAfterThis(thi public static IEnumerable DependenciesIncompatiblesDistinct(this ModuleInfoExtended module) => DependenciesIncompatibles(module).DistinctBy(x => x.Id); public static IEnumerable DependenciesIncompatibles(this ModuleInfoExtended module) { - foreach (var metadata in module.DependentModuleMetadatas.Where(x => x.IsIncompatible)) + foreach (var metadata in module.DependentModuleMetadatas.Where(x => x is not null).Where(x => x.IsIncompatible)) { yield return metadata; } - foreach (var metadata in module.IncompatibleModules) + foreach (var metadata in module.IncompatibleModules.Where(x => x is not null)) { yield return new DependentModuleMetadata { diff --git a/src/Bannerlord.ModuleManager/ModuleUtilities.cs b/src/Bannerlord.ModuleManager/ModuleUtilities.cs index 5de9c83..5821ac2 100644 --- a/src/Bannerlord.ModuleManager/ModuleUtilities.cs +++ b/src/Bannerlord.ModuleManager/ModuleUtilities.cs @@ -203,7 +203,7 @@ public static IEnumerable ValidateModuleCommonData(ModuleInfoExtend Reason = $"Module Name is missing in '{module.Id}'" }; } - foreach (var dependentModule in module.DependentModules) + foreach (var dependentModule in module.DependentModules.Where(x => x is not null)) { if (dependentModule is null) { @@ -221,7 +221,7 @@ public static IEnumerable ValidateModuleCommonData(ModuleInfoExtend }; } } - foreach (var dependentModuleMetadata in module.DependentModuleMetadatas) + foreach (var dependentModuleMetadata in module.DependentModuleMetadatas.Where(x => x is not null)) { if (dependentModuleMetadata is null) { @@ -249,6 +249,7 @@ public static IEnumerable ValidateModuleCommonData(ModuleInfoExtend public static IEnumerable ValidateModuleDependenciesDeclarations(IReadOnlyList modules, ModuleInfoExtended targetModule) { // Any Incompatible module is depended on + // TODO: Will a null Id break things? foreach (var moduleId in targetModule.DependenciesToLoadDistinct().Select(x => x.Id).Intersect(targetModule.DependenciesIncompatiblesDistinct().Select(x => x.Id))) { yield return new ModuleIssue(targetModule, moduleId, ModuleIssueType.DependencyConflictDependentAndIncompatible) @@ -257,7 +258,7 @@ public static IEnumerable ValidateModuleDependenciesDeclarations(IR }; } // Check raw metadata too - foreach (var dependency in targetModule.DependentModuleMetadatas.Where(x => x.IsIncompatible && x.LoadType != LoadType.None)) + foreach (var dependency in targetModule.DependentModuleMetadatas.Where(x => x is not null).Where(x => x.IsIncompatible && x.LoadType != LoadType.None)) { yield return new ModuleIssue(targetModule, dependency.Id, ModuleIssueType.DependencyConflictDependentAndIncompatible) { @@ -505,7 +506,7 @@ public static IEnumerable ValidateLoadOrder(IReadOnlyList x.Id)) { - var metadataIdx = CollectionsExtensions.IndexOf(modules, x => x.Id == metadata.Id); + var metadataIdx = CollectionsExtensions.IndexOf(modules, x => string.Equals(x.Id, metadata.Id, StringComparison.Ordinal)); if (metadataIdx == -1) { if (!metadata.IsOptional) diff --git a/test/Bannerlord.ModuleManager.Native.Tests/Utils2.cs b/test/Bannerlord.ModuleManager.Native.Tests/Utils2.cs index 28f9f7f..600f388 100644 --- a/test/Bannerlord.ModuleManager.Native.Tests/Utils2.cs +++ b/test/Bannerlord.ModuleManager.Native.Tests/Utils2.cs @@ -39,7 +39,7 @@ internal static partial class Utils2 public static int LibraryAliveCount() => common_alloc_alive_count(); public static unsafe ReadOnlySpan ToSpan(param_string* value) => new SafeStringMallocHandle((char*) value, false).ToSpan(); - public static SafeStringMallocHandle ToJson(T value) => Utils.SerializeJsonCopy(value, (JsonTypeInfo) CustomSourceGenerationContext.GetTypeInfo(typeof(T)), true); + public static SafeStringMallocHandle ToJson(T value) where T : class => Utils.SerializeJsonCopy(value, (JsonTypeInfo) CustomSourceGenerationContext.GetTypeInfo(typeof(T)), true); private static TValue DeserializeJson(SafeStringMallocHandle json, JsonTypeInfo jsonTypeInfo, [CallerMemberName] string? caller = null) { if (json.DangerousGetHandle() == IntPtr.Zero) @@ -66,7 +66,7 @@ private static TValue DeserializeJson([StringSyntax(StringSyntaxAttribut } } - public static unsafe T? GetResult(return_value_json* ret) + public static unsafe T? GetResult(return_value_json* ret) where T : class { using var result = SafeStructMallocHandle.Create(ret, true); return result.ValueAsJson((JsonTypeInfo) CustomSourceGenerationContext.GetTypeInfo(typeof(T)));