From 70dfcffaea1438fee78f9ae3f57447af03a2f5d8 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 19 Jul 2011 19:51:24 +1200 Subject: [PATCH] add another lint pass to ensure that every (non-template) actor type is actually constructible --- .../Lint/CheckTraitPrerequisites.cs | 36 +++++++++++++++++++ OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 + 2 files changed, 37 insertions(+) create mode 100644 OpenRA.Mods.RA/Lint/CheckTraitPrerequisites.cs diff --git a/OpenRA.Mods.RA/Lint/CheckTraitPrerequisites.cs b/OpenRA.Mods.RA/Lint/CheckTraitPrerequisites.cs new file mode 100644 index 0000000000..f8f9e8bd63 --- /dev/null +++ b/OpenRA.Mods.RA/Lint/CheckTraitPrerequisites.cs @@ -0,0 +1,36 @@ +#region Copyright & License Information +/* + * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + public class CheckTraitPrerequisites : ILintPass + { + public void Run(Action emitError, Action emitWarning) + { + foreach (var actorInfo in Rules.Info.Where(a => !a.Key.StartsWith("^"))) + try + { + var traits = actorInfo.Value.TraitsInConstructOrder().ToArray(); + if (traits.Length == 0) + emitWarning("Actor {0} has no traits. Is this intended?".F(actorInfo.Key)); + } + catch(Exception e) + { + emitError("Actor {0} is not constructible; failure: {1}".F(actorInfo.Key, e.Message)); + } + } + } +} \ No newline at end of file diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index b7ea37ca48..4bb9c4e38a 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -355,6 +355,7 @@ +