Ejemplo n.º 1
0
        private Type GetTargetType(XmlNode childNode, NetReflectorTypeTable table)
        {
            if ((attribute.InstanceTypeKey != null) &&
                (childNode.Attributes != null) &&
                (childNode.Attributes[attribute.InstanceTypeKey] != null))
            {
                XmlAttribute       instanceTypeAttribute = childNode.Attributes[attribute.InstanceTypeKey];
                IXmlTypeSerialiser serialiser            = table[instanceTypeAttribute.InnerText];
                if (serialiser == null)
                {
                    string msg = @"Type with NetReflector name ""{0}"" does not exist.  The name may be incorrect or the assembly containing the type might not be loaded.
Xml: {1}";
                    throw new NetReflectorException(string.Format(msg, instanceTypeAttribute.InnerText, childNode.OuterXml));
                }
                /// HACK: no way of indicating that attribute is InstanceTypeKey. If this is removed then attribute will generate warning.
                childNode.Attributes.Remove(instanceTypeAttribute);
                return(serialiser.Type);
            }
            else if (attribute.InstanceType != null)
            {
                return(attribute.InstanceType);
            }
            else
            {
                return(member.MemberType);
            }
        }
Ejemplo n.º 2
0
        private void GenerateSchemaElementForType(XmlSchema schema, IXmlTypeSerialiser serialiser)
        {
            XmlSchemaElement element = new XmlSchemaElement();

            element.Name           = serialiser.Attribute.Name;
            element.SchemaTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Type), NamespaceUri);
            schema.Items.Add(element);
        }
 public virtual void Write(XmlWriter writer, IXmlTypeSerialiser typeSerialiser)
 {
     writer.WriteStartElement("members");
     foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers)
     {
         writer.WriteStartElement("member");
         writer.WriteElementString("name", memberSerialiser.ReflectorMember.Name);
         writer.WriteElementString("reflectorName", memberSerialiser.Attribute.Name);
         XmlDocumentationGenerator.WriteIfNotNull(writer, "description", memberSerialiser.Attribute.Description);
         writer.WriteElementString("required", memberSerialiser.Attribute.Required.ToString());
         XmlDocumentationGenerator.WriteIfNotNull(writer, "instanceType", memberSerialiser.Attribute.InstanceType);
         XmlDocumentationGenerator.WriteIfNotNull(writer, "instanceTypeKey", memberSerialiser.Attribute.InstanceTypeKey);
         writer.WriteEndElement();
     }
     writer.WriteEndElement();
 }
		public virtual void Write(XmlWriter writer, IXmlTypeSerialiser typeSerialiser)
		{
			writer.WriteStartElement("members");
			foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers)
			{
				writer.WriteStartElement("member");
				writer.WriteElementString("name", memberSerialiser.ReflectorMember.Name);
				writer.WriteElementString("reflectorName", memberSerialiser.Attribute.Name);
				XmlDocumentationGenerator.WriteIfNotNull(writer, "description", memberSerialiser.Attribute.Description);
				writer.WriteElementString("required", memberSerialiser.Attribute.Required.ToString());
				XmlDocumentationGenerator.WriteIfNotNull(writer, "instanceType", memberSerialiser.Attribute.InstanceType);
				XmlDocumentationGenerator.WriteIfNotNull(writer, "instanceTypeKey", memberSerialiser.Attribute.InstanceTypeKey);
				writer.WriteEndElement();
			}
			writer.WriteEndElement();
		}
Ejemplo n.º 5
0
 private void FindBaseTypes(IXmlTypeSerialiser serialiser)
 {
     foreach (IXmlMemberSerialiser memberSerialiser in serialiser.MemberSerialisers)
     {
         var memberType = memberSerialiser.ReflectorMember.MemberType;
         if (memberType.IsArray)
         {
             memberType = memberType.GetElementType();
         }
         if (!ReflectionUtil.IsCommonType(memberType))
         {
             if (!baseTypes.Contains(memberType))
             {
                 baseTypes.Add(memberType);
             }
         }
     }
 }
Ejemplo n.º 6
0
        private XmlSchemaParticle GenerateSchemaElementsForMembers(IXmlTypeSerialiser typeSerialiser)
        {
            XmlSchemaAll group = new XmlSchemaAll();

            foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers)
            {
                var item = new XmlSchemaElement
                {
                    MaxOccurs = 1,
                    MinOccurs = memberSerialiser.Attribute.Required ? 1 : 0
                };
                AddDocumentation(memberSerialiser.Attribute.Description, item);
                item.Name = memberSerialiser.Attribute.Name;
                GenerateElementType(memberSerialiser.ReflectorMember.MemberType, item, memberSerialiser.Attribute.HasCustomFactory);
                group.Items.Add(item);
            }
            return(group);
        }
Ejemplo n.º 7
0
        private void GenerateComplexType(XmlSchema schema, IXmlTypeSerialiser serialiser)
        {
            XmlSchemaComplexType complexType = new XmlSchemaComplexType();

            complexType.Name = GenerateItemName(serialiser.Type);
            var particle = GenerateSchemaElementsForMembers(serialiser);

            if (serialiser.Attribute.Extends != null)
            {
                var extension = new XmlSchemaComplexContentExtension
                {
                    BaseTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Attribute.Extends), NamespaceUri),
                    Particle     = particle
                };
                complexType.ContentModel = new XmlSchemaComplexContent
                {
                    Content = extension
                };
                if (!baseTypes.Contains(serialiser.Attribute.Extends))
                {
                    baseTypes.Add(serialiser.Attribute.Extends);
                }
            }
            else
            {
                complexType.Particle = particle;
            }

            schema.Items.Add(complexType);
            if (baseTypes.Contains(serialiser.Type))
            {
                baseTypes.Remove(serialiser.Type);
            }
            loadedTypes.Add(serialiser.Type, new ReferencedType
            {
                Extends      = serialiser.Attribute.Extends,
                NamespaceUri = NamespaceUri,
                TypeName     = complexType.Name,
                ElementName  = serialiser.Attribute.Name,
                Description  = serialiser.Attribute.Description
            });
        }
        private Type GetTargetType(XmlNode childNode, NetReflectorTypeTable table)
        {
            // Attempt to find the type
            XmlAttribute typeAttribute = null;

            if ((attribute.InstanceTypeKey != null) && (childNode.Attributes != null))
            {
                typeAttribute = childNode.Attributes[attribute.InstanceTypeKey];

                // This is a special case - the element may be an abstract element (see XSD) and needs the xsi namespace
                if ((typeAttribute == null) && (attribute.InstanceTypeKey == "type"))
                {
                    typeAttribute = childNode.Attributes["type", "http://www.w3.org/2001/XMLSchema-instance"];
                }
            }

            if ((attribute.InstanceTypeKey != null) &&
                (childNode.Attributes != null) &&
                (typeAttribute != null))
            {
                IXmlTypeSerialiser serialiser = table[typeAttribute.InnerText];
                if (serialiser == null)
                {
                    string msg = @"Type with NetReflector name ""{0}"" does not exist.  The name may be incorrect or the assembly containing the type might not be loaded.
Xml: {1}";
                    throw new NetReflectorException(string.Format(msg, typeAttribute.InnerText, childNode.OuterXml));
                }
                /// HACK: no way of indicating that attribute is InstanceTypeKey. If this is removed then attribute will generate warning.
                childNode.Attributes.Remove(typeAttribute);
                return(serialiser.Type);
            }
            else if (attribute.InstanceType != null)
            {
                return(attribute.InstanceType);
            }
            else
            {
                return(member.MemberType);
            }
        }
Ejemplo n.º 9
0
 private void FindBaseTypes(IXmlTypeSerialiser serialiser)
 {
     foreach (IXmlMemberSerialiser memberSerialiser in serialiser.MemberSerialisers)
     {
         var memberType = memberSerialiser.ReflectorMember.MemberType;
         if (memberType.IsArray) memberType = memberType.GetElementType();
         if (!ReflectionUtil.IsCommonType(memberType))
         {
             if (!baseTypes.Contains(memberType)) baseTypes.Add(memberType);
         }
     }
 }
Ejemplo n.º 10
0
		private XmlSchemaParticle GenerateSchemaElementsForMembers(IXmlTypeSerialiser typeSerialiser)
		{
			XmlSchemaAll group = new XmlSchemaAll();
			foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers)
			{
                var item = new XmlSchemaElement
                {
                    MaxOccurs = 1,
                    MinOccurs = memberSerialiser.Attribute.Required ? 1 : 0
                };
                AddDocumentation(memberSerialiser.Attribute.Description, item);
				item.Name = memberSerialiser.Attribute.Name;
                GenerateElementType(memberSerialiser.ReflectorMember.MemberType, item, memberSerialiser.Attribute.HasCustomFactory);
				group.Items.Add(item);				
			}
			return group;
		}
Ejemplo n.º 11
0
        private void GenerateComplexType(XmlSchema schema, IXmlTypeSerialiser serialiser)
        {
			XmlSchemaComplexType complexType = new XmlSchemaComplexType();
            complexType.Name= GenerateItemName(serialiser.Type);
			var particle = GenerateSchemaElementsForMembers(serialiser);

            if (serialiser.Attribute.Extends != null)
            {
                var extension = new XmlSchemaComplexContentExtension
                {
                    BaseTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Attribute.Extends), NamespaceUri),
                    Particle = particle
                };
                complexType.ContentModel = new XmlSchemaComplexContent
                {
                    Content = extension
                };
                if (!baseTypes.Contains(serialiser.Attribute.Extends)) baseTypes.Add(serialiser.Attribute.Extends);
            }
            else
            {
                complexType.Particle = particle;
            }

			schema.Items.Add(complexType);
            if (baseTypes.Contains(serialiser.Type)) baseTypes.Remove(serialiser.Type);
            loadedTypes.Add(serialiser.Type, new ReferencedType
            {
                Extends = serialiser.Attribute.Extends,
                NamespaceUri = NamespaceUri,
                TypeName = complexType.Name,
                ElementName = serialiser.Attribute.Name,
                Description = serialiser.Attribute.Description
            });
		}
Ejemplo n.º 12
0
		private void GenerateSchemaElementForType(XmlSchema schema, IXmlTypeSerialiser serialiser)
		{
			XmlSchemaElement element = new XmlSchemaElement();
			element.Name = serialiser.Attribute.Name;
            element.SchemaTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Type), NamespaceUri);
			schema.Items.Add(element);
        }
 public override void Write(XmlWriter writer, IXmlTypeSerialiser typeSerialiser)
 {
     // do nothing
 }
			public override void Write(XmlWriter writer, IXmlTypeSerialiser typeSerialiser)
			{
				// do nothing
			}