Akka.Interfaced.MessageHandlerBuilder.AddHandler C# (CSharp) Method

AddHandler() private method

private AddHandler ( MethodInfo method, Type messageType, FilterChain filterChain, bool isSyncHandler, bool isReentrant ) : void
method System.Reflection.MethodInfo
messageType System.Type
filterChain FilterChain
isSyncHandler bool
isReentrant bool
return void
        private void AddHandler(MethodInfo method, Type messageType, FilterChain filterChain, bool isSyncHandler, bool isReentrant)
        {
            if (method.IsGenericMethod == false)
            {
                if (isSyncHandler)
                {
                    var item = new MessageHandlerItem
                    {
                        IsReentrant = isReentrant,
                        Handler = BuildHandler(_type, messageType, method, filterChain)
                    };
                    _table.Add(messageType, item);
                }
                else
                {
                    var item = new MessageHandlerItem
                    {
                        IsReentrant = isReentrant,
                        AsyncHandler = BuildAsyncHandler(_type, messageType, method, filterChain)
                    };
                    _table.Add(messageType, item);
                }
            }
            else
            {
                // because a generic method needs parameter types to construct handler
                // so factory method is built to generate the handler when paramter types are ready

                var defType = messageType.GetGenericTypeDefinition();

                if (isSyncHandler)
                {
                    _table.Add(defType, new MessageHandlerItem
                    {
                        IsReentrant = isReentrant,
                        IsGeneric = true,
                        GenericHandlerBuilder = t => new MessageHandlerItem
                        {
                            IsReentrant = isReentrant,
                            Handler = BuildGenericHandler(_type, t, method, filterChain)
                        }
                    });
                }
                else
                {
                    _table.Add(defType, new MessageHandlerItem
                    {
                        IsReentrant = isReentrant,
                        IsGeneric = true,
                        GenericHandlerBuilder = t => new MessageHandlerItem
                        {
                            IsReentrant = isReentrant,
                            AsyncHandler = BuildGenericAsyncHandler(_type, t, method, filterChain)
                        }
                    });
                }
            }
        }