From 0e801e56d0d0b76aa5ab85214c59a97fa0fe8c16 Mon Sep 17 00:00:00 2001 From: Cj <161484149+CJ-SPT@users.noreply.github.com> Date: Thu, 13 Jun 2024 17:05:34 -0400 Subject: [PATCH] Fix speed issue --- AssemblyRemapper/Enums/EMatchResult.cs | 1 + AssemblyRemapper/Remapper/Remapper.cs | 134 ++++++++----------------- 2 files changed, 45 insertions(+), 90 deletions(-) diff --git a/AssemblyRemapper/Enums/EMatchResult.cs b/AssemblyRemapper/Enums/EMatchResult.cs index 3f9bc07..f5b15ae 100644 --- a/AssemblyRemapper/Enums/EMatchResult.cs +++ b/AssemblyRemapper/Enums/EMatchResult.cs @@ -5,4 +5,5 @@ internal enum EMatchResult Disabled = 0, NoMatch = 1, Match = 2, + HandleDirect = 3, } \ No newline at end of file diff --git a/AssemblyRemapper/Remapper/Remapper.cs b/AssemblyRemapper/Remapper/Remapper.cs index e93174a..ec167f1 100644 --- a/AssemblyRemapper/Remapper/Remapper.cs +++ b/AssemblyRemapper/Remapper/Remapper.cs @@ -3,11 +3,14 @@ using AssemblyRemapper.Models; using AssemblyRemapper.Remapper.Search; using AssemblyRemapper.Utils; using Mono.Cecil; +using System.Diagnostics; namespace AssemblyRemapper.Remapper; internal class Remapper { + private static Stopwatch Stopwatch = new(); + /// /// Start the remapping process /// @@ -15,6 +18,8 @@ internal class Remapper { DisplayBasicModuleInformation(); + Stopwatch.Start(); + foreach (var remap in DataProvider.Remaps) { Logger.Log($"Finding best match for {remap.NewTypeName}...", ConsoleColor.Gray); @@ -57,7 +62,7 @@ internal class Remapper { var result = ScoreType(type, mapping); - if (result is not EFailureReason.None) + if (result is not EMatchResult.NoMatch) { //Logger.LogDebug($"Remap [{type.Name} : {mapping.NewTypeName}] failed with reason {result}", silent: true); } @@ -71,13 +76,13 @@ internal class Remapper /// Remap to check against /// /// Failure reason or none if matched - private EFailureReason ScoreType(TypeDefinition type, RemapModel remap) + private EMatchResult ScoreType(TypeDefinition type, RemapModel remap) { // Handle Direct Remaps by strict naming first bypasses everything else if (remap.UseForceRename) { HandleByDirectName(type, remap); - return EFailureReason.None; + return EMatchResult.HandleDirect; } foreach (var nestedType in type.NestedTypes) @@ -92,99 +97,45 @@ internal class Remapper Definition = type, }; - // Set the original type name to be used later - score.ReMap.OriginalTypeName = type.Name; - - if (type.MatchIsAbstract(remap.SearchParams, score) == EMatchResult.NoMatch) + var matches = new HashSet { - remap.FailureReason = EFailureReason.IsAbstract; - return EFailureReason.IsAbstract; + type.MatchIsAbstract(remap.SearchParams, score), + type.MatchIsEnum(remap.SearchParams, score) , + type.MatchIsNested(remap.SearchParams, score), + type.MatchIsSealed(remap.SearchParams, score) , + type.MatchIsDerived(remap.SearchParams, score) , + type.MatchIsInterface(remap.SearchParams, score), + type.MatchHasGenericParameters(remap.SearchParams, score), + type.MatchIsPublic(remap.SearchParams, score) , + type.MatchHasAttribute(remap.SearchParams, score), + type.MatchConstructors(remap.SearchParams, score), + type.MatchMethods(remap.SearchParams, score), + type.MatchFields(remap.SearchParams, score), + type.MatchProperties(remap.SearchParams, score), + type.MatchNestedTypes(remap.SearchParams, score) + }; + + var NoMatch = matches.Where(x => x.Equals(EMatchResult.NoMatch)).FirstOrDefault(); + + if (NoMatch == EMatchResult.NoMatch) + { + return NoMatch; } - if (type.MatchIsEnum(remap.SearchParams, score) == EMatchResult.NoMatch) + var match = matches.Where(x => x.Equals(EMatchResult.Match)).Any(); + + if (match) { - remap.FailureReason = EFailureReason.IsEnum; - return EFailureReason.IsEnum; + // Set the original type name to be used later + score.ReMap.OriginalTypeName = type.Name; + remap.OriginalTypeName = type.Name; + remap.Succeeded = true; + remap.FailureReason = EFailureReason.None; + score.AddScoreToResult(); + return EMatchResult.Match; } - if (type.MatchIsNested(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.IsNested; - return EFailureReason.IsNested; - } - - if (type.MatchIsSealed(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.IsSealed; - return EFailureReason.IsSealed; - } - - if (type.MatchIsDerived(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.IsDerived; - return EFailureReason.IsDerived; - } - - if (type.MatchIsInterface(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.IsInterface; - return EFailureReason.IsInterface; - } - - if (type.MatchHasGenericParameters(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.HasGenericParameters; - return EFailureReason.HasGenericParameters; - } - - if (type.MatchIsPublic(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.IsPublic; - return EFailureReason.IsPublic; - } - - if (type.MatchHasAttribute(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.HasAttribute; - return EFailureReason.HasAttribute; - } - - if (type.MatchConstructors(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.Constructor; - return EFailureReason.Constructor; - } - - if (type.MatchMethods(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.HasMethods; - return EFailureReason.HasMethods; - } - - if (type.MatchFields(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.HasFields; - return EFailureReason.HasFields; - } - - if (type.MatchProperties(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.HasProperties; - return EFailureReason.HasProperties; - } - - if (type.MatchNestedTypes(remap.SearchParams, score) == EMatchResult.NoMatch) - { - remap.FailureReason = EFailureReason.HasNestedTypes; - return EFailureReason.HasNestedTypes; - } - - remap.OriginalTypeName = type.Name; - remap.Succeeded = true; - remap.FailureReason = EFailureReason.None; - score.AddScoreToResult(); - - return EFailureReason.None; + return EMatchResult.Disabled; } private void HandleByDirectName(TypeDefinition type, RemapModel remap) @@ -293,6 +244,9 @@ internal class Remapper Logger.Log("-----------------------------------------------", ConsoleColor.Green); Logger.Log($"Complete: Assembly written to `{remappedPath}`", ConsoleColor.Green); Logger.Log("Original type names updated on mapping file.", ConsoleColor.Green); + Logger.Log($"Remap took {Stopwatch.Elapsed.TotalSeconds:F0} seconds", ConsoleColor.Green); Logger.Log("-----------------------------------------------", ConsoleColor.Green); + + Stopwatch.Stop(); } } \ No newline at end of file