Skip to content

Commit 0fbc5c5

Browse files
committed
move tab request map into ChatCommunicationManager
1 parent 2fc63c1 commit 0fbc5c5

File tree

3 files changed

+24
-20
lines changed

3 files changed

+24
-20
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import software.aws.toolkits.core.utils.getLogger
2626
import software.aws.toolkits.core.utils.warn
2727
import software.aws.toolkits.jetbrains.services.amazonq.apps.AppConnection
2828
import software.aws.toolkits.jetbrains.services.amazonq.commands.MessageSerializer
29-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageClientImpl
3029
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
3130
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
3231
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
@@ -288,7 +287,7 @@ class BrowserConnector(
288287
}
289288
CHAT_OPEN_TAB -> {
290289
val response = serializer.deserializeChatMessages<OpenTabResponse>(node)
291-
AmazonQLanguageClientImpl.completeTabOpen(
290+
chatCommunicationManager.completeTabOpen(
292291
response.requestId,
293292
response.params.result.tabId
294293
)

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.customization.Code
3636
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
3737
import java.util.UUID
3838
import java.util.concurrent.CompletableFuture
39-
import java.util.concurrent.ConcurrentHashMap
40-
import java.util.concurrent.TimeUnit
4139

4240
/**
4341
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
@@ -116,9 +114,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
116114

117115
override fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult> {
118116
val requestId = UUID.randomUUID().toString()
119-
val result = CompletableFuture<OpenTabResult>()
120-
121-
pendingTabRequests[requestId] = result
117+
val result = ChatCommunicationManager.getInstance(project).addPendingOpenTabRequest(requestId)
122118

123119
val uiMessage = """
124120
{
@@ -129,13 +125,6 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
129125
""".trimIndent()
130126
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
131127

132-
result.orTimeout(30000, TimeUnit.MILLISECONDS)
133-
.whenComplete { _, error ->
134-
if (error != null) {
135-
pendingTabRequests.remove(requestId)
136-
}
137-
}
138-
139128
return result
140129
}
141130

@@ -194,11 +183,5 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
194183

195184
companion object {
196185
private val LOG = getLogger<AmazonQLanguageClientImpl>()
197-
198-
private val pendingTabRequests = ConcurrentHashMap<String, CompletableFuture<OpenTabResult>>()
199-
200-
fun completeTabOpen(requestId: String, tabId: String) {
201-
pendingTabRequests.remove(requestId)?.complete(OpenTabResult(tabId))
202-
}
203186
}
204187
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/ChatCommunicationManager.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,30 @@ import com.intellij.openapi.project.Project
99
import org.eclipse.lsp4j.ProgressParams
1010
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
1111
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ProgressNotificationUtils.getObject
12+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
1213
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
1314
import java.util.UUID
15+
import java.util.concurrent.CompletableFuture
1416
import java.util.concurrent.ConcurrentHashMap
17+
import java.util.concurrent.TimeUnit
1518

1619
@Service(Service.Level.PROJECT)
1720
class ChatCommunicationManager {
1821
private val chatPartialResultMap = ConcurrentHashMap<String, String>()
22+
private val pendingTabRequests = ConcurrentHashMap<String, CompletableFuture<OpenTabResult>>()
23+
24+
fun addPendingOpenTabRequest(requestId: String): CompletableFuture<OpenTabResult> {
25+
return CompletableFuture<OpenTabResult>().also { future ->
26+
pendingTabRequests[requestId] = future
27+
future.orTimeout(30000, TimeUnit.MILLISECONDS)
28+
.whenComplete { _, error ->
29+
if (error != null) {
30+
pendingTabRequests.remove(requestId)
31+
}
32+
}
33+
}
34+
}
35+
1936
private fun getPartialChatMessage(partialResultToken: String): String =
2037
chatPartialResultMap.getValue(partialResultToken)
2138

@@ -53,6 +70,11 @@ class ChatCommunicationManager {
5370
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
5471
}
5572
}
73+
74+
fun completeTabOpen(requestId: String, tabId: String) {
75+
pendingTabRequests.remove(requestId)?.complete(OpenTabResult(tabId))
76+
}
77+
5678
companion object {
5779
fun getInstance(project: Project) = project.service<ChatCommunicationManager>()
5880

0 commit comments

Comments
 (0)