From 0bbcff973fba1a9ca029ac2ccba04c5bb2617a2c Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Wed, 14 Sep 2022 11:51:47 +0200 Subject: [PATCH] Only query the palette attribute once in CheckPalettes --- OpenRA.Mods.Common/Lint/CheckPalettes.cs | 49 ++++++++++++------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/OpenRA.Mods.Common/Lint/CheckPalettes.cs b/OpenRA.Mods.Common/Lint/CheckPalettes.cs index c0d22ff4c1..c35f8ada09 100644 --- a/OpenRA.Mods.Common/Lint/CheckPalettes.cs +++ b/OpenRA.Mods.Common/Lint/CheckPalettes.cs @@ -40,21 +40,20 @@ namespace OpenRA.Mods.Common.Lint foreach (var traitInfo in actorInfo.Value.TraitInfos()) { var fields = traitInfo.GetType().GetFields(); - foreach (var field in fields.Where(x => x.HasAttribute())) + foreach (var field in fields) { - var isPlayerPalette = false; - var paletteReference = field.GetCustomAttributes(true).FirstOrDefault(); - if (paletteReference != null) + if (paletteReference == null) + continue; + + var isPlayerPalette = false; + if (!string.IsNullOrEmpty(paletteReference.PlayerPaletteReferenceSwitch)) { - if (!string.IsNullOrEmpty(paletteReference.PlayerPaletteReferenceSwitch)) - { - var fieldInfo = fields.First(f => f.Name == paletteReference.PlayerPaletteReferenceSwitch); - isPlayerPalette = (bool)fieldInfo.GetValue(traitInfo); - } - else - isPlayerPalette = paletteReference.IsPlayerPalette; + var fieldInfo = fields.First(f => f.Name == paletteReference.PlayerPaletteReferenceSwitch); + isPlayerPalette = (bool)fieldInfo.GetValue(traitInfo); } + else + isPlayerPalette = paletteReference.IsPlayerPalette; var references = LintExts.GetFieldValues(traitInfo, field); foreach (var reference in references) @@ -84,21 +83,20 @@ namespace OpenRA.Mods.Common.Lint continue; var fields = projectileInfo.GetType().GetFields(); - foreach (var field in fields.Where(x => x.HasAttribute())) + foreach (var field in fields) { - var isPlayerPalette = false; + var paletteReference = field.GetCustomAttributes(true).FirstOrDefault(); + if (paletteReference == null) + continue; - var paletteReference = field.GetCustomAttributes(true).First(); - if (paletteReference != null) + var isPlayerPalette = false; + if (!string.IsNullOrEmpty(paletteReference.PlayerPaletteReferenceSwitch)) { - if (!string.IsNullOrEmpty(paletteReference.PlayerPaletteReferenceSwitch)) - { - var fieldInfo = fields.First(f => f.Name == paletteReference.PlayerPaletteReferenceSwitch); - isPlayerPalette = (bool)fieldInfo.GetValue(projectileInfo); - } - else - isPlayerPalette = paletteReference.IsPlayerPalette; + var fieldInfo = fields.First(f => f.Name == paletteReference.PlayerPaletteReferenceSwitch); + isPlayerPalette = (bool)fieldInfo.GetValue(projectileInfo); } + else + isPlayerPalette = paletteReference.IsPlayerPalette; var references = LintExts.GetFieldValues(projectileInfo, field); foreach (var reference in references) @@ -128,9 +126,12 @@ namespace OpenRA.Mods.Common.Lint foreach (var traitInfo in actorInfo.Value.TraitInfos()) { var fields = traitInfo.GetType().GetFields(); - foreach (var field in fields.Where(x => x.HasAttribute())) + foreach (var field in fields) { - var paletteDefinition = field.GetCustomAttributes(true).First(); + var paletteDefinition = field.GetCustomAttributes(true).FirstOrDefault(); + if (paletteDefinition == null) + continue; + var values = LintExts.GetFieldValues(traitInfo, field); foreach (var value in values) {