Don't throw an exception when a field is missing
This commit is contained in:
@@ -44,7 +44,11 @@ namespace OpenRA
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
traits.Add(LoadTraitInfo(creator, t.Key.Split('@')[0], t.Value));
|
// HACK: The linter does not want to crash when a trait doesn't exist but only print an error instead
|
||||||
|
// LoadTraitInfo will only return null to signal us to abort here if the linter is running
|
||||||
|
var trait = LoadTraitInfo(creator, t.Key.Split('@')[0], t.Value);
|
||||||
|
if (trait != null)
|
||||||
|
traits.Add(trait);
|
||||||
}
|
}
|
||||||
catch (FieldLoader.MissingFieldsException e)
|
catch (FieldLoader.MissingFieldsException e)
|
||||||
{
|
{
|
||||||
@@ -73,7 +77,13 @@ namespace OpenRA
|
|||||||
if (!string.IsNullOrEmpty(my.Value))
|
if (!string.IsNullOrEmpty(my.Value))
|
||||||
throw new YamlException("Junk value `{0}` on trait node {1}"
|
throw new YamlException("Junk value `{0}` on trait node {1}"
|
||||||
.F(my.Value, traitName));
|
.F(my.Value, traitName));
|
||||||
|
|
||||||
|
// HACK: The linter does not want to crash when a trait doesn't exist but only print an error instead
|
||||||
|
// ObjectCreator will only return null to signal us to abort here if the linter is running
|
||||||
var info = creator.CreateObject<ITraitInfo>(traitName + "Info");
|
var info = creator.CreateObject<ITraitInfo>(traitName + "Info");
|
||||||
|
if (info == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
FieldLoader.Load(info, my);
|
FieldLoader.Load(info, my);
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ namespace OpenRA
|
|||||||
return assemblies.Select(a => a.First).FirstOrDefault(a => a.FullName == e.Name);
|
return assemblies.Select(a => a.First).FirstOrDefault(a => a.FullName == e.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Action<string> MissingTypeAction =
|
// Only used by the linter to prevent exceptions from being thrown during a lint run
|
||||||
s => { throw new InvalidOperationException("Cannot locate type: {0}".F(s)); };
|
public static Action<string> MissingTypeAction = null;
|
||||||
|
|
||||||
public T CreateObject<T>(string className)
|
public T CreateObject<T>(string className)
|
||||||
{
|
{
|
||||||
@@ -87,7 +87,12 @@ namespace OpenRA
|
|||||||
var type = typeCache[className];
|
var type = typeCache[className];
|
||||||
if (type == null)
|
if (type == null)
|
||||||
{
|
{
|
||||||
|
// HACK: The linter does not want to crash but only print an error instead
|
||||||
|
if (MissingTypeAction != null)
|
||||||
MissingTypeAction(className);
|
MissingTypeAction(className);
|
||||||
|
else
|
||||||
|
throw new InvalidOperationException("Cannot locate type: {0}".F(className));
|
||||||
|
|
||||||
return default(T);
|
return default(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user