add addititional value null checks

This commit is contained in:
Matthias Mailänder
2015-07-05 08:47:05 +02:00
parent a77e0782cf
commit aab6d6d170

View File

@@ -157,24 +157,26 @@ namespace OpenRA
else if (fieldType == typeof(float)) else if (fieldType == typeof(float))
{ {
float res; float res;
if (float.TryParse(value.Replace("%", ""), NumberStyles.Float, NumberFormatInfo.InvariantInfo, out res)) if (value != null && float.TryParse(value.Replace("%", ""), NumberStyles.Float, NumberFormatInfo.InvariantInfo, out res))
return res * (value.Contains('%') ? 0.01f : 1f); return res * (value.Contains('%') ? 0.01f : 1f);
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(decimal)) else if (fieldType == typeof(decimal))
{ {
decimal res; decimal res;
if (decimal.TryParse(value.Replace("%", ""), NumberStyles.Float, NumberFormatInfo.InvariantInfo, out res)) if (value != null && decimal.TryParse(value.Replace("%", ""), NumberStyles.Float, NumberFormatInfo.InvariantInfo, out res))
return res * (value.Contains('%') ? 0.01m : 1m); return res * (value.Contains('%') ? 0.01m : 1m);
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(string)) else if (fieldType == typeof(string))
{ {
if (field != null && MemberHasTranslateAttribute[field]) if (field != null && MemberHasTranslateAttribute[field] && value != null)
return Regex.Replace(value, "@[^@]+@", m => Translate(m.Value.Substring(1, m.Value.Length - 2)), RegexOptions.Compiled); return Regex.Replace(value, "@[^@]+@", m => Translate(m.Value.Substring(1, m.Value.Length - 2)), RegexOptions.Compiled);
return value; return value;
} }
else if (fieldType == typeof(Color)) else if (fieldType == typeof(Color))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
if (parts.Length == 3) if (parts.Length == 3)
@@ -188,9 +190,13 @@ namespace OpenRA
Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255), Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255), Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[3]).Clamp(0, 255)); Exts.ParseIntegerInvariant(parts[3]).Clamp(0, 255));
}
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(Color[])) else if (fieldType == typeof(Color[]))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
@@ -210,7 +216,12 @@ namespace OpenRA
return colors; return colors;
} }
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(HSLColor)) else if (fieldType == typeof(HSLColor))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
@@ -220,6 +231,7 @@ namespace OpenRA
(byte)Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255), (byte)Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),
(byte)Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255), (byte)Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
(byte)Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255)); (byte)Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255));
}
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
@@ -240,6 +252,8 @@ namespace OpenRA
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(WVec)) else if (fieldType == typeof(WVec))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
if (parts.Length == 3) if (parts.Length == 3)
@@ -248,10 +262,13 @@ namespace OpenRA
if (WRange.TryParse(parts[0], out rx) && WRange.TryParse(parts[1], out ry) && WRange.TryParse(parts[2], out rz)) if (WRange.TryParse(parts[0], out rx) && WRange.TryParse(parts[1], out ry) && WRange.TryParse(parts[2], out rz))
return new WVec(rx, ry, rz); return new WVec(rx, ry, rz);
} }
}
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(WVec[])) else if (fieldType == typeof(WVec[]))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
@@ -263,15 +280,18 @@ namespace OpenRA
for (var i = 0; i < vecs.Length; ++i) for (var i = 0; i < vecs.Length; ++i)
{ {
WRange rx, ry, rz; WRange rx, ry, rz;
if (WRange.TryParse(parts[3 * i], out rx) if (WRange.TryParse(parts[3 * i], out rx) && WRange.TryParse(parts[3 * i + 1], out ry) && WRange.TryParse(parts[3 * i + 2], out rz))
&& WRange.TryParse(parts[3 * i + 1], out ry)
&& WRange.TryParse(parts[3 * i + 2], out rz))
vecs[i] = new WVec(rx, ry, rz); vecs[i] = new WVec(rx, ry, rz);
} }
return vecs; return vecs;
} }
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(WPos)) else if (fieldType == typeof(WPos))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
if (parts.Length == 3) if (parts.Length == 3)
@@ -280,6 +300,7 @@ namespace OpenRA
if (WRange.TryParse(parts[0], out rx) && WRange.TryParse(parts[1], out ry) && WRange.TryParse(parts[2], out rz)) if (WRange.TryParse(parts[0], out rx) && WRange.TryParse(parts[1], out ry) && WRange.TryParse(parts[2], out rz))
return new WPos(rx, ry, rz); return new WPos(rx, ry, rz);
} }
}
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
@@ -291,32 +312,39 @@ namespace OpenRA
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(WRot)) else if (fieldType == typeof(WRot))
{
if (value != null)
{ {
var parts = value.Split(','); var parts = value.Split(',');
if (parts.Length == 3) if (parts.Length == 3)
{ {
int rr, rp, ry; int rr, rp, ry;
if (Exts.TryParseIntegerInvariant(value, out rr) if (Exts.TryParseIntegerInvariant(value, out rr) && Exts.TryParseIntegerInvariant(value, out rp) && Exts.TryParseIntegerInvariant(value, out ry))
&& Exts.TryParseIntegerInvariant(value, out rp)
&& Exts.TryParseIntegerInvariant(value, out ry))
return new WRot(new WAngle(rr), new WAngle(rp), new WAngle(ry)); return new WRot(new WAngle(rr), new WAngle(rp), new WAngle(ry));
} }
}
return InvalidValueAction(value, fieldType, fieldName); return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(CPos)) else if (fieldType == typeof(CPos))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
return new CPos( return new CPos(Exts.ParseIntegerInvariant(parts[0]), Exts.ParseIntegerInvariant(parts[1]));
Exts.ParseIntegerInvariant(parts[0]), }
Exts.ParseIntegerInvariant(parts[1]));
return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(CVec)) else if (fieldType == typeof(CVec))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
return new CVec( return new CVec(Exts.ParseIntegerInvariant(parts[0]), Exts.ParseIntegerInvariant(parts[1]));
Exts.ParseIntegerInvariant(parts[0]), }
Exts.ParseIntegerInvariant(parts[1]));
return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType.IsEnum) else if (fieldType.IsEnum)
{ {
@@ -330,6 +358,8 @@ namespace OpenRA
} }
} }
else if (fieldType == typeof(ImageFormat)) else if (fieldType == typeof(ImageFormat))
{
if (value != null)
{ {
switch (value.ToLowerInvariant()) switch (value.ToLowerInvariant())
{ {
@@ -347,6 +377,9 @@ namespace OpenRA
return ImageFormat.Png; return ImageFormat.Png;
} }
} }
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(bool)) else if (fieldType == typeof(bool))
return ParseYesNo(value, fieldType, fieldName); return ParseYesNo(value, fieldType, fieldName);
else if (fieldType.IsArray) else if (fieldType.IsArray)
@@ -362,20 +395,28 @@ namespace OpenRA
return ret; return ret;
} }
else if (fieldType == typeof(Size)) else if (fieldType == typeof(Size))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
return new Size( return new Size(Exts.ParseIntegerInvariant(parts[0]), Exts.ParseIntegerInvariant(parts[1]));
Exts.ParseIntegerInvariant(parts[0]), }
Exts.ParseIntegerInvariant(parts[1]));
return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(int2)) else if (fieldType == typeof(int2))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
return new int2( return new int2(Exts.ParseIntegerInvariant(parts[0]), Exts.ParseIntegerInvariant(parts[1]));
Exts.ParseIntegerInvariant(parts[0]), }
Exts.ParseIntegerInvariant(parts[1]));
return InvalidValueAction(value, fieldType, fieldName);
} }
else if (fieldType == typeof(float2)) else if (fieldType == typeof(float2))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
float xx = 0; float xx = 0;
@@ -387,7 +428,12 @@ namespace OpenRA
yy = res * (parts[1].Contains('%') ? 0.01f : 1f); yy = res * (parts[1].Contains('%') ? 0.01f : 1f);
return new float2(xx, yy); return new float2(xx, yy);
} }
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType == typeof(Rectangle)) else if (fieldType == typeof(Rectangle))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
return new Rectangle( return new Rectangle(
@@ -396,13 +442,21 @@ namespace OpenRA
Exts.ParseIntegerInvariant(parts[2]), Exts.ParseIntegerInvariant(parts[2]),
Exts.ParseIntegerInvariant(parts[3])); Exts.ParseIntegerInvariant(parts[3]));
} }
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Bits<>)) else if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Bits<>))
{
if (value != null)
{ {
var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
var argTypes = new Type[] { typeof(string[]) }; var argTypes = new Type[] { typeof(string[]) };
var argValues = new object[] { parts }; var argValues = new object[] { parts };
return fieldType.GetConstructor(argTypes).Invoke(argValues); return fieldType.GetConstructor(argTypes).Invoke(argValues);
} }
return InvalidValueAction(value, fieldType, fieldName);
}
else if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Nullable<>)) else if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Nullable<>))
{ {
var innerType = fieldType.GetGenericArguments().First(); var innerType = fieldType.GetGenericArguments().First();