private void attachSelectionListener()

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