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