public IAsyncQuickInfoSource TryCreateQuickInfoSource(ITextBuffer textBuffer) { // This ensures only one instance per textbuffer is created return(textBuffer.Properties.GetOrCreateSingletonProperty(() => { ITextStructureNavigator textStructureNavigator = TextStructureNavigatorSelector.GetTextStructureNavigator(textBuffer); DTE2 dte = (DTE2)ServiceProvider.GetService(typeof(SDTE)); Debugger5 debugger = dte?.Debugger as Debugger5; return new LuaDataTipsSourceSource(textBuffer, textStructureNavigator, debugger); })); }
/// <summary> /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initialization code that rely on services provided by VisualStudio. /// </summary> /// <param name="cancellationToken">A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down.</param> /// <param name="progress">A provider for progress updates.</param> /// <returns>A task representing the async work of package initialization, or an already completed task if there is none. Do not return null from this method.</returns> protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress) { // When initialized asynchronously, the current thread may be a background thread at this point. // Do any initialization that requires the UI thread after switching to the UI thread. await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); try { SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider); configurationSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); configurationSettingsStore.CreateCollection("LuaDkmDebugger"); attachOnLaunch = configurationSettingsStore.GetBoolean("LuaDkmDebugger", "AttachOnLaunch", true); breakOnError = configurationSettingsStore.GetBoolean("LuaDkmDebugger", "BreakOnError", true); releaseDebugLogs = configurationSettingsStore.GetBoolean("LuaDkmDebugger", "ReleaseDebugLogs", false); showHiddenFrames = configurationSettingsStore.GetBoolean("LuaDkmDebugger", "ShowHiddenFrames", false); useSchema = configurationSettingsStore.GetBoolean("LuaDkmDebugger", "UseSchema", false); LuaDkmDebuggerComponent.LocalComponent.attachOnLaunch = attachOnLaunch; LuaDkmDebuggerComponent.LocalComponent.breakOnError = breakOnError; LuaDkmDebuggerComponent.LocalComponent.releaseDebugLogs = releaseDebugLogs; LuaDkmDebuggerComponent.LocalComponent.showHiddenFrames = showHiddenFrames; LuaDkmDebuggerComponent.LocalComponent.useSchema = useSchema; } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Failed to setup setting with " + e.Message); } OleMenuCommandService commandService = ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (commandService != null) { { CommandID menuCommandID = new CommandID(CommandSet, LuaInitializeCommandId); OleMenuCommand menuItem = new OleMenuCommand((object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Visible = false; } }, menuCommandID); menuItem.BeforeQueryStatus += (object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Visible = false; } }; menuItem.Visible = false; commandService.AddCommand(menuItem); } { CommandID menuCommandID = new CommandID(CommandSet, LuaAttachOnLaunchCommandId); OleMenuCommand menuItem = new OleMenuCommand((object sender, EventArgs args) => { HandleToggleMenuItem(sender, args, "AttachOnLaunch", ref LuaDkmDebuggerComponent.LocalComponent.attachOnLaunch, ref attachOnLaunch); }, menuCommandID); menuItem.BeforeQueryStatus += (object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Checked = attachOnLaunch; } }; menuItem.Enabled = true; menuItem.Checked = attachOnLaunch; commandService.AddCommand(menuItem); } { CommandID menuCommandID = new CommandID(CommandSet, LuaBreakOnErrorCommandId); OleMenuCommand menuItem = new OleMenuCommand((object sender, EventArgs args) => { HandleToggleMenuItem(sender, args, "BreakOnError", ref LuaDkmDebuggerComponent.LocalComponent.breakOnError, ref breakOnError); }, menuCommandID); menuItem.BeforeQueryStatus += (object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Checked = breakOnError; } }; menuItem.Enabled = true; menuItem.Checked = breakOnError; commandService.AddCommand(menuItem); } { CommandID menuCommandID = new CommandID(CommandSet, LoggingCommandId); OleMenuCommand menuItem = new OleMenuCommand((object sender, EventArgs args) => { HandleToggleMenuItem(sender, args, "ReleaseDebugLogs", ref LuaDkmDebuggerComponent.LocalComponent.releaseDebugLogs, ref releaseDebugLogs); }, menuCommandID); menuItem.BeforeQueryStatus += (object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Checked = releaseDebugLogs; } }; menuItem.Enabled = true; menuItem.Checked = releaseDebugLogs; commandService.AddCommand(menuItem); } { CommandID menuCommandID = new CommandID(CommandSet, LuaShowHiddenFramesCommandId); OleMenuCommand menuItem = new OleMenuCommand((object sender, EventArgs args) => { HandleToggleMenuItem(sender, args, "ShowHiddenFrames", ref LuaDkmDebuggerComponent.LocalComponent.showHiddenFrames, ref showHiddenFrames); }, menuCommandID); menuItem.BeforeQueryStatus += (object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Checked = showHiddenFrames; } }; menuItem.Enabled = true; menuItem.Checked = showHiddenFrames; commandService.AddCommand(menuItem); } { CommandID menuCommandID = new CommandID(CommandSet, LuaUseSchemaCommandId); OleMenuCommand menuItem = new OleMenuCommand((object sender, EventArgs args) => { HandleToggleMenuItem(sender, args, "UseSchema", ref LuaDkmDebuggerComponent.LocalComponent.useSchema, ref useSchema); }, menuCommandID); menuItem.BeforeQueryStatus += (object sender, EventArgs args) => { if (sender is OleMenuCommand command) { command.Checked = useSchema; } }; menuItem.Enabled = true; menuItem.Checked = useSchema; commandService.AddCommand(menuItem); } { CommandID menuCommandID = new CommandID(CommandSet, LuaShowScriptListCommandId); MenuCommand menuItem = new MenuCommand((object sender, EventArgs args) => { JoinableTaskFactory.RunAsync(async() => { ToolWindowPane window = await ShowToolWindowAsync( typeof(ScriptListWindow), 0, create: true, cancellationToken: DisposalToken); }); }, menuCommandID); commandService.AddCommand(menuItem); } } try { DTE2 dte = (DTE2)ServiceProvider.GetService(typeof(SDTE)); scriptListWindowState.dte = dte; Debugger5 debugger = dte?.Debugger as Debugger5; var debuggerEventHandler = new LuaDebuggerEventHandler(this, debugger); ServiceContainer.AddService(debuggerEventHandler.GetType(), debuggerEventHandler, promote: true); } catch (Exception e) { Debug.WriteLine("Failed to setup debuggerEventHandler with " + e.Message); } }
public LuaDebuggerEventHandler(LuaDkmDebuggerPackage package, Debugger5 debugger) { this.package = package; this.debugger = debugger; }
public LuaDataTipsSourceSource(ITextBuffer textBuffer, ITextStructureNavigator textStructureNavigator, Debugger5 debugger) { this.textBuffer = textBuffer; this.textStructureNavigator = textStructureNavigator; this.debugger = debugger; }
public LuaDebuggerEventHandler(IServiceProvider serviceProvider, Debugger5 debugger) { this.serviceProvider = serviceProvider; this.debugger = debugger; }