Properties, constructors, misc

This commit is contained in:
Cj 2024-06-13 08:18:16 -04:00
parent a7a4ee33ce
commit 0453f3d4d6
9 changed files with 88 additions and 71 deletions

View File

@ -7,7 +7,7 @@ internal class AppSettings
{
public bool Debug { get; set; }
public bool SilentMode { get; set; }
public int MaxMatchCount { get; set; }
public bool ScoringMode { get; set; }
public bool Publicize { get; set; }
public bool Unseal { get; set; }

View File

@ -245,7 +245,11 @@ internal class Remapper
{
if (scores.Count == 0) { return; }
var highestScore = scores.OrderByDescending(score => score.Score).FirstOrDefault();
var filteredScores = scores
.OrderByDescending(score => score.Score)
.Take(DataProvider.AppSettings.MaxMatchCount);
var highestScore = filteredScores.FirstOrDefault();
if (highestScore is null) { return; }
@ -256,9 +260,9 @@ internal class Remapper
if (scores.Count > 1)
{
Logger.Log($"Warning! There were {scores.Count - 1} possible matches. Considering adding more search parameters", ConsoleColor.Yellow);
Logger.Log($"Warning! There were {filteredScores.Count()} possible matches. Considering adding more search parameters", ConsoleColor.Yellow);
foreach (var score in scores.OrderByDescending(score => score.Score).Skip(1))
foreach (var score in filteredScores.Skip(1))
{
Logger.Log($"{score.Definition.Name} - Score [{score.Score}]", ConsoleColor.Yellow);
}

View File

@ -15,22 +15,14 @@ internal static class Constructors
/// <returns>Match if constructor parameters matches</returns>
public static EMatchResult GetTypeByParameterCount(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.ConstructorParameterCount is null)
{
return EMatchResult.Disabled;
}
if (parms.ConstructorParameterCount is null) return EMatchResult.Disabled;
var constructors = type.GetConstructors();
var match = type.GetConstructors()
.Where(c => c.Parameters.Count == parms.ConstructorParameterCount)
.Any();
foreach (var constructor in constructors)
{
if (constructor.Parameters.Count == parms.ConstructorParameterCount)
{
score.Score++;
return EMatchResult.Match;
}
}
return EMatchResult.NoMatch;
return match
? EMatchResult.Match
: EMatchResult.NoMatch;
}
}

View File

@ -14,7 +14,7 @@ internal static class Fields
/// <param name="parms"></param>
/// <param name="score"></param>
/// <returns></returns>
public static EMatchResult GetTypeWithFields(TypeDefinition type, SearchParams parms, ScoringModel score)
public static EMatchResult IncludeFields(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.MatchFields is null || parms.MatchFields.Count == 0) return EMatchResult.Disabled;
@ -36,7 +36,7 @@ internal static class Fields
/// <param name="parms"></param>
/// <param name="score"></param>
/// <returns></returns>
public static EMatchResult GetTypeWithoutFields(TypeDefinition type, SearchParams parms, ScoringModel score)
public static EMatchResult ExcludeFields(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.IgnoreFields is null || parms.IgnoreFields.Count == 0) return EMatchResult.Disabled;
@ -47,8 +47,8 @@ internal static class Fields
score.Score += matches;
return matches > 0
? EMatchResult.Match
: EMatchResult.NoMatch;
? EMatchResult.NoMatch
: EMatchResult.Match;
}
/// <summary>
@ -58,7 +58,7 @@ internal static class Fields
/// <param name="parms"></param>
/// <param name="score"></param>
/// <returns></returns>
public static EMatchResult GetTypeByNumberOfFields(TypeDefinition type, SearchParams parms, ScoringModel score)
public static EMatchResult MatchFieldCount(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.FieldCount is null) return EMatchResult.Disabled;

View File

@ -14,7 +14,7 @@ internal static class Methods
/// <param name="parms"></param>
/// <param name="score"></param>
/// <returns>Match if type contains any supplied methods</returns>
public static EMatchResult GetTypeWithMethods(TypeDefinition type, SearchParams parms, ScoringModel score)
public static EMatchResult IncludeMethods(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.MatchMethods is null || parms.MatchMethods.Count == 0) return EMatchResult.Disabled;
@ -36,7 +36,7 @@ internal static class Methods
/// <param name="parms"></param>
/// <param name="score"></param>
/// <returns>Match if type has no methods</returns>
public static EMatchResult GetTypeWithoutMethods(TypeDefinition type, SearchParams parms, ScoringModel score)
public static EMatchResult ExcludeMethods(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.IgnoreMethods is null || parms.IgnoreMethods.Count == 0) return EMatchResult.Disabled;
@ -47,11 +47,11 @@ internal static class Methods
score.Score += matches;
return matches > 0
? EMatchResult.Match
: EMatchResult.NoMatch;
? EMatchResult.NoMatch
: EMatchResult.Match;
}
public static EMatchResult GetTypeByNumberOfMethods(TypeDefinition type, SearchParams parms, ScoringModel score)
public static EMatchResult MatchMethodCount(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.MethodCount is null) return EMatchResult.Disabled;

View File

@ -1,6 +1,53 @@
namespace AssemblyRemapper.Remapper.Search
using AssemblyRemapper.Enums;
using AssemblyRemapper.Models;
using Mono.Cecil;
using MoreLinq;
namespace AssemblyRemapper.Remapper.Search
{
internal class Properties
{
public static EMatchResult IncludeProperties(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.MatchProperties is null || parms.MatchProperties.Count == 0) return EMatchResult.Disabled;
var matches = type.Properties
.Where(property => parms.MatchProperties.Contains(property.Name))
.Count();
score.Score += matches;
return matches > 0
? EMatchResult.Match
: EMatchResult.NoMatch;
}
public static EMatchResult ExcludeProperties(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.IgnorePropterties is null || parms.IgnorePropterties.Count == 0) return EMatchResult.Disabled;
var matches = type.Properties
.Where(property => parms.IgnorePropterties.Contains(property.Name))
.Count();
score.Score += matches;
return matches > 0
? EMatchResult.NoMatch
: EMatchResult.Match;
}
public static EMatchResult MatchPropertyCount(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.PropertyCount is null) return EMatchResult.Disabled;
var match = type.Properties.Exactly((int)parms.PropertyCount);
if (match) { score.Score++; }
return match
? EMatchResult.Match
: EMatchResult.NoMatch;
}
}
}

View File

@ -202,9 +202,9 @@ internal static class TypeDefExtensions
{
var matches = new List<EMatchResult>
{
Methods.GetTypeWithMethods(type, parms, score),
Methods.GetTypeWithoutMethods(type, parms, score),
Methods.GetTypeByNumberOfMethods(type, parms, score)
Methods.IncludeMethods(type, parms, score),
Methods.ExcludeMethods(type, parms, score),
Methods.MatchMethodCount(type, parms, score)
};
// return match if any condition matched
@ -215,9 +215,9 @@ internal static class TypeDefExtensions
{
var matches = new List<EMatchResult>
{
Fields.GetTypeWithFields(type, parms, score),
Fields.GetTypeWithoutFields(type, parms, score),
Fields.GetTypeByNumberOfFields(type, parms, score)
Fields.IncludeFields(type, parms, score),
Fields.ExcludeFields(type, parms, score),
Fields.MatchFieldCount(type, parms, score)
};
// return match if any condition matched
@ -226,41 +226,15 @@ internal static class TypeDefExtensions
public static EMatchResult MatchProperties(this TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.MatchProperties.Count is 0 && parms.IgnorePropterties.Count is 0)
var matches = new List<EMatchResult>
{
return EMatchResult.Disabled;
}
Properties.IncludeProperties(type, parms, score),
Properties.ExcludeProperties(type, parms, score),
Properties.MatchPropertyCount(type, parms, score)
};
var skippAll = parms.IgnorePropterties.Contains("*");
// Type has fields, we dont want any
if (type.HasProperties is false && skippAll is true)
{
return EMatchResult.Match;
}
foreach (var property in type.Properties)
{
if (parms.IgnorePropterties.Contains(property.Name))
{
// Type contains blacklisted property
score.FailureReason = EFailureReason.HasProperties;
return EMatchResult.NoMatch;
}
}
int matchCount = 0;
foreach (var property in type.Properties)
{
if (parms.MatchProperties.Contains(property.Name))
{
matchCount++;
score.Score++;
}
}
return matchCount > 0 ? EMatchResult.Match : EMatchResult.NoMatch;
// return match if any condition matched
return matches.GetMatch();
}
public static EMatchResult MatchNestedTypes(this TypeDefinition type, SearchParams parms, ScoringModel score)

View File

@ -14,7 +14,6 @@ internal static class ExtentionMethods
{
if (outVal.Definition.Name == model.Definition.Name)
{
Logger.Log("Skipping adding duplicate type match to list", ConsoleColor.Yellow);
return;
}
}

View File

@ -1,6 +1,7 @@
{
"Debug": true, // Enables extra debug logging, slows down the program by alot
"Debug": false, // Enables extra debug logging, slows down the program by alot
"SilentMode": true, // The tool will stop and prompt you to continue on every remapping if disabled
"MaxMatchCount": 5, // Default max matches the remapper will return
"Publicize": true, // Publicize all types, methods, and properties : NOTE: Not run until after the remap has completed
"Unseal": true, // Unseal all types : NOTE: Not run until after the remap has completed
"AssemblyPath": "./Data/Managed/Assembly-CSharp.dll", // Path to the assembly we want to remap