* MapCodeGenerator.cs: When the Object type is exported, export all
authorLluis Sanchez <lluis@novell.com>
Thu, 30 Sep 2004 20:56:52 +0000 (20:56 -0000)
committerLluis Sanchez <lluis@novell.com>
Thu, 30 Sep 2004 20:56:52 +0000 (20:56 -0000)
  derived maps. This was done in IncludeMetadata, but this method is
  not called by the xsd tool.
* XmlCodeExporter.cs: In AddMappingMetadata, only generate the root
  attribute for primitive types and arrays.
* XmlSchemaImporter.cs: Only export all object-derived maps if the
  Object type is explicitly referenced by an element.
* XmlSerializationWriter.cs: Minor fix.

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

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/MapCodeGenerator.cs
mcs/class/System.XML/System.Xml.Serialization/XmlCodeExporter.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationWriter.cs

index 5cd3adb0a3cdd385821626a6d9e712cdcf246c6d..46fad5b6388f11ae5b532d4e8000a807657bf7a4 100755 (executable)
@@ -1,3 +1,14 @@
+2004-10-01  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * MapCodeGenerator.cs: When the Object type is exported, export all
+         derived maps. This was done in IncludeMetadata, but this method is
+         not called by the xsd tool.
+       * XmlCodeExporter.cs: In AddMappingMetadata, only generate the root
+         attribute for primitive types and arrays.
+       * XmlSchemaImporter.cs: Only export all object-derived maps if the
+         Object type is explicitly referenced by an element.
+       * XmlSerializationWriter.cs: Minor fix.
+
 2004-09-28  Lluis Sanchez Gual  <lluis@novell.com>
 
        * CodeIdentifier.cs: MakeValid now returns "Item" for an empty string.
index e58941f132ca45f425abd51d18d3df12f7956055..21b161f9bd71b8f4c24e74693ae7cc680bfbc47f 100644 (file)
@@ -71,19 +71,8 @@ namespace System.Xml.Serialization {
                                if (includeMetadata != null) return includeMetadata;
                                includeMetadata = new CodeAttributeDeclarationCollection ();
                                
-                               if (exportedAnyType != null)
-                               {
-                                       foreach (XmlTypeMapping map in exportedAnyType.DerivedTypes) 
-                                       {
-                                               if (IsMapExported (map) || !map.IncludeInSchema) continue;
-                                               ExportTypeMapping (map);
-                                               GenerateClassInclude (includeMetadata, map);
-                                       }
-                               }
-                               else {
-                                       foreach (XmlTypeMapping map in includeMaps.Values)
-                                               GenerateClassInclude (includeMetadata, map);
-                               }
+                               foreach (XmlTypeMapping map in includeMaps.Values)
+                                       GenerateClassInclude (includeMetadata, map);
                                
                                return includeMetadata; 
                        }
@@ -146,6 +135,11 @@ namespace System.Xml.Serialization {
                        {
                                exportedAnyType = map;
                                SetMapExported (map, null);
+                               foreach (XmlTypeMapping dmap in exportedAnyType.DerivedTypes) {
+                                       if (IsMapExported (dmap) || !dmap.IncludeInSchema) continue;
+                                       ExportTypeMapping (dmap);
+                                       AddInclude (dmap);
+                               }
                                return;
                        }
                        
index 233c20fb9ea231df5a7447e37186948ead242883..a2dbb2242182a82e367338900365df00a6fcf3dd 100644 (file)
@@ -126,7 +126,10 @@ namespace System.Xml.Serialization
 \r
                public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlTypeMapping member, string ns)\r
                {
-                       if (member.Namespace != ns && member.Namespace != "") {\r
+                       if ( (member.TypeData.SchemaType == SchemaTypes.Primitive ||\r
+                             member.TypeData.SchemaType == SchemaTypes.Array) \r
+                               && member.Namespace != XmlSchema.Namespace)\r
+                       {\r
                                CodeAttributeDeclaration ratt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlRoot");\r
                                ratt.Arguments.Add (MapCodeGenerator.GetArg (member.ElementName));\r
                                ratt.Arguments.Add (MapCodeGenerator.GetArg ("Namespace", member.Namespace));\r
index 76844b21fce10b0709f0a248540afaf55a892c20..a451a90b6eb5e8014e593e6ae0ef2888801ba072 100644 (file)
@@ -53,6 +53,7 @@ namespace System.Xml.Serialization
                XmlReflectionImporter auxXmlRefImporter;\r
                SoapReflectionImporter auxSoapRefImporter;\r
                CodeGenerationOptions options;\r
+               bool anyTypeImported;\r
 \r
                static readonly XmlQualifiedName anyType = new XmlQualifiedName ("anyType",XmlSchema.Namespace);\r
                static readonly XmlQualifiedName arrayType = new XmlQualifiedName ("Array",XmlSerializer.EncodingNamespace);\r
@@ -603,7 +604,7 @@ namespace System.Xml.Serialization
                        ImportAttributes (typeQName, cmap, stype.Attributes, stype.AnyAttribute, classIds);\r
                        ImportExtensionTypes (typeQName);\r
                        \r
-                       GetTypeMapping (TypeTranslator.GetTypeData (typeof(object))).DerivedTypes.Add (map);\r
+                       AddObjectDerivedMap (map);\r
                }\r
                \r
                void ImportAttributes (XmlQualifiedName typeQName, ClassMap cmap, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat, CodeIdentifiers classIds)\r
@@ -1595,10 +1596,13 @@ namespace System.Xml.Serialization
 \r
                XmlTypeMapping GetTypeMapping (TypeData typeData)\r
                {\r
+                       if (typeData.Type == typeof(object) && !anyTypeImported)\r
+                               ImportAllObjectTypes ();\r
+                               \r
                        XmlTypeMapping map = (XmlTypeMapping) dataMappedTypes [typeData];\r
                        if (map != null) return map;\r
                        \r
-                       if (map == null && typeData.IsListType)\r
+                       if (typeData.IsListType)\r
                        {\r
                                // Create an array map for the type\r
 \r
@@ -1618,31 +1622,46 @@ namespace System.Xml.Serialization
                        }\r
                        else if (typeData.SchemaType == SchemaTypes.Primitive || typeData.Type == typeof(object) || typeof(XmlNode).IsAssignableFrom(typeData.Type))\r
                        {\r
-                               map = new XmlTypeMapping (typeData.XmlType, XmlSchema.Namespace, typeData, typeData.XmlType, XmlSchema.Namespace);\r
-                               map.IncludeInSchema = false;\r
-                               map.ObjectMap = new ClassMap ();\r
-                               dataMappedTypes [typeData] = map;\r
-                               \r
-                               if (typeData.Type == typeof(object))\r
-                               {\r
-                                       // All complex types are subtypes of anyType, so all of them \r
-                                       // must also be imported\r
-                                       \r
-                                       foreach (XmlSchema schema in schemas) {\r
-                                               foreach (XmlSchemaObject sob in schema.Items) \r
-                                               {\r
-                                                       XmlSchemaComplexType sct = sob as XmlSchemaComplexType;\r
-                                                       if (sct != null)\r
-                                                               ImportType (new XmlQualifiedName (sct.Name, schema.TargetNamespace), sct, null);\r
-                                               }\r
-                                       }                                       \r
-                               }\r
-                               \r
-                               return map;\r
+                               return CreateSystemMap (typeData);\r
                        }\r
                        \r
                        throw new InvalidOperationException ("Map for type " + typeData.TypeName + " not found");\r
                }\r
+               \r
+               void AddObjectDerivedMap (XmlTypeMapping map)\r
+               {\r
+                       TypeData typeData = TypeTranslator.GetTypeData (typeof(object));\r
+                       XmlTypeMapping omap = (XmlTypeMapping) dataMappedTypes [typeData];\r
+                       if (omap == null)\r
+                               omap = CreateSystemMap (typeData);\r
+                       omap.DerivedTypes.Add (map);\r
+               }\r
+               \r
+               XmlTypeMapping CreateSystemMap (TypeData typeData)\r
+               {\r
+                       XmlTypeMapping map = new XmlTypeMapping (typeData.XmlType, XmlSchema.Namespace, typeData, typeData.XmlType, XmlSchema.Namespace);\r
+                       map.IncludeInSchema = false;\r
+                       map.ObjectMap = new ClassMap ();\r
+                       dataMappedTypes [typeData] = map;\r
+                       return map;\r
+               }\r
+               \r
+               void ImportAllObjectTypes ()\r
+               {\r
+                       // All complex types are subtypes of anyType, so all of them \r
+                       // must also be imported\r
+                       \r
+                       anyTypeImported = true;\r
+                       foreach (XmlSchema schema in schemas) {\r
+                               foreach (XmlSchemaObject sob in schema.Items) \r
+                               {\r
+                                       XmlSchemaComplexType sct = sob as XmlSchemaComplexType;\r
+                                       if (sct != null)\r
+                                               ImportType (new XmlQualifiedName (sct.Name, schema.TargetNamespace), sct, null);\r
+                               }\r
+                       }                                       \r
+               }\r
+               \r
 \r
                XmlTypeMapping GetRegisteredTypeMapping (XmlQualifiedName typeQName)\r
                {\r
index b8676f67e4d35f1ddf7f487f3bcf053813f821ed..ce6f45c03abee45d8e3fa35951f89257b2de8a20 100644 (file)
@@ -78,7 +78,7 @@ namespace System.Xml.Serialization
                        {
                                namespaces = new ArrayList ();
                                foreach (XmlQualifiedName ns in nss.ToArray())
-                                       if (ns.Name != "")
+                                       if (ns.Name != "" && ns.Namespace != "")
                                                namespaces.Add (ns);
                        }       
                }