Cache reflection calls when running utility lints and commands.

Reduces runtime of --check-yaml command to 70% of original.
This commit is contained in:
RoosterDragon
2023-03-28 19:04:14 +01:00
committed by Matthias Mailänder
parent 1a2aafa17c
commit 9dd4f938da
24 changed files with 116 additions and 87 deletions

View File

@@ -38,20 +38,23 @@ namespace OpenRA.Mods.Common.Lint
foreach (var trait in actorInfo.Value.TraitInfos<TraitInfo>())
{
var fieldConsumed = trait.GetType().GetFields()
.Where(x => x.HasAttribute<ConsumedConditionReferenceAttribute>())
var fields = Utility.GetFields(trait.GetType());
var properties = trait.GetType().GetProperties();
var fieldConsumed = fields
.Where(x => Utility.HasAttribute<ConsumedConditionReferenceAttribute>(x))
.SelectMany(f => LintExts.GetFieldValues(trait, f));
var propertyConsumed = trait.GetType().GetProperties()
.Where(x => x.HasAttribute<ConsumedConditionReferenceAttribute>())
var propertyConsumed = properties
.Where(x => Utility.HasAttribute<ConsumedConditionReferenceAttribute>(x))
.SelectMany(p => LintExts.GetPropertyValues(trait, p));
var fieldGranted = trait.GetType().GetFields()
.Where(x => x.HasAttribute<GrantedConditionReferenceAttribute>())
var fieldGranted = fields
.Where(x => Utility.HasAttribute<GrantedConditionReferenceAttribute>(x))
.SelectMany(f => LintExts.GetFieldValues(trait, f));
var propertyGranted = trait.GetType().GetProperties()
.Where(x => x.HasAttribute<GrantedConditionReferenceAttribute>())
var propertyGranted = properties
.Where(x => Utility.HasAttribute<GrantedConditionReferenceAttribute>(x))
.SelectMany(f => LintExts.GetPropertyValues(trait, f));
foreach (var c in fieldConsumed.Concat(propertyConsumed))