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

@@ -39,16 +39,16 @@ namespace OpenRA.Mods.Common.Lint
void CheckTrait(Action<string> emitError, ActorInfo actorInfo, TraitInfo traitInfo, Ruleset rules)
{
var actualType = traitInfo.GetType();
foreach (var field in actualType.GetFields())
foreach (var field in Utility.GetFields(actualType))
{
if (field.HasAttribute<ActorReferenceAttribute>())
if (Utility.HasAttribute<ActorReferenceAttribute>(field))
CheckActorReference(emitError, actorInfo, traitInfo, field, rules.Actors,
field.GetCustomAttributes<ActorReferenceAttribute>(true)[0]);
Utility.GetCustomAttributes<ActorReferenceAttribute>(field, true)[0]);
if (field.HasAttribute<WeaponReferenceAttribute>())
if (Utility.HasAttribute<WeaponReferenceAttribute>(field))
CheckWeaponReference(emitError, actorInfo, traitInfo, field, rules.Weapons);
if (field.HasAttribute<VoiceSetReferenceAttribute>())
if (Utility.HasAttribute<VoiceSetReferenceAttribute>(field))
CheckVoiceReference(emitError, actorInfo, traitInfo, field, rules.Voices);
}
}