@@ -6,8 +6,10 @@ package software.aws.toolkits.jetbrains.services.codewhisperer.popup
66import  com.intellij.codeInsight.hint.ParameterInfoController 
77import  com.intellij.codeInsight.lookup.LookupManager 
88import  com.intellij.idea.AppMode 
9+ import  com.intellij.openapi.actionSystem.ActionManager 
910import  com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_BACKSPACE 
1011import  com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_ENTER 
12+ import  com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_ESCAPE 
1113import  com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_MOVE_CARET_LEFT 
1214import  com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_MOVE_CARET_RIGHT 
1315import  com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_TAB 
@@ -45,6 +47,10 @@ import software.amazon.awssdk.services.codewhispererruntime.model.Import
4547import  software.amazon.awssdk.services.codewhispererruntime.model.Reference 
4648import  software.aws.toolkits.core.utils.debug 
4749import  software.aws.toolkits.core.utils.getLogger 
50+ import  software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererAcceptAction 
51+ import  software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererForceAcceptAction 
52+ import  software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererNavigateNextAction 
53+ import  software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererNavigatePrevAction 
4854import  software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorManager 
4955import  software.aws.toolkits.jetbrains.services.codewhisperer.layout.CodeWhispererLayoutConfig.addHorizontalGlue 
5056import  software.aws.toolkits.jetbrains.services.codewhisperer.layout.CodeWhispererLayoutConfig.horizontalPanelConstraints 
@@ -55,8 +61,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.model.SessionConte
5561import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererEditorActionHandler 
5662import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupBackspaceHandler 
5763import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupEnterHandler 
58- import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupLeftArrowHandler 
59- import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupRightArrowHandler 
64+ import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupEscHandler 
6065import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupTabHandler 
6166import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.handlers.CodeWhispererPopupTypedHandler 
6267import  software.aws.toolkits.jetbrains.services.codewhisperer.popup.listeners.CodeWhispererAcceptButtonActionListener 
@@ -455,41 +460,52 @@ class CodeWhispererPopupManager {
455460        )
456461    }
457462
458-     private  fun  addButtonActionListeners (states :   InvocationContext ) {
459-         popupComponents.prevButton.addButtonActionListener(CodeWhispererPrevButtonActionListener (states) )
460-         popupComponents.nextButton.addButtonActionListener(CodeWhispererNextButtonActionListener (states) )
461-         popupComponents.acceptButton.addButtonActionListener(CodeWhispererAcceptButtonActionListener (states) )
463+     private  fun  addButtonActionListeners (sessionContext :   SessionContext ) {
464+         popupComponents.prevButton.addButtonActionListener(CodeWhispererPrevButtonActionListener (sessionContext), sessionContext )
465+         popupComponents.nextButton.addButtonActionListener(CodeWhispererNextButtonActionListener (sessionContext), sessionContext )
466+         popupComponents.acceptButton.addButtonActionListener(CodeWhispererAcceptButtonActionListener (sessionContext), sessionContext )
462467    }
463468
464-     private  fun  JButton.addButtonActionListener (listener :  CodeWhispererActionListener ) {
469+     private  fun  JButton.addButtonActionListener (listener :  CodeWhispererActionListener ,  sessionContext :   SessionContext ) {
465470        this .addActionListener(listener)
466-         Disposer .register(listener.states ) { this .removeActionListener(listener) }
471+         Disposer .register(sessionContext ) { this .removeActionListener(listener) }
467472    }
468473
469-     private  fun  setPopupActionHandlers (states :   InvocationContext ) {
474+     private  fun  setPopupActionHandlers (sessionContext :   SessionContext ) {
470475        val  actionManager =  EditorActionManager .getInstance()
471-         setPopupTypedHandler(CodeWhispererPopupTypedHandler (TypedAction .getInstance().rawHandler, states))
472-         setPopupActionHandler(ACTION_EDITOR_TAB , CodeWhispererPopupTabHandler (states))
473-         setPopupActionHandler(ACTION_EDITOR_MOVE_CARET_LEFT , CodeWhispererPopupLeftArrowHandler (states))
474-         setPopupActionHandler(ACTION_EDITOR_MOVE_CARET_RIGHT , CodeWhispererPopupRightArrowHandler (states))
476+ 
477+         //  TODO: find a better way to pass in the local sessionContext for the handler to know the session state
478+         val  prevAction =  ActionManager .getInstance().getAction(" codewhisperer.inline.navigate.previous"  ) as  CodeWhispererNavigatePrevAction 
479+         prevAction.sessionContext =  sessionContext
480+         val  nextAction =  ActionManager .getInstance().getAction(" codewhisperer.inline.navigate.next"  ) as  CodeWhispererNavigateNextAction 
481+         nextAction.sessionContext =  sessionContext
482+         val  acceptAction =  ActionManager .getInstance().getAction(" codewhisperer.inline.accept"  ) as  CodeWhispererAcceptAction 
483+         acceptAction.sessionContext =  sessionContext
484+         val  forceAcceptAction =  ActionManager .getInstance().getAction(" codewhisperer.inline.force.accept"  ) as  CodeWhispererForceAcceptAction 
485+         forceAcceptAction.sessionContext =  sessionContext
486+ 
487+         setPopupTypedHandler(CodeWhispererPopupTypedHandler (TypedAction .getInstance().rawHandler, sessionContext), sessionContext)
488+         setPopupActionHandler(ACTION_EDITOR_ESCAPE , CodeWhispererPopupEscHandler (sessionContext), sessionContext)
475489        setPopupActionHandler(
476490            ACTION_EDITOR_ENTER ,
477-             CodeWhispererPopupEnterHandler (actionManager.getActionHandler(ACTION_EDITOR_ENTER ), states)
491+             CodeWhispererPopupEnterHandler (actionManager.getActionHandler(ACTION_EDITOR_ENTER ), sessionContext),
492+             sessionContext
478493        )
479494        setPopupActionHandler(
480495            ACTION_EDITOR_BACKSPACE ,
481-             CodeWhispererPopupBackspaceHandler (actionManager.getActionHandler(ACTION_EDITOR_BACKSPACE ), states)
496+             CodeWhispererPopupBackspaceHandler (actionManager.getActionHandler(ACTION_EDITOR_BACKSPACE ), sessionContext),
497+             sessionContext
482498        )
483499    }
484500
485-     private  fun  setPopupTypedHandler (newHandler :  CodeWhispererPopupTypedHandler ) {
501+     private  fun  setPopupTypedHandler (newHandler :  CodeWhispererPopupTypedHandler ,  sessionContext :   SessionContext ) {
486502        val  oldTypedHandler =  TypedAction .getInstance().setupRawHandler(newHandler)
487-         Disposer .register(newHandler.states ) { TypedAction .getInstance().setupRawHandler(oldTypedHandler) }
503+         Disposer .register(sessionContext ) { TypedAction .getInstance().setupRawHandler(oldTypedHandler) }
488504    }
489505
490-     private  fun  setPopupActionHandler (id :  String , newHandler :  CodeWhispererEditorActionHandler ) {
506+     private  fun  setPopupActionHandler (id :  String , newHandler :  CodeWhispererEditorActionHandler ,  sessionContext :   SessionContext ) {
491507        val  oldHandler =  EditorActionManager .getInstance().setActionHandler(id, newHandler)
492-         Disposer .register(newHandler.states ) { EditorActionManager .getInstance().setActionHandler(id, oldHandler) }
508+         Disposer .register(sessionContext ) { EditorActionManager .getInstance().setActionHandler(id, oldHandler) }
493509    }
494510
495511    private  fun  addComponentListeners (states :  InvocationContext ) {
0 commit comments