private void PopulateCachedActionDefs()

in src/dotnet/JetBrains.PresentationAssistant/VisualStudio/VsCommandShortcutProvider.cs [85:119]


        private void PopulateCachedActionDefs()
        {
            var menuBar = Logger.CatchSilent(() => ((CommandBars) dte.CommandBars)["MenuBar"]);
            if (menuBar != null)
            {
                var compoundException = new CompoundException();

                var enumDescendantControls = menuBar.EnumDescendantControls(compoundException).ToList();
                foreach (var tuple in enumDescendantControls)
                {
                    // Make sure it's an actionable type (e.g. not a CommandBarPopup, or _CommandBarActiveX)
                    var commandBarControl = tuple.Item1;
                    if (commandBarControl is CommandBarButton || commandBarControl is CommandBarComboBox)
                    {
                        var commandId = VsCommandHelpersTodo.TryGetVsControlCommandID(commandBarControl, dte);
                        if (commandId == null)
                            continue;

                        // Breadth first enumeration of descendant controls means the first time a command is encountered
                        // is always the shortest path to a control for that command
                        var actionId = vsCmdNameMapping.TryMapCommandIdToVsCommandName(commandId);
                        if (string.IsNullOrEmpty(actionId) || cachedActionDefs.ContainsKey(actionId))
                            continue;

                        var commandBarPopups = tuple.Item2;
                        var def = new CommandBarActionDef(vsShortcutFinder, dte, actionId, commandId, commandBarControl,
                            commandBarPopups ?? EmptyArray<CommandBarPopup>.Instance);
                        cachedActionDefs.Add(actionId, def);
                    }
                }

                if (compoundException.Exceptions.Any())
                    Logger.LogException(compoundException);
            }
        }