Skip to content

Commit

Permalink
Avoid allocations in ConversionSelector
Browse files Browse the repository at this point in the history
  • Loading branch information
jnyrup committed May 29, 2022
1 parent 981570b commit 8da904f
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions Src/FluentAssertions/Equivalency/ConversionSelector.cs
Expand Up @@ -27,8 +27,19 @@ public ConversionSelectorRule(Func<IObjectInfo, bool> predicate, string descript
}
}

private List<ConversionSelectorRule> inclusions = new();
private List<ConversionSelectorRule> exclusions = new();
private readonly List<ConversionSelectorRule> inclusions;
private readonly List<ConversionSelectorRule> exclusions;

public ConversionSelector()
: this(new List<ConversionSelectorRule>(), new List<ConversionSelectorRule>())
{
}

private ConversionSelector(List<ConversionSelectorRule> inclusions, List<ConversionSelectorRule> exclusions)
{
this.inclusions = inclusions;
this.exclusions = exclusions;
}

public void IncludeAll()
{
Expand All @@ -55,6 +66,11 @@ public void Exclude(Expression<Func<IObjectInfo, bool>> predicate)

public bool RequiresConversion(Comparands comparands, INode currentNode)
{
if (inclusions.Count == 0)
{
return false;
}

var objectInfo = new ObjectInfo(comparands, currentNode);

return inclusions.Any(p => p.Predicate(objectInfo)) && !exclusions.Any(p => p.Predicate(objectInfo));
Expand Down Expand Up @@ -84,10 +100,6 @@ public override string ToString()

public ConversionSelector Clone()
{
return new ConversionSelector
{
inclusions = new List<ConversionSelectorRule>(inclusions),
exclusions = new List<ConversionSelectorRule>(exclusions),
};
return new ConversionSelector(new List<ConversionSelectorRule>(inclusions), new List<ConversionSelectorRule>(exclusions));
}
}

0 comments on commit 8da904f

Please sign in to comment.