2024-06-21 05:18:23 -04:00

58 lines
1.9 KiB
C#

using Mono.Cecil;
using MoreLinq;
using ReCodeIt.Enums;
using ReCodeIt.Models;
namespace ReCodeIt.ReMapper.Search
{
internal class Properties
{
public static EMatchResult Include(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.IncludeProperties is null || parms.IncludeProperties.Count == 0) return EMatchResult.Disabled;
var matches = type.Properties
.Where(property => parms.IncludeProperties.Contains(property.Name))
.Count();
score.Score += matches;
score.FailureReason = matches > 0 ? EFailureReason.None : EFailureReason.PropertiesInclude;
return matches > 0
? EMatchResult.Match
: EMatchResult.NoMatch;
}
public static EMatchResult Exclude(TypeDefinition type, SearchParams parms, ScoringModel score)
{
if (parms.ExcludeProperties is null || parms.ExcludeProperties.Count == 0) return EMatchResult.Disabled;
var matches = type.Properties
.Where(property => parms.ExcludeProperties.Contains(property.Name))
.Count();
score.Score -= matches;
score.FailureReason = matches > 0 ? EFailureReason.PropertiesExclude : EFailureReason.None;
return matches > 0
? EMatchResult.NoMatch
: EMatchResult.Match;
}
public static EMatchResult Count(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++; }
score.FailureReason = match ? EFailureReason.None : EFailureReason.PropertiesCount;
return match
? EMatchResult.Match
: EMatchResult.NoMatch;
}
}
}