fix regression introduced by attribute validation
This commit is contained in:
parent
b8401520ff
commit
a83a2da677
@ -31,12 +31,13 @@ public abstract class AttributeImplementation<T> : AttributeImplementation
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
protected override IEnumerable<Type>? ValidDataTypes => [ typeof(T) ];
|
||||
protected override IEnumerable<Type> ValidDataTypes => [ typeof(T) ];
|
||||
}
|
||||
|
||||
public abstract class AttributeImplementation : ClassImplementation
|
||||
{
|
||||
protected virtual IEnumerable<Type>? ValidDataTypes { get; }
|
||||
protected virtual IEnumerable<Type> ValidDataTypes { get; } = [];
|
||||
protected virtual IEnumerable<Type> ConvertibleDataTypes { get; } = [];
|
||||
protected abstract object? ConvertFromInternal(Oms oms, object? value);
|
||||
|
||||
public object? ReadDerivedData(BinaryReader br)
|
||||
@ -66,7 +67,19 @@ public abstract class AttributeImplementation : ClassImplementation
|
||||
{
|
||||
if (value != null && !ValidDataTypes.Contains(value.GetType()))
|
||||
{
|
||||
throw new ArgumentException(String.Format("value {0} cannot be converted to attribute type `{1}`", value is string ? "\"" + value.ToString() + "\"" : value, oms.GetInstanceText(attributeInstance)));
|
||||
if (ConvertibleDataTypes.Contains(value.GetType()))
|
||||
{
|
||||
// object? p = ConvertFromInternal(oms, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
string id = value.ToString();
|
||||
if (value is InstanceHandle ih)
|
||||
{
|
||||
id = oms.GetGlobalIdentifier(ih).ToString("b");
|
||||
}
|
||||
throw new ArgumentException(String.Format("value {0} cannot be converted to attribute type `{1}` [{2}]", value is string ? "\"" + value.ToString() + "\"" : id, oms.GetInstanceText(attributeInstance), oms.GetInstanceKey(attributeInstance)));
|
||||
}
|
||||
}
|
||||
}
|
||||
ValidateInternal(oms, attributeInstance, value);
|
||||
|
||||
@ -24,6 +24,7 @@ namespace Mocha.Core.AttributeImplementations;
|
||||
public class BooleanAttributeImplementation : AttributeImplementation<bool>
|
||||
{
|
||||
public override Guid ClassGuid => KnownInstanceGuids.Classes.BooleanAttribute;
|
||||
protected override IEnumerable<Type> ConvertibleDataTypes => [ typeof(string) ];
|
||||
|
||||
protected override object? ConvertFromInternal(Oms oms, object? value)
|
||||
{
|
||||
|
||||
@ -109,7 +109,7 @@ namespace Mocha.Core
|
||||
|
||||
if (Oms.DebugOms != null)
|
||||
{
|
||||
return Oms.DebugOms.GetInstanceText(this);
|
||||
//return Oms.DebugOms.GetInstanceText(this);
|
||||
}
|
||||
return _ID.ToString();
|
||||
}
|
||||
|
||||
@ -1439,10 +1439,22 @@ public abstract class Oms
|
||||
// `Worker who can Resign` := `Current Signed In Worker` -> `Worker who can Resign` = `Steve`
|
||||
|
||||
|
||||
if (IsInstanceOf(assignsToParm, GetInstance(KnownInstanceGuids.Classes.Attribute)) && IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Attribute)))
|
||||
if (IsInstanceOf(assignsToParm, GetInstance(KnownInstanceGuids.Classes.Attribute)))
|
||||
{
|
||||
// if `assigns to Parm` is a Class which inherits from Attribute, and `assigns from Work Data` is an Attribute, then assign the underlying work data
|
||||
context.SetWorkData(assignsToParm, context.GetWorkData(assignsFromWorkData));
|
||||
if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.Attribute)))
|
||||
{
|
||||
context.SetWorkData(assignsToParm, context.GetWorkData(assignsFromWorkData));
|
||||
}
|
||||
else if (IsInstanceOf(assignsFromWorkData, GetInstance(KnownInstanceGuids.Classes.ExecutableReturningAttribute)))
|
||||
{
|
||||
InstanceHandle ih = Execute(context, assignsFromWorkData.GetHandle(), null);
|
||||
context.SetWorkData(assignsToParm, context.GetWorkData(ih));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException("cannot assign that to an Attribute!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user