@@ -24,6 +24,7 @@ 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
@@ -32,17 +33,21 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
3233import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK
3334import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION
3435import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK
36+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification
3537import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatParams
3638import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt
3739import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorState
3840import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
3941import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
4042import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification
43+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
4144import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickNotification
45+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
4246import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.QuickChatActionRequest
4347import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
4448import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
4549import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification
50+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
4651import software.aws.toolkits.jetbrains.services.amazonq.util.command
4752import software.aws.toolkits.jetbrains.services.amazonq.util.tabType
4853import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.AmazonQTheme
@@ -212,22 +217,21 @@ class BrowserConnector(
212217 showResult(result, partialResultToken, tabId, encryptionManager, browser)
213218 }
214219 CHAT_LINK_CLICK -> {
215- val requestFromUi = serializer.deserializeChatMessages(node, LinkClickNotification ::class .java)
216- AmazonQLspService .executeIfRunning(project) { server ->
217- server.linkClick(requestFromUi.params)
218- } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
220+ handleUiRequest<LinkClickNotification , LinkClickParams >(node) { server, params ->
221+ server.linkClick(params)
222+ }
219223 }
224+
220225 CHAT_INFO_LINK_CLICK -> {
221- val requestFromUi = serializer.deserializeChatMessages(node, InfoLinkClickNotification ::class .java)
222- AmazonQLspService .executeIfRunning(project) { server ->
223- server.infoLinkClick(requestFromUi.params)
224- } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
226+ handleUiRequest<InfoLinkClickNotification , InfoLinkClickParams >(node) { server, params ->
227+ server.infoLinkClick(params)
228+ }
225229 }
230+
226231 CHAT_SOURCE_LINK_CLICK -> {
227- val requestFromUi = serializer.deserializeChatMessages(node, SourceLinkClickNotification ::class .java)
228- AmazonQLspService .executeIfRunning(project) { server ->
229- server.sourceLinkClick(requestFromUi.params)
230- } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
232+ handleUiRequest<SourceLinkClickNotification , SourceLinkClickParams >(node) { server, params ->
233+ server.sourceLinkClick(params)
234+ }
231235 }
232236 }
233237 }
@@ -250,4 +254,14 @@ class BrowserConnector(
250254 browser.postChat(messageToChat)
251255 }
252256 }
257+
258+ private inline fun <reified T , R > handleUiRequest (
259+ node : JsonNode ,
260+ crossinline serverAction : (server: AmazonQLanguageServer , params: R ) -> CompletableFuture <* >,
261+ ): CompletableFuture <* > where T : ChatNotification <R > {
262+ val requestFromUi = serializer.deserializeChatMessages<T >(node)
263+ return AmazonQLspService .executeIfRunning(project) { server ->
264+ serverAction(server, requestFromUi.params)
265+ } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
266+ }
253267}
0 commit comments