@@ -24,17 +24,21 @@ import org.eclipse.lsp4j.Position
2424import org.eclipse.lsp4j.Range
2525import software.aws.toolkits.jetbrains.services.amazonq.apps.AppConnection
2626import software.aws.toolkits.jetbrains.services.amazonq.commands.MessageSerializer
27+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
2728import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
2829import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
2930import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
3031import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.getTextDocumentIdentifier
3132import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FOLLOW_UP_CLICK
3233import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION
34+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification
3335import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatParams
3436import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt
3537import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorState
3638import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
3739import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
40+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickNotification
41+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams
3842import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.QuickChatActionRequest
3943import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
4044import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
@@ -207,10 +211,9 @@ class BrowserConnector(
207211 showResult(result, partialResultToken, tabId, encryptionManager, browser)
208212 }
209213 CHAT_FOLLOW_UP_CLICK -> {
210- val requestFromUi = serializer.deserializeChatMessages(node, FollowUpClickNotification ::class .java)
211- AmazonQLspService .executeIfRunning(project) { server ->
212- server.followUpClick(requestFromUi.params)
213- } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
214+ handleChatNotification<FollowUpClickNotification , FollowUpClickParams >(node) { server, params ->
215+ server.followUpClick(params)
216+ }
214217 }
215218 }
216219 }
@@ -231,7 +234,17 @@ class BrowserConnector(
231234 isPartialResult = false
232235 )
233236 browser.postChat(messageToChat)
234- showResult(result, partialResultToken, tabId, encryptionManager, browser)
235- }
237+ showResult(result, partialResultToken, tabId, encryptionManager, browser)
236238 }
239+ }
240+
241+ private inline fun <reified T , R > handleChatNotification (
242+ node : JsonNode ,
243+ crossinline serverAction : (server: AmazonQLanguageServer , params: R ) -> CompletableFuture <* >,
244+ ): CompletableFuture <* > where T : ChatNotification <R > {
245+ val requestFromUi = serializer.deserializeChatMessages<T >(node)
246+ return AmazonQLspService .executeIfRunning(project) { server ->
247+ serverAction(server, requestFromUi.params)
248+ } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
249+ }
237250}
0 commit comments