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);
}
}