public MenuItemLink(MenuItemData menuItem) { _menuItem = menuItem; OriginalPath = _menuItem.TargetAttribute.menuItem; OriginalName = OriginalPath; Key = OriginalPath.ToLower(); DeclaringType = menuItem.TargetMethod.DeclaringType; if (DeclaringType != null) { AssemlyFilePath = DeclaringType.Assembly.Location; AssemblyName = DeclaringType.Assembly.GetName().Name; IsUnityMenu = AssemblyName.Split('.')[0].Contains("Unity"); } IsContextMenu = Key.Substring(0, 7) == "context"; if (menuItem.TargetMethod.GetParameters().Length > 0) { var parameter = menuItem.TargetMethod.GetParameters()[0]; if (parameter.ParameterType == typeof(MenuCommand)) { _hasMenuCommandParameter = true; var startIndex = IsContextMenu ? 8 : 0; var endIndex = OriginalPath.IndexOf('/', startIndex + 1); _menuCommandContextType = OriginalPath.Substring(startIndex, endIndex - startIndex); } } }
private void ExtractMenuItem(MethodInfo method, Dictionary <string, MenuItemData> dict) { var items = method.GetCustomAttributes(typeof(MenuItem), false).Cast <MenuItem>().ToArray(); if (items.Length != 1) { return; } var key = items[0].menuItem; MenuItemData data; dict.TryGetValue(key, out data); if (data == null) { data = new MenuItemData(); dict.Add(key, data); } if (items[0].validate) { data.TargetAttributeValidate = items[0]; data.TargetMethodValidate = method; } else { data.TargetAttribute = items[0]; data.TargetMethod = method; } }