in plugin/src/software/aws/toolkits/eclipse/amazonq/inlineChat/InlineChatEditorListener.java [131:181]
private void attachSelectionListener(final ITextEditor editor) {
// Remove any existing listeners
removeSelectionListener(editor);
ISelectionProvider selectionProvider = editor.getSelectionProvider();
if (selectionProvider == null) {
return;
}
currentSelectionListener = event -> {
closePrompt();
//TODO: change to use eventBroker once code is in prod
if (!Activator.getLoginService().getAuthState().isLoggedIn()) {
return;
}
if (InlineChatSession.getInstance().isSessionActive()) {
return;
}
// Cancel any pending prompt updates
if (pendingPromptUpdate != null) {
Display.getDefault().timerExec(-1, pendingPromptUpdate);
pendingPromptUpdate = null;
}
if (event.getSelection() instanceof ITextSelection) {
ITextSelection selection = (ITextSelection) event.getSelection();
if (selection.getLength() > 0) {
int startLine = selection.getStartLine();
int endLine = selection.getEndLine();
// Only show if 2+ lines are selected
if (endLine - startLine >= 1) {
// Delay prompt to give user time to complete selection
pendingPromptUpdate = () -> {
showPrompt(editor, selection);
pendingPromptUpdate = null;
};
Display.getDefault().timerExec(SELECTION_DELAY_MS, pendingPromptUpdate);
} else {
closePrompt();
}
} else {
closePrompt();
}
}
};
selectionProvider.addSelectionChangedListener(currentSelectionListener);
}