* XamlObjectReader.cs, TypeExtensionMethods.cs : handle System.Type
as predefined type that returns Value instead of StartObject.
Rename some member getter methods to explicitly limit the scope to
object readers so far.
svn path=/trunk/mcs/; revision=155942
+2010-04-22 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XamlObjectReader.cs, TypeExtensionMethods.cs : handle System.Type
+ as predefined type that returns Value instead of StartObject.
+ Rename some member getter methods to explicitly limit the scope to
+ object readers so far.
+
2010-04-22 Atsushi Enomoto <atsushi@ximian.com>
* XamlObjectReader.cs
2010-04-22 Atsushi Enomoto <atsushi@ximian.com>
* XamlObjectReader.cs
return DoConvert (xt.TypeConverter, target, explicitTargetType ?? xt.UnderlyingType);
}
return DoConvert (xt.TypeConverter, target, explicitTargetType ?? xt.UnderlyingType);
}
- public static object GetMemberValue (this XamlMember xm, XamlType xt, object target)
+ public static object GetMemberValueForObjectReader (this XamlMember xm, XamlType xt, object target)
- object native = GetPropertyOrFieldValue (xm, xt, target);
- var memberRType = xm.Type == null ? null : xm.Type.UnderlyingType;
- return DoConvert (xm.TypeConverter, native, memberRType);
+ object native = GetPropertyOrFieldValueForObjectReader (xm, xt, target);
+ var convertedType = xm.Type == null ? null : xm.Type.UnderlyingType;
+ // FIXME: not sure if it REALLY applies to everywhere.
+ if (convertedType == typeof (Type))
+ convertedType = typeof (string);
+
+ return DoConvert (xm.TypeConverter, native, convertedType);
}
static object DoConvert (XamlValueConverter<TypeConverter> converter, object value, Type targetType)
}
static object DoConvert (XamlValueConverter<TypeConverter> converter, object value, Type targetType)
- static object GetPropertyOrFieldValue (this XamlMember xm, XamlType xt, object target)
+ static object GetPropertyOrFieldValueForObjectReader (this XamlMember xm, XamlType xt, object target)
{
// FIXME: should this be done here??
if (xm == XamlLanguage.Initialization)
{
// FIXME: should this be done here??
if (xm == XamlLanguage.Initialization)
string [] args = new string [argdefs.Length];
for (int i = 0; i < args.Length; i++) {
var am = argdefs [i];
string [] args = new string [argdefs.Length];
for (int i = 0; i < args.Length; i++) {
var am = argdefs [i];
- args [i] = GetStringValue (am.Type, GetMemberValue (am, xt, target));
+ args [i] = GetStringValue (am.Type, GetMemberValueForObjectReader (am, xt, target));
}
return String.Join (", ", args);
}
}
return String.Join (", ", args);
}
var t = type.UnderlyingType;
if (Type.GetTypeCode (t) != TypeCode.Object)
return true;
var t = type.UnderlyingType;
if (Type.GetTypeCode (t) != TypeCode.Object)
return true;
- else if (t == typeof (TimeSpan) || t == typeof (Uri)) // special predefined types
+ else if (t == typeof (Type) || t == typeof (TimeSpan) || t == typeof (Uri)) // special predefined types
return true;
return false;
}
return true;
return false;
}
var xm = members_stack.Peek ().Current;
var obj = objects.Peek ();
var xt = types.Peek ();
var xm = members_stack.Peek ().Current;
var obj = objects.Peek ();
var xt = types.Peek ();
- if (xm == XamlLanguage.Initialization)
+ if (xt.IsContentValue ())
return xt.GetStringValue (obj);
return xt.GetStringValue (obj);
- return xm != null ? xm.GetMemberValue (xt, obj) : instance;
+ return xm != null ? xm.GetMemberValueForObjectReader (xt, obj) : instance;