mirror of
https://github.com/dcronqvist/DotTiled.git
synced 2025-02-05 08:52:50 +02:00
Fix bug where enum properties were mistakenly parsed as uint when they were string
This commit is contained in:
parent
f3c4478125
commit
ade3d8840a
2 changed files with 19 additions and 25 deletions
|
@ -156,7 +156,7 @@ public abstract partial class TmjReaderBase
|
||||||
return resultingProps;
|
return resultingProps;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal EnumProperty ReadEnumProperty(JsonElement element)
|
internal IProperty ReadEnumProperty(JsonElement element)
|
||||||
{
|
{
|
||||||
var name = element.GetRequiredProperty<string>("name");
|
var name = element.GetRequiredProperty<string>("name");
|
||||||
var propertyType = element.GetRequiredProperty<string>("propertytype");
|
var propertyType = element.GetRequiredProperty<string>("propertytype");
|
||||||
|
@ -170,18 +170,15 @@ public abstract partial class TmjReaderBase
|
||||||
|
|
||||||
if (!customTypeDef.HasValue)
|
if (!customTypeDef.HasValue)
|
||||||
{
|
{
|
||||||
if (typeInJson == PropertyType.String)
|
#pragma warning disable CS8509 // The switch expression does not handle all possible values of its input type (it is not exhaustive).
|
||||||
|
#pragma warning disable IDE0072 // Add missing cases
|
||||||
|
return typeInJson switch
|
||||||
{
|
{
|
||||||
var value = element.GetRequiredProperty<string>("value");
|
PropertyType.String => new StringProperty { Name = name, Value = element.GetRequiredProperty<string>("value") },
|
||||||
var values = value.Split(',').Select(v => v.Trim()).ToHashSet();
|
PropertyType.Int => new IntProperty { Name = name, Value = element.GetRequiredProperty<int>("value") },
|
||||||
return new EnumProperty { Name = name, PropertyType = propertyType, Value = values };
|
};
|
||||||
}
|
#pragma warning restore IDE0072 // Add missing cases
|
||||||
else
|
#pragma warning restore CS8509 // The switch expression does not handle all possible values of its input type (it is not exhaustive).
|
||||||
{
|
|
||||||
var value = element.GetRequiredProperty<int>("value");
|
|
||||||
var values = new HashSet<string> { value.ToString(CultureInfo.InvariantCulture) };
|
|
||||||
return new EnumProperty { Name = name, PropertyType = propertyType, Value = values };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (customTypeDef.Value is not CustomEnumDefinition ced)
|
if (customTypeDef.Value is not CustomEnumDefinition ced)
|
||||||
|
|
|
@ -123,7 +123,7 @@ public abstract partial class TmxReaderBase
|
||||||
return new ClassProperty { Name = name, PropertyType = propertyType, Value = propsInType };
|
return new ClassProperty { Name = name, PropertyType = propertyType, Value = propsInType };
|
||||||
}
|
}
|
||||||
|
|
||||||
internal EnumProperty ReadEnumProperty()
|
internal IProperty ReadEnumProperty()
|
||||||
{
|
{
|
||||||
var name = _reader.GetRequiredAttribute("name");
|
var name = _reader.GetRequiredAttribute("name");
|
||||||
var propertyType = _reader.GetRequiredAttribute("propertytype");
|
var propertyType = _reader.GetRequiredAttribute("propertytype");
|
||||||
|
@ -132,25 +132,22 @@ public abstract partial class TmxReaderBase
|
||||||
"string" => PropertyType.String,
|
"string" => PropertyType.String,
|
||||||
"int" => PropertyType.Int,
|
"int" => PropertyType.Int,
|
||||||
_ => throw new XmlException("Invalid property type")
|
_ => throw new XmlException("Invalid property type")
|
||||||
}) ?? PropertyType.String;
|
}).GetValueOr(PropertyType.String);
|
||||||
var customTypeDef = _customTypeResolver(propertyType);
|
var customTypeDef = _customTypeResolver(propertyType);
|
||||||
|
|
||||||
// If the custom enum definition is not found,
|
// If the custom enum definition is not found,
|
||||||
// we assume an empty enum definition.
|
// we assume an empty enum definition.
|
||||||
if (!customTypeDef.HasValue)
|
if (!customTypeDef.HasValue)
|
||||||
{
|
{
|
||||||
if (typeInXml == PropertyType.String)
|
#pragma warning disable CS8509 // The switch expression does not handle all possible values of its input type (it is not exhaustive).
|
||||||
|
#pragma warning disable IDE0072 // Add missing cases
|
||||||
|
return typeInXml switch
|
||||||
{
|
{
|
||||||
var value = _reader.GetRequiredAttribute("value");
|
PropertyType.String => new StringProperty { Name = name, Value = _reader.GetRequiredAttribute("value") },
|
||||||
var values = value.Split(',').Select(v => v.Trim()).ToHashSet();
|
PropertyType.Int => new IntProperty { Name = name, Value = _reader.GetRequiredAttributeParseable<int>("value") },
|
||||||
return new EnumProperty { Name = name, PropertyType = propertyType, Value = values };
|
};
|
||||||
}
|
#pragma warning restore IDE0072 // Add missing cases
|
||||||
else
|
#pragma warning restore CS8509 // The switch expression does not handle all possible values of its input type (it is not exhaustive).
|
||||||
{
|
|
||||||
var value = _reader.GetRequiredAttributeParseable<int>("value");
|
|
||||||
var values = new HashSet<string> { value.ToString(CultureInfo.InvariantCulture) };
|
|
||||||
return new EnumProperty { Name = name, PropertyType = propertyType, Value = values };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (customTypeDef.Value is not CustomEnumDefinition ced)
|
if (customTypeDef.Value is not CustomEnumDefinition ced)
|
||||||
|
|
Loading…
Add table
Reference in a new issue