Problem in check of reflective field set #518
brian
11 Apr 2009
I guess I am not surprised that something as complex as the entire demo doesn't serialize correct - I've never tried that. But I will take a look when I get a chance. Thanks.
qualidafial
14 Apr 2009
I think this is a bug in Field.java:
// check generic type (the Java runtime will check non-generics)
if (of.isGenericInstance() && value != null)
{
if (!of.is(type(value)))
throw ArgErr.make("Wrong type for field " + qname() + ": " + of + " != " + type(value)).val;
}
The code is checking whether the destination field's type fits the new value's type, but it should be checking the other way around.
// check generic type (the Java runtime will check non-generics)
if (of.isGenericInstance() && value != null)
{
if (!type(value).is(of))
throw ArgErr.make("Wrong type for field " + qname() + ": " + of + " != " + type(value)).val;
}
The C# sources need to be fixed likewise.
brian
15 Apr 2009
Promoted to ticket #518 and assigned to brian
brian
15 Apr 2009
Renamed from Problem in examples\fan\demo.fan to Problem in check of reflective field set
brian
15 Apr 2009
Thanks for tracking that problem down. Seems we were missing a test for that case. I pushed the fix and added a test.
Ticket resolved in 1.0.42
qualidafial
15 Apr 2009
Verified against tip, thanks for the fix.
qualidafial
10 Apr 2009
sys::IOErr: Cannot set field fwt::Combo.items: sys::ArgErr: Wrong type for field fwt::Combo.items: sys::Obj[] != sys::Str[] [Line 313] fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:280) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexAdd (ObjDecoder.java:248) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:236) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:268) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:268) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexAdd (ObjDecoder.java:248) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:236) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexAdd (ObjDecoder.java:248) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:236) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:268) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) More... Cause: sys::ArgErr: Wrong type for field fwt::Combo.items: sys::Obj[] != sys::Str[] fan.sys.Field.set (Field.java:103) fan.sys.Field.set (Field.java:79) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:276) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexAdd (ObjDecoder.java:248) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:236) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:268) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:268) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:224) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexAdd (ObjDecoder.java:248) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:236) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexAdd (ObjDecoder.java:248) fanx.serial.ObjDecoder.readComplex (ObjDecoder.java:236) fanx.serial.ObjDecoder.readObj (ObjDecoder.java:143) fanx.serial.ObjDecoder.readComplexField (ObjDecoder.java:268) More...