2006-06-07 Lluis Sanchez Gual <lluis@novell.com>
authorLluis Sanchez <lluis@novell.com>
Wed, 7 Jun 2006 14:33:48 +0000 (14:33 -0000)
committerLluis Sanchez <lluis@novell.com>
Wed, 7 Jun 2006 14:33:48 +0000 (14:33 -0000)
* XmlTypeMapMember.cs: Added GlobalIndex property.
* XmlTypeMapping.cs: When adding a member, initialize its GlobalIndex
  property.
* SerializationCodeGenerator.cs:
* XmlSerializationWriterInterpreter.cs:
* XmlSerializationReaderInterpreter.cs: Use GlobalIndex instead of
  Index to get/set the values from the input array, since some Index
  values are shared between attribute and element members. Fixes
  bug #78562.

svn path=/trunk/mcs/; revision=61531

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriterInterpreter.cs
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapMember.cs
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs

index 5e064639356bac8844f8369751a716134b4962ae..ca5bd6a51c147af2f3f2911c4aa8605f98e29e27 100644 (file)
@@ -1,3 +1,15 @@
+2006-06-07  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * XmlTypeMapMember.cs: Added GlobalIndex property.
+       * XmlTypeMapping.cs: When adding a member, initialize its GlobalIndex
+         property.
+       * SerializationCodeGenerator.cs:
+       * XmlSerializationWriterInterpreter.cs:
+       * XmlSerializationReaderInterpreter.cs: Use GlobalIndex instead of
+         Index to get/set the values from the input array, since some Index
+         values are shared between attribute and element members. Fixes
+         bug #78562.
+
 2006-05-30  Atsushi Enomoto  <atsushi@ximian.com>
 
        * SerializationCodeGenerator.cs,
index eb3e163a230a8f8835b21bb540dfae278c427d47..f744c0ca0867d56173243cf95ae694a05448a724 100644 (file)
@@ -1163,14 +1163,14 @@ namespace System.Xml.Serialization
 
                string GenerateGetMemberValue (XmlTypeMapMember member, string ob, bool isValueList)
                {
-                       if (isValueList) return GetCast (member.TypeData, TypeTranslator.GetTypeData (typeof(object)), ob + "[" + member.Index + "]");
+                       if (isValueList) return GetCast (member.TypeData, TypeTranslator.GetTypeData (typeof(object)), ob + "[" + member.GlobalIndex + "]");
                        else return ob + ".@" + member.Name;
                }
                
                string GenerateMemberHasValueCondition (XmlTypeMapMember member, string ob, bool isValueList)
                {
                        if (isValueList) {
-                               return ob + ".Length > " + member.Index;
+                               return ob + ".Length > " + member.GlobalIndex;
                        }
                        else if (member.DefaultValue != System.DBNull.Value) {
                                string mem = ob + ".@" + member.Name;
@@ -2013,7 +2013,7 @@ namespace System.Xml.Serialization
 
                void GenerateSetMemberValue (XmlTypeMapMember member, string ob, string value, bool isValueList)
                {
-                       if (isValueList) WriteLine (ob + "[" + member.Index + "] = " + value + ";");
+                       if (isValueList) WriteLine (ob + "[" + member.GlobalIndex + "] = " + value + ";");
                        else {
                                WriteLine (ob + ".@" + member.Name + " = " + value + ";");
                                if (member.IsOptionalValueType)
index fd16e0c8522418828b05259e663e95ce7e1f0288..fb46de152f1354a1f18c0f6062f4af9b022e0d9f 100644 (file)
@@ -557,7 +557,7 @@ namespace System.Xml.Serialization
 
                void SetMemberValue (XmlTypeMapMember member, object ob, object value, bool isValueList)
                {
-                       if (isValueList) ((object[])ob)[member.Index] = value;
+                       if (isValueList) ((object[])ob)[member.GlobalIndex] = value;
                        else {
                                member.SetValue (ob, value);
                                if (member.IsOptionalValueType)
@@ -578,7 +578,7 @@ namespace System.Xml.Serialization
 
                object GetMemberValue (XmlTypeMapMember member, object ob, bool isValueList)
                {
-                       if (isValueList) return ((object[])ob)[member.Index];
+                       if (isValueList) return ((object[])ob)[member.GlobalIndex];
                        else return member.GetValue (ob);
                }
 
index e1062a72998d94beab033a4daf19f218966b6808..d411053895e16fe5396248eccd51bf7ada1723f7 100644 (file)
@@ -264,14 +264,14 @@ namespace System.Xml.Serialization
 
                object GetMemberValue (XmlTypeMapMember member, object ob, bool isValueList)
                {
-                       if (isValueList) return ((object[])ob)[member.Index];
+                       if (isValueList) return ((object[])ob)[member.GlobalIndex];
                        else return member.GetValue (ob);
                }
 
                bool MemberHasValue (XmlTypeMapMember member, object ob, bool isValueList)
                {
                        if (isValueList) {
-                               return member.Index < ((object[])ob).Length;
+                               return member.GlobalIndex < ((object[])ob).Length;
                        }
                        else if (member.DefaultValue != System.DBNull.Value) {
                                object val = GetMemberValue (member, ob, isValueList);
index 58357a699d0ab4bb7bbbf3e88efc68777f9c898f..0311faac1bc41267a087e14e6188a9ddc22c2b43 100644 (file)
@@ -41,6 +41,7 @@ namespace System.Xml.Serialization
        {
                string _name;
                int _index;
+               int _globalIndex;
                TypeData _typeData;
                MemberInfo _member;
                MemberInfo _specifiedMember;
@@ -129,6 +130,12 @@ namespace System.Xml.Serialization
                        set { _index = value; }
                }
                
+               public int GlobalIndex
+               {
+                       get { return _globalIndex; }
+                       set { _globalIndex = value; }
+               }
+               
                public bool IsOptionalValueType
                {
                        get { return (_flags & OPTIONAL) != 0; }
index 7e1ee99c5fb7a5202a3f03fdda7ff6beb68ab241..0fd174ce84dcc326abf3fa8d5afa512967893aa1 100644 (file)
@@ -220,6 +220,7 @@ namespace System.Xml.Serialization
 \r
                public void AddMember (XmlTypeMapMember member)\r
                {\r
+                       member.GlobalIndex = _allMembers.Count;\r
                        _allMembers.Add (member);\r
                        \r
                        if (!(member.DefaultValue is System.DBNull) && member.DefaultValue != null) {\r