EventMemberCodeDomSerializer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / CompMod / System / ComponentModel / Design / Serialization / EventMemberCodeDomSerializer.cs / 1 / EventMemberCodeDomSerializer.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 
namespace System.ComponentModel.Design.Serialization {
 
    using System; 
    using System.CodeDom;
    using System.ComponentModel.Design; 
    using System.Design;
    using System.Diagnostics;
    using System.Reflection;
 
    /// 
    ///    A MemberCodeDomSerializer for events. 
    ///  
    internal sealed class EventMemberCodeDomSerializer : MemberCodeDomSerializer {
 
        private static CodeThisReferenceExpression _thisRef = new CodeThisReferenceExpression();
        private static EventMemberCodeDomSerializer _default;

        internal static EventMemberCodeDomSerializer Default { 
            get {
                if (_default == null) _default = new EventMemberCodeDomSerializer(); 
 
                return _default;
            } 
        }

        /// 
        ///    This method actually performs the serialization.  When the member is serialized 
        ///    the necessary statements will be added to the statements collection.
        ///  
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2102:CatchNonClsCompliantExceptionsInGeneralHandlers")] 
        public override void Serialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor, CodeStatementCollection statements) {
            EventDescriptor eventToSerialize = descriptor as EventDescriptor; 

            if (manager == null)              throw new ArgumentNullException("manager");
            if (value == null)                throw new ArgumentNullException("value");
            if (eventToSerialize == null) throw new ArgumentNullException("descriptor"); 
            if (statements == null) throw new ArgumentNullException("statements");
 
            try { 
                IEventBindingService eventBindings = (IEventBindingService)manager.GetService(typeof(IEventBindingService));
 
                // VSWhidbey 204574: If the IEventBindingService is not available, we don't throw - we just don't do
                // anything.
                if (eventBindings != null) {
                    PropertyDescriptor prop = eventBindings.GetEventProperty(eventToSerialize); 
                    string methodName = (string)prop.GetValue(value);
 
                    if (methodName != null) { 
                        CodeDomSerializer.Trace("Event {0} bound to {1}", eventToSerialize.Name, methodName);
                        CodeExpression eventTarget = SerializeToExpression(manager, value); 
                        CodeDomSerializer.TraceWarningIf(eventTarget == null, "Object has no name and no propery ref in context so we cannot serialize events: {0}", value);
                        if (eventTarget != null) {
                            CodeTypeReference delegateTypeRef = new CodeTypeReference(eventToSerialize.EventType);
                            CodeDelegateCreateExpression delegateCreate = new CodeDelegateCreateExpression(delegateTypeRef, _thisRef, methodName); 
                            CodeEventReferenceExpression eventRef = new CodeEventReferenceExpression(eventTarget, eventToSerialize.Name);
                            CodeAttachEventStatement attach = new CodeAttachEventStatement(eventRef, delegateCreate); 
 
                            attach.UserData[typeof(Delegate)] = eventToSerialize.EventType;
                            statements.Add(attach); 
                        }
                    }
                }
            } 
            catch (Exception e) {
                // Since we usually go through reflection, don't 
                // show what our engine does, show what caused 
                // the problem.
                // 
                if (e is TargetInvocationException) {
                    e = e.InnerException;
                }
 
                manager.ReportError(SR.GetString(SR.SerializerPropertyGenFailed, eventToSerialize.Name, e.Message));
            } 
        } 

        ///  
        ///    This method returns true if the given member descriptor should be serialized,
        ///    or false if there is no need to serialize the member.
        /// 
        public override bool ShouldSerialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor) { 
            return true;
        } 
 	} 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK