2010-04-22 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Thu, 22 Apr 2010 10:47:03 +0000 (10:47 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Thu, 22 Apr 2010 10:47:03 +0000 (10:47 -0000)
* 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

mcs/class/System.Xaml/System.Xaml/ChangeLog
mcs/class/System.Xaml/System.Xaml/TypeExtensionMethods.cs
mcs/class/System.Xaml/System.Xaml/XamlObjectReader.cs

index ac419d39656296e7b2d697856a04eb0181250601..82d91b548cde142381d3a4486642d6ba60ec64c9 100644 (file)
@@ -1,3 +1,10 @@
+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
index c1cb02d7839acabafc0bfdd0d728ff1ba8cb0401..f915c1153ce62ff224c85363ae3f6c83e0def2b8 100644 (file)
@@ -101,11 +101,15 @@ namespace System.Xaml
                        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)
@@ -117,7 +121,7 @@ namespace System.Xaml
                        return value;
                }
 
-               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)
@@ -127,7 +131,7 @@ namespace System.Xaml
                                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);
                        }
@@ -159,7 +163,7 @@ namespace System.Xaml
                        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;
                }
index 59f87d22a0e2c70f50a2f653f9bc2f90efd5c0ed..1868c322822a6bf0a71fe420d5353d17eb68ea9d 100644 (file)
@@ -315,9 +315,9 @@ namespace System.Xaml
                        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 xm != null ? xm.GetMemberValue (xt, obj) : instance;
+                       return xm != null ? xm.GetMemberValueForObjectReader (xt, obj) : instance;
                }
        }
 }