From: Owen R. <exo...@us...> - 2005-04-07 04:30:49
|
Update of /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16181/src/NetReflector/Serialisers Modified Files: IXmlSerialiser.cs XmlArraySerialiser.cs XmlCollectionSerialiser.cs XmlDictionarySerialiser.cs XmlMemberSerialiser.cs XmlTypeSerialiser.cs Log Message: NETREF-3: NetReflector now generates warning events if the configuration xml contains unused nodes. Index: XmlDictionarySerialiser.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers/XmlDictionarySerialiser.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** XmlDictionarySerialiser.cs 7 Mar 2005 05:46:06 -0000 1.3 --- XmlDictionarySerialiser.cs 7 Apr 2005 04:30:40 -0000 1.4 *************** *** 46,50 **** } ! public override object Read(XmlNode node, Type instanceType, NetReflectorTypeTable table) { IDictionary dictionary = Instantiator.Instantiate(instanceType) as IDictionary; --- 46,50 ---- } ! protected override object Read(XmlNode node, Type instanceType, NetReflectorTypeTable table) { IDictionary dictionary = Instantiator.Instantiate(instanceType) as IDictionary; Index: XmlMemberSerialiser.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers/XmlMemberSerialiser.cs,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** XmlMemberSerialiser.cs 7 Mar 2005 05:46:06 -0000 1.8 --- XmlMemberSerialiser.cs 7 Apr 2005 04:30:40 -0000 1.9 *************** *** 29,32 **** --- 29,37 ---- } + protected IInstantiator Instantiator + { + get { return instantiator; } + } + public virtual void Write(XmlWriter writer, object target) { *************** *** 78,87 **** } - public IInstantiator Instantiator - { - get { return instantiator; } - set { instantiator = value; } - } - private void CheckIfMemberIsRequired() { --- 83,86 ---- *************** *** 97,108 **** if (attribute.InstanceTypeKey != null && childNode.Attributes[attribute.InstanceTypeKey] != null) { ! XmlNode typeNode = childNode.Attributes[attribute.InstanceTypeKey]; ! IXmlTypeSerialiser serialiser = table[typeNode.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, typeNode.InnerText, childNode.OuterXml)); } return serialiser.Type; } --- 96,109 ---- if (attribute.InstanceTypeKey != 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; } *************** *** 117,121 **** } ! public virtual object Read(XmlNode childNode, Type instanceType, NetReflectorTypeTable table) { if (ReflectionUtil.IsCommonType(instanceType)) --- 118,122 ---- } ! protected virtual object Read(XmlNode childNode, Type instanceType, NetReflectorTypeTable table) { if (ReflectionUtil.IsCommonType(instanceType)) Index: XmlCollectionSerialiser.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers/XmlCollectionSerialiser.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** XmlCollectionSerialiser.cs 7 Mar 2005 05:46:06 -0000 1.3 --- XmlCollectionSerialiser.cs 7 Apr 2005 04:30:40 -0000 1.4 *************** *** 9,15 **** public class XmlCollectionSerialiser : XmlMemberSerialiser { ! public XmlCollectionSerialiser(MemberInfo member, ReflectorPropertyAttribute attribute) : base(member, attribute) { } ! private string elementName = "string"; protected override void WriteValue(XmlWriter writer, object value) --- 9,15 ---- public class XmlCollectionSerialiser : XmlMemberSerialiser { ! private static readonly string elementName = "string"; ! public XmlCollectionSerialiser(MemberInfo member, ReflectorPropertyAttribute attribute) : base(member, attribute) { } protected override void WriteValue(XmlWriter writer, object value) *************** *** 34,38 **** /// Todo: convert to element type ! public override object Read(XmlNode node, Type instanceType, NetReflectorTypeTable table) { IList list = Instantiator.Instantiate(instanceType) as IList; --- 34,38 ---- /// Todo: convert to element type ! protected override object Read(XmlNode node, Type instanceType, NetReflectorTypeTable table) { IList list = Instantiator.Instantiate(instanceType) as IList; Index: XmlTypeSerialiser.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers/XmlTypeSerialiser.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** XmlTypeSerialiser.cs 7 Mar 2005 05:46:06 -0000 1.4 --- XmlTypeSerialiser.cs 7 Apr 2005 04:30:40 -0000 1.5 *************** *** 1,7 **** - using Exortech.NetReflector.Util; using System; using System.Collections; using System.Reflection; using System.Xml; namespace Exortech.NetReflector --- 1,8 ---- using System; using System.Collections; + using System.Collections.Specialized; using System.Reflection; using System.Xml; + using Exortech.NetReflector.Util; namespace Exortech.NetReflector *************** *** 14,22 **** private IInstantiator instantiator; ! public XmlTypeSerialiser(Type type, ReflectorTypeAttribute attribute) { this.type = type; this.attribute = attribute; ! this.instantiator = new DefaultInstantiator(); } --- 15,26 ---- private IInstantiator instantiator; ! public XmlTypeSerialiser(Type type, ReflectorTypeAttribute attribute) : this(type, attribute, new DefaultInstantiator()) ! {} ! ! public XmlTypeSerialiser(Type type, ReflectorTypeAttribute attribute, IInstantiator instantiator) { this.type = type; this.attribute = attribute; ! this.instantiator = instantiator; } *************** *** 31,34 **** --- 35,43 ---- } + public IInstantiator Instantiator + { + get { return instantiator; } + } + public IXmlMemberSerialiser[] MemberSerialisers { *************** *** 79,93 **** } - public IInstantiator Instantiator - { - get { return instantiator; } - set { instantiator = value; } - } - public void ReadMembers(XmlNode node, object instance, NetReflectorTypeTable table) { foreach (IXmlMemberSerialiser serialiser in MemberSerialisers) { ! XmlNode childNode = XmlUtil.GetChildNode(node, serialiser.Attribute.Name); object value = serialiser.Read(childNode, table); if (value != null) --- 88,103 ---- } public void ReadMembers(XmlNode node, object instance, NetReflectorTypeTable table) { + IDictionary childNodes = new ListDictionary(); + foreach (XmlNode attribute in node.Attributes) + childNodes[attribute.Name] = attribute; + + foreach (XmlNode childNode in node.ChildNodes) // check for duplicates + childNodes[childNode.Name] = childNode; + foreach (IXmlMemberSerialiser serialiser in MemberSerialisers) { ! XmlNode childNode = (XmlNode) childNodes[serialiser.Attribute.Name]; object value = serialiser.Read(childNode, table); if (value != null) *************** *** 95,100 **** serialiser.SetValue(instance, value); } } } } ! } --- 105,114 ---- serialiser.SetValue(instance, value); } + childNodes.Remove(serialiser.Attribute.Name); } + + foreach (XmlNode orphan in childNodes.Values) + table.OnUnusedNode(orphan); } } ! } \ No newline at end of file Index: IXmlSerialiser.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers/IXmlSerialiser.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** IXmlSerialiser.cs 7 Mar 2005 05:46:06 -0000 1.4 --- IXmlSerialiser.cs 7 Apr 2005 04:30:39 -0000 1.5 *************** *** 1,4 **** using System.Xml; - using Exortech.NetReflector.Util; namespace Exortech.NetReflector --- 1,3 ---- *************** *** 8,13 **** void Write(XmlWriter writer, object target); object Read(XmlNode node, NetReflectorTypeTable table); - - IInstantiator Instantiator { set; get; } } ! } --- 7,10 ---- void Write(XmlWriter writer, object target); object Read(XmlNode node, NetReflectorTypeTable table); } ! } \ No newline at end of file Index: XmlArraySerialiser.cs =================================================================== RCS file: /cvsroot/netreflector/NetReflector/src/NetReflector/Serialisers/XmlArraySerialiser.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** XmlArraySerialiser.cs 16 Nov 2004 04:41:19 -0000 1.3 --- XmlArraySerialiser.cs 7 Apr 2005 04:30:40 -0000 1.4 *************** *** 15,19 **** } ! public override object Read(XmlNode node, Type instanceType, NetReflectorTypeTable table) { Type elementType = instanceType.GetElementType(); --- 15,19 ---- } ! protected override object Read(XmlNode node, Type instanceType, NetReflectorTypeTable table) { Type elementType = instanceType.GetElementType(); |