Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@novell.com>2005-12-07 18:42:54 +0300
committerLluis Sanchez <lluis@novell.com>2005-12-07 18:42:54 +0300
commiteee1751b77eee3398e489564c1ab889181fbe46d (patch)
tree9f981ca40feeff777335d2ef1aaa56d5b9a08ce2 /mcs/class/System.XML
parentfd57f65bcc67902958adf09c62f74fdadd527718 (diff)
2005-12-07 Lluis Sanchez Gual <lluis@novell.com>
* XmlSerializationReaderInterpreter.cs: When deserializing a "flat" collection, don't create a new collection if the property already has a collection instance. * SerializationCodeGenerator.cs: same as above. Also return an empty string for flag enum default values. svn path=/trunk/mcs/; revision=54043
Diffstat (limited to 'mcs/class/System.XML')
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/ChangeLog8
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs20
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs13
3 files changed, 34 insertions, 7 deletions
diff --git a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
index 3381bf3557c..663274672ba 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
+++ b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
@@ -1,3 +1,11 @@
+2005-12-07 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlSerializationReaderInterpreter.cs: When deserializing a "flat"
+ collection, don't create a new collection if the property already has a
+ collection instance.
+ * SerializationCodeGenerator.cs: same as above. Also return an empty
+ string for flag enum default values.
+
2005-12-06 Konstantin Triger <kostat@mainsoft.com>
* TypeTranslator.cs: TARGET_JVM: save additional types per AppDomain.
diff --git a/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs b/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
index 42c903d0e44..46a9f05ae73 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
@@ -516,6 +516,7 @@ namespace System.Xml.Serialization
if (emap.IsFlags)
{
WriteLineInd ("default:");
+ WriteLine ("if (val.ToString () == \"0\") return string.Empty;");
WriteLine ("System.Text.StringBuilder sb = new System.Text.StringBuilder ();");
WriteLine ("string[] enumNames = val.ToString().Split (',');");
WriteLine ("foreach (string name in enumNames)");
@@ -1642,11 +1643,20 @@ namespace System.Xml.Serialization
if (!MemberHasReadReplaceHook (xmlMapType, mem)) {
flatLists[n] = GetObTempVar ();
string rval;
- if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList))
- rval = ob + ".@" + mem.Name;
- else
+ WriteLine (mem.TypeData.FullTypeName + " " + flatLists[n] + ";");
+ if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList)) {
+ rval = GenerateGetMemberValue (mem, ob, isValueList);
+ WriteLine (flatLists[n] + " = " + rval + ";");
+ } else if (mem.TypeData.Type.IsArray) {
rval = GenerateInitializeList (mem.TypeData);
- WriteLine (mem.TypeData.FullTypeName + " " + flatLists[n] + " = " + rval + ";");
+ WriteLine (flatLists[n] + " = " + rval + ";");
+ } else {
+ WriteLine (flatLists[n] + " = " + GenerateGetMemberValue (mem, ob, isValueList) + ";");
+ WriteLineInd ("if (((object)" + flatLists[n] + ") == null) {");
+ WriteLine (flatLists[n] + " = " + GenerateInitializeList (mem.TypeData) + ";");
+ GenerateSetMemberValue (mem, ob, flatLists[n], isValueList);
+ WriteLineUni ("}");
+ }
}
if (mem.ChoiceMember != null) {
@@ -1916,7 +1926,7 @@ namespace System.Xml.Serialization
string list = flatLists[mem.FlatArrayIndex];
if (mem.TypeData.Type.IsArray)
WriteLine (list + " = (" + mem.TypeData.FullTypeName + ") ShrinkArray (" + list + ", " + indexes[mem.FlatArrayIndex] + ", " + GetTypeOf(mem.TypeData.Type.GetElementType()) + ", true);");
- if (!IsReadOnly (typeMap, mem, mem.TypeData, isValueList))
+ if (!IsReadOnly (typeMap, mem, mem.TypeData, isValueList) && mem.TypeData.Type.IsArray)
GenerateSetMemberValue (mem, ob, list, isValueList);
}
}
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
index f53f484d704..3863dcf010e 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
@@ -321,8 +321,17 @@ namespace System.Xml.Serialization
foreach (XmlTypeMapMemberExpandable mem in map.FlatLists) {
if (IsReadOnly (mem, mem.TypeData, ob, isValueList))
flatLists [mem.FlatArrayIndex] = mem.GetValue (ob);
- else
+ else if (mem.TypeData.Type.IsArray) {
flatLists [mem.FlatArrayIndex] = InitializeList (mem.TypeData);
+ }
+ else {
+ object list = mem.GetValue (ob);
+ if (list == null) {
+ list = InitializeList (mem.TypeData);
+ SetMemberValue (mem, ob, list, isValueList);
+ }
+ flatLists [mem.FlatArrayIndex] = list;
+ }
if (mem.ChoiceMember != null) {
if (flatListsChoices == null)
@@ -485,7 +494,7 @@ namespace System.Xml.Serialization
Object list = flatLists[mem.FlatArrayIndex];
if (mem.TypeData.Type.IsArray)
list = ShrinkArray ((Array)list, indexes[mem.FlatArrayIndex], mem.TypeData.Type.GetElementType(), true);
- if (!IsReadOnly (mem, mem.TypeData, ob, isValueList))
+ if (!IsReadOnly (mem, mem.TypeData, ob, isValueList) && mem.TypeData.Type.IsArray)
SetMemberValue (mem, ob, list, isValueList);
}
}