Пример #1
0
        /// <summary>
        /// This is used to add the attached property or event data to the added members
        /// </summary>
        /// <param name="writer">The reflection data XML writer</param>
        /// <param name="info">For this callback, this is the potential attached event or property member</param>
        private void WriteAttachmentData(XmlWriter writer, object info)
        {
            if (attachedMembers.ContainsKey(info))
            {
                Member attachedMember = (Member)info;

                if (attachedMember.NodeType == NodeType.Property)
                {
                    Property attachedProperty = (Property)attachedMember;

                    writer.WriteStartElement("attachedpropertydata");

                    string fieldName = attachedMember.Name + "Property";

                    Field field = attachedMember.DeclaringType.GetField(new Identifier(fieldName));

                    writer.WriteStartElement("field");
                    mrw.WriteMemberReference(field);
                    writer.WriteEndElement();

                    Method getter = attachedProperty.Getter;

                    if (getter != null)
                    {
                        writer.WriteStartElement("getter");
                        mrw.WriteMemberReference(getter);
                        writer.WriteEndElement();
                    }

                    Method setter = attachedProperty.Setter;

                    if (setter != null)
                    {
                        writer.WriteStartElement("setter");
                        mrw.WriteMemberReference(setter);
                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement();
                }
                else
                if (attachedMember.NodeType == NodeType.Event)
                {
                    Event attachedEvent = (Event)attachedMember;

                    writer.WriteStartElement("attachedeventdata");

                    string fieldName = attachedMember.Name + "Event";

                    Field field = attachedMember.DeclaringType.GetField(new Identifier(fieldName));

                    writer.WriteStartElement("field");
                    mrw.WriteMemberReference(field);
                    writer.WriteEndElement();

                    Method adder = attachedEvent.HandlerAdder;

                    writer.WriteStartElement("adder");
                    mrw.WriteMemberReference(adder);
                    writer.WriteEndElement();

                    Method remover = attachedEvent.HandlerRemover;

                    writer.WriteStartElement("remover");
                    mrw.WriteMemberReference(remover);
                    writer.WriteEndElement();

                    writer.WriteEndElement();
                }
            }
        }