add addititional value null checks
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user