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:
authorAtsushi Eno <atsushieno@gmail.com>2007-09-25 19:55:48 +0400
committerAtsushi Eno <atsushieno@gmail.com>2007-09-25 19:55:48 +0400
commit1e597c4439f7a46c826e2339b6b7953782c5d7ff (patch)
tree74be09fa375561bce957608ec0a4e740a5df6ff8 /mcs/class/System.XML/System.Xml.Serialization
parentf6ac366e8665e0aa05566570a545fcdaf8625d6c (diff)
2007-09-25 Atsushi Enomoto <atsushi@ximian.com>
* XmlTypeMapping.cs, XmlSerializationWriterInterpreter.cs, SerializationCodeGenerator.cs : More XmlSchemaProviderAttribute method check. Use QName returned by the method for the output root name. * XmlSerializerTests.cs, XmlReflectionImporterTests.cs : added tests for XmlSchemaProviderAttribute and how its qname works. svn path=/trunk/mcs/; revision=86340
Diffstat (limited to 'mcs/class/System.XML/System.Xml.Serialization')
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/ChangeLog7
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs8
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriterInterpreter.cs2
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs7
4 files changed, 20 insertions, 4 deletions
diff --git a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
index 3378dfbdf53..f4f1d7fb87f 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
+++ b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog
@@ -1,3 +1,10 @@
+2007-09-25 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlTypeMapping.cs, XmlSerializationWriterInterpreter.cs,
+ SerializationCodeGenerator.cs :
+ More XmlSchemaProviderAttribute method check. Use QName returned
+ by the method for the output root name.
+
2007-08-21 Atsushi Enomoto <atsushi@ximian.com>
* XmlReflectionImporter.cs : do not reject XmlArrayAttribute on
diff --git a/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs b/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
index b7b154f57e4..40b577324d9 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
@@ -666,7 +666,9 @@ namespace System.Xml.Serialization
if (typeMap.TypeData.SchemaType == SchemaTypes.XmlSerializable)
{
- WriteLine ("WriteSerializable (ob, element, namesp, isNullable);");
+ WriteLine (String.Format ("WriteSerializable (ob, {0}, {1}, isNullable);",
+ typeMap.XmlType != null ? GetLiteral (typeMap.XmlType) : "element",
+ typeMap.XmlTypeNamespace != null ? GetLiteral (typeMap.XmlTypeNamespace) : "namesp"));
GenerateEndHook ();
WriteLineUni ("}");
@@ -2135,7 +2137,7 @@ namespace System.Xml.Serialization
return GetReadObjectCall (elem.MappedType, GetLiteral(elem.IsNullable), "true");
case SchemaTypes.XmlSerializable:
- return GetCast (elem.TypeData, String.Format ("ReadSerializable (({0}) Activator.CreateInstance(typeof({0}), true))", elem.TypeData.CSharpFullName));
+ return GetCast (elem.TypeData, String.Format ("({0}) ReadSerializable (({0}) Activator.CreateInstance(typeof({0}), true))", elem.TypeData.CSharpFullName));
default:
throw new NotSupportedException ("Invalid value type");
@@ -2431,7 +2433,7 @@ namespace System.Xml.Serialization
WriteLine ("if (Reader.NodeType == XmlNodeType.Element)");
WriteLineInd ("{");
WriteLine ("if (Reader.LocalName == " + GetLiteral (typeMap.ElementName) + " && Reader.NamespaceURI == " + GetLiteral (typeMap.Namespace) + ")");
- WriteLine (String.Format ("\treturn ReadSerializable (({0}) Activator.CreateInstance(typeof({0}), true));", typeMap.TypeData.CSharpFullName));
+ WriteLine (String.Format ("\treturn ({0}) ReadSerializable (({0}) Activator.CreateInstance(typeof({0}), true));", typeMap.TypeData.CSharpFullName));
WriteLine ("else");
WriteLine ("\tthrow CreateUnknownNodeException ();");
WriteLineUni ("}");
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriterInterpreter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriterInterpreter.cs
index bcb918281a5..29f7a61a53e 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriterInterpreter.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriterInterpreter.cs
@@ -116,7 +116,7 @@ namespace System.Xml.Serialization
if (typeMap.TypeData.SchemaType == SchemaTypes.XmlSerializable)
{
- WriteSerializable ((IXmlSerializable)ob, element, namesp, isNullable);
+ WriteSerializable ((IXmlSerializable)ob, typeMap.XmlType ?? element, typeMap.XmlTypeNamespace ?? namesp, isNullable);
return;
}
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
index ef45eca4f55..bbf222f03de 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
@@ -205,6 +205,13 @@ namespace System.Xml.Serialization
if (schemaProvider != null) {
string method = schemaProvider.MethodName;
MethodInfo mi = typeData.Type.GetMethod (method, BindingFlags.Static | BindingFlags.Public);
+ if (mi == null)
+ throw new InvalidOperationException (String.Format ("Type '{0}' must implement public static method '{1}'", typeData.Type, method));
+ if (!typeof (XmlQualifiedName).IsAssignableFrom (mi.ReturnType) &&
+ // LAMESPEC: it is undocumented. (We don't have to tell users about it in the error message.)
+ // Also do not add such a silly compatibility test to assert that it does not raise an error.
+ !typeof (XmlSchemaComplexType).IsAssignableFrom (mi.ReturnType))
+ throw new InvalidOperationException (String.Format ("Method '{0}' indicated by XmlSchemaProviderAttribute must have its return type as XmlQualifiedName", method));
XmlSchemaSet xs = new XmlSchemaSet ();
object retVal = mi.Invoke (null, new object [] { xs });
_schemaTypeName = XmlQualifiedName.Empty;