private IEnumerable <ToolStripMenuItem> CreateTree(IEnumerable <TAdapter> adapters)
        {
            var result = new List <ToolStripMenuItem>();

            foreach (var adapter in adapters)
            {
                var attr = adapter.GetType().GetCustomAttributes(typeof(MenuStripExtensionAttribute), false).Cast <MenuStripExtensionAttribute>().FirstOrDefault();

                var ignoreEnc = adapter.GetType().GetCustomAttributes(typeof(IgnoreEncryptionAttribute), false).Any();
                var ignoreDec = adapter.GetType().GetCustomAttributes(typeof(IgnoreDecryptionAttribute), false).Any();

                if (ignoreDec && ignoreEnc)
                {
                    continue;
                }

                if (attr == null)
                {
                    var nodeItem = result.FirstOrDefault(x => x.Name == "Others");
                    if (nodeItem == null)
                    {
                        nodeItem = new ToolStripMenuItem("Others");
                        result.Add(nodeItem);
                    }

                    var cipherItem = new ToolStripMenuItem(adapter.Name);
                    _addItemDelegates(cipherItem, adapter, ignoreDec, ignoreEnc);

                    nodeItem.DropDownItems.Add(cipherItem);
                }
                else
                {
                    ToolStripItemCollection items        = null;
                    ToolStripMenuItem       internalItem = null;

                    foreach (var strip in attr.Strips)
                    {
                        if (items == null)
                        {
                            internalItem = result.FirstOrDefault(x => x.Name == strip);
                        }
                        else
                        {
                            var index = items.IndexByName(strip);
                            if (index < 0)
                            {
                                internalItem = null;
                            }
                            else
                            {
                                internalItem = items[index] as ToolStripMenuItem;
                            }
                        }

                        if (internalItem == null)
                        {
                            internalItem = new ToolStripMenuItem(strip)
                            {
                                Name = strip
                            };
                            if (items == null)
                            {
                                result.Add(internalItem);
                            }
                            else
                            {
                                items.Add(internalItem);
                            }
                        }

                        items = internalItem.DropDownItems;
                    }

                    _addItemDelegates(internalItem, adapter, ignoreDec, ignoreEnc);
                }
            }

            return(result);
        }