Skip to content

Commit 6b1c4a7

Browse files
fix(amazonq): cancel chat export doesn't bubble error up to user (#5723)
1 parent 5390890 commit 6b1c4a7

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import kotlinx.coroutines.flow.onEach
2727
import kotlinx.coroutines.launch
2828
import org.cef.browser.CefBrowser
2929
import org.eclipse.lsp4j.TextDocumentIdentifier
30+
import org.eclipse.lsp4j.jsonrpc.ResponseErrorException
31+
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode
3032
import software.aws.toolkits.core.utils.error
3133
import software.aws.toolkits.core.utils.getLogger
3234
import software.aws.toolkits.core.utils.warn
@@ -94,6 +96,7 @@ import software.aws.toolkits.jetbrains.settings.MeetQSettings
9496
import software.aws.toolkits.telemetry.MetricResult
9597
import software.aws.toolkits.telemetry.Telemetry
9698
import java.util.concurrent.CompletableFuture
99+
import java.util.concurrent.CompletionException
97100
import java.util.function.Function
98101

99102
class BrowserConnector(
@@ -382,6 +385,7 @@ class BrowserConnector(
382385

383386
CHAT_TAB_BAR_ACTIONS -> {
384387
handleChat(AmazonQChatServer.tabBarActions, node) { params, invoke ->
388+
println("handling TabBarActions")
385389
invoke()
386390
.whenComplete { actions, error ->
387391
try {
@@ -396,6 +400,12 @@ class BrowserConnector(
396400
)
397401
)
398402
} catch (e: Exception) {
403+
val cause = if (e is CompletionException) e.cause else e
404+
405+
// dont post error to UI if user cancels export
406+
if (cause is ResponseErrorException && cause.responseError.code == ResponseErrorCode.RequestCancelled.getValue()) {
407+
return@whenComplete
408+
}
399409
LOG.error { "Failed to perform chat tab bar action $e" }
400410
params.tabId?.let {
401411
browser.postChat(chatCommunicationManager.getErrorUiMessage(it, e, null))

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ import org.eclipse.lsp4j.PublishDiagnosticsParams
2525
import org.eclipse.lsp4j.ShowDocumentParams
2626
import org.eclipse.lsp4j.ShowDocumentResult
2727
import org.eclipse.lsp4j.ShowMessageRequestParams
28+
import org.eclipse.lsp4j.jsonrpc.ResponseErrorException
29+
import org.eclipse.lsp4j.jsonrpc.messages.ResponseError
30+
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode
2831
import org.slf4j.event.Level
2932
import software.amazon.awssdk.utils.UserHomeDirectoryUtils
3033
import software.aws.toolkits.core.utils.error
@@ -220,8 +223,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
220223

221224
chosenFile?.let {
222225
ShowSaveFileDialogResult(chosenFile.file.path)
223-
// TODO: Add error state shown in chat ui instead of throwing
224-
} ?: throw Error("Export failed")
226+
} ?: throw ResponseErrorException(ResponseError(ResponseErrorCode.RequestCancelled, "Export cancelled by user", null))
225227
},
226228
ApplicationManager.getApplication()::invokeLater
227229
)

0 commit comments

Comments
 (0)