private static void InsertMenuFromAttributeIfNecessary(MenuItemsTree <MenuItemOrderingNative> menuTree, HashSet <string> addedMenuItemAttributes, MenuItemsTree <MenuItemScriptCommand> menuItems, string menuName, string currentPrefix, int priority, int parentPriority)
 {
     if (currentPrefix == "")
     {
         bool mustAddNow = false;
         if (menuName == null)
         {
             mustAddNow = true;
         }
         else
         {
             mustAddNow = menuName == k_WindowMenuName || menuName == k_HelpMenuName;
         }
         if (mustAddNow)
         {
             foreach (var menuPerMode in menuItems.menuItemChildrenSorted)
             {
                 if (!addedMenuItemAttributes.Contains(menuPerMode.name) &&
                     (menuName == null ||                                                                        // if there are no menus left we should add every menu item attributes that were not added
                      (!menuPerMode.name.StartsWith(k_HelpMenuName + "/") &&                                     // Creating a help menu from attribute should only happen if there are no menus left since Help is the last
                       !(menuName == k_WindowMenuName && menuPerMode.name.StartsWith(k_WindowMenuName + "/"))))) //Creating a window menu from attribute should happen when there are only Help or no menu left, so if the next is Window then we should not add window menu item
                 {
                     addedMenuItemAttributes.Add(menuPerMode.name);
                     menuTree.AddChildSearch(new MenuItemOrderingNative(menuPerMode.name, menuPerMode.name, menuPerMode.priority, menuPerMode.priority));
                 }
             }
         }
     }
     else
     {
         // find if there is a mode specific menu to insert at this position
         var menuItemTree = menuItems.FindTree(currentPrefix.Substring(0, currentPrefix.Length - 1));
         if (menuItemTree != null)
         {
             foreach (var menuPerMode in menuItemTree.menuItemChildrenSorted)
             {
                 if (!addedMenuItemAttributes.Contains(menuPerMode.name) &&
                     (menuPerMode.priority < priority || menuName == null))
                 {
                     addedMenuItemAttributes.Add(menuPerMode.name);
                     if (menuPerMode.name.Substring(currentPrefix.Length).Contains("/"))
                     {
                         menuTree.AddChildSearch(new MenuItemOrderingNative(menuPerMode.name, menuPerMode.name, menuPerMode.priority, menuPerMode.priority));
                     }
                     else
                     {
                         menuTree.AddChildSearch(new MenuItemOrderingNative(menuPerMode.name, menuPerMode.name, menuPerMode.priority, parentPriority));
                     }
                 }
             }
         }
     }
 }