@@ -17,26 +17,36 @@ import kotlinx.coroutines.flow.distinctUntilChanged
1717import kotlinx.coroutines.flow.launchIn
1818import kotlinx.coroutines.flow.merge
1919import kotlinx.coroutines.flow.onEach
20- import kotlinx.coroutines.future.await
2120import kotlinx.coroutines.launch
2221import org.cef.browser.CefBrowser
2322import org.eclipse.lsp4j.Position
2423import org.eclipse.lsp4j.Range
2524import software.aws.toolkits.jetbrains.services.amazonq.apps.AppConnection
2625import software.aws.toolkits.jetbrains.services.amazonq.commands.MessageSerializer
26+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
2727import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
2828import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
2929import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
3030import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.getTextDocumentIdentifier
31+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK
32+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK
3133import 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.CHAT_SOURCE_LINK_CLICK
35+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification
3236import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatParams
3337import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt
3438import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorState
3539import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
3640import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
41+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification
42+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
43+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickNotification
44+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
3745import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.QuickChatActionRequest
3846import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
3947import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
48+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification
49+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
4050import software.aws.toolkits.jetbrains.services.amazonq.util.command
4151import software.aws.toolkits.jetbrains.services.amazonq.util.tabType
4252import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.AmazonQTheme
@@ -205,6 +215,23 @@ class BrowserConnector(
205215
206216 showResult(result, partialResultToken, tabId, encryptionManager, browser)
207217 }
218+ CHAT_LINK_CLICK -> {
219+ handleChatNotification<LinkClickNotification , LinkClickParams >(node) { server, params ->
220+ server.linkClick(params)
221+ }
222+ }
223+
224+ CHAT_INFO_LINK_CLICK -> {
225+ handleChatNotification<InfoLinkClickNotification , InfoLinkClickParams >(node) { server, params ->
226+ server.infoLinkClick(params)
227+ }
228+ }
229+
230+ CHAT_SOURCE_LINK_CLICK -> {
231+ handleChatNotification<SourceLinkClickNotification , SourceLinkClickParams >(node) { server, params ->
232+ server.sourceLinkClick(params)
233+ }
234+ }
208235 }
209236 }
210237
@@ -226,4 +253,14 @@ class BrowserConnector(
226253 browser.postChat(messageToChat)
227254 }
228255 }
256+
257+ private inline fun <reified T , R > handleChatNotification (
258+ node : JsonNode ,
259+ crossinline serverAction : (server: AmazonQLanguageServer , params: R ) -> CompletableFuture <* >,
260+ ): CompletableFuture <* > where T : ChatNotification <R > {
261+ val requestFromUi = serializer.deserializeChatMessages<T >(node)
262+ return AmazonQLspService .executeIfRunning(project) { server ->
263+ serverAction(server, requestFromUi.params)
264+ } ? : CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running" ))
265+ }
229266}
0 commit comments