From 1cb3cca748137b1510aa4cab71fc2fd90f4f1f47 Mon Sep 17 00:00:00 2001 From: samgst-amazon Date: Thu, 15 May 2025 14:22:10 -0700 Subject: [PATCH 1/6] handle error properly --- .../services/amazonq/webview/BrowserConnector.kt | 14 +++++++++++--- .../amazonq/lsp/AmazonQLanguageClientImpl.kt | 6 ++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt index 3b8ba1932c4..6fec6c8716f 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt @@ -27,6 +27,7 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import org.cef.browser.CefBrowser import org.eclipse.lsp4j.TextDocumentIdentifier +import org.eclipse.lsp4j.jsonrpc.ResponseErrorException import software.aws.toolkits.core.utils.error import software.aws.toolkits.core.utils.getLogger import software.aws.toolkits.core.utils.warn @@ -94,6 +95,7 @@ import software.aws.toolkits.jetbrains.settings.MeetQSettings import software.aws.toolkits.telemetry.MetricResult import software.aws.toolkits.telemetry.Telemetry import java.util.concurrent.CompletableFuture +import java.util.concurrent.CompletionException import java.util.function.Function class BrowserConnector( @@ -382,6 +384,7 @@ class BrowserConnector( CHAT_TAB_BAR_ACTIONS -> { handleChat(AmazonQChatServer.tabBarActions, node) { params, invoke -> + println("handling TabBarActions") invoke() .whenComplete { actions, error -> try { @@ -396,9 +399,14 @@ class BrowserConnector( ) ) } catch (e: Exception) { - LOG.error { "Failed to perform chat tab bar action $e" } - params.tabId?.let { - browser.postChat(chatCommunicationManager.getErrorUiMessage(it, e, null)) + val cause = if (e is CompletionException) e.cause else e + + // dont post error to UI if user cancels export + if (!(cause is ResponseErrorException && cause.responseError.message == "Export cancelled by user")) { + LOG.error { "Failed to perform chat tab bar action $e" } + params.tabId?.let { + browser.postChat(chatCommunicationManager.getErrorUiMessage(it, e, null)) + } } } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt index 17f32e5bbf4..fc018730574 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt @@ -22,6 +22,9 @@ import org.eclipse.lsp4j.PublishDiagnosticsParams import org.eclipse.lsp4j.ShowDocumentParams import org.eclipse.lsp4j.ShowDocumentResult import org.eclipse.lsp4j.ShowMessageRequestParams +import org.eclipse.lsp4j.jsonrpc.ResponseErrorException +import org.eclipse.lsp4j.jsonrpc.messages.ResponseError +import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode import org.slf4j.event.Level import software.aws.toolkits.core.utils.error import software.aws.toolkits.core.utils.getLogger @@ -215,8 +218,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC chosenFile?.let { ShowSaveFileDialogResult(chosenFile.file.path) - // TODO: Add error state shown in chat ui instead of throwing - } ?: throw Error("Export failed") + } ?: throw ResponseErrorException(ResponseError(ResponseErrorCode.RequestCancelled, "Export cancelled by user", null)) }, ApplicationManager.getApplication()::invokeLater ) From 6d0df4e322de380d665b57746146f4eb4da7d879 Mon Sep 17 00:00:00 2001 From: samgst-amazon Date: Thu, 15 May 2025 15:17:04 -0700 Subject: [PATCH 2/6] override breaking build --- .../codewhisperer/language/languages/CodeWhispererAbap.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererAbap.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererAbap.kt index da8334406a4..4096e519e24 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererAbap.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererAbap.kt @@ -11,8 +11,6 @@ class CodeWhispererAbap private constructor() : CodeWhispererProgrammingLanguage override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Abap - override fun isCodeCompletionSupported(): Boolean = true - companion object { const val ID = "abap" From a2c867220b516ec26cad61688828bc95b6bc7a8d Mon Sep 17 00:00:00 2001 From: Sam Stewart Date: Thu, 15 May 2025 15:24:50 -0700 Subject: [PATCH 3/6] Update plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt Co-authored-by: Richard Li <742829+rli@users.noreply.github.com> --- .../jetbrains/services/amazonq/webview/BrowserConnector.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt index 0d6fe5fe6b5..0bd5be2dd20 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt @@ -384,7 +384,6 @@ class BrowserConnector( CHAT_TAB_BAR_ACTIONS -> { handleChat(AmazonQChatServer.tabBarActions, node) { params, invoke -> - println("handling TabBarActions") invoke() .whenComplete { actions, error -> try { From 5ba6cf9763f70927f62e63c63c2259f8f90ca562 Mon Sep 17 00:00:00 2001 From: Sam Stewart Date: Thu, 15 May 2025 15:25:22 -0700 Subject: [PATCH 4/6] Update plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt Co-authored-by: Richard Li <742829+rli@users.noreply.github.com> --- .../jetbrains/services/amazonq/webview/BrowserConnector.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt index 0bd5be2dd20..5d3fda30b78 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt @@ -401,7 +401,9 @@ class BrowserConnector( val cause = if (e is CompletionException) e.cause else e // dont post error to UI if user cancels export - if (!(cause is ResponseErrorException && cause.responseError.message == "Export cancelled by user")) { + if (cause is ResponseErrorException && cause.responseError.code == "ResponseErrorCode.RequestCancelled) { + return@whenComplete +} LOG.error { "Failed to perform chat tab bar action $e" } params.tabId?.let { browser.postChat(chatCommunicationManager.getErrorUiMessage(it, e, null)) From 72ef6d9b5b7cab9c9876dda3f2fd6ae9cdb73061 Mon Sep 17 00:00:00 2001 From: samgst-amazon Date: Thu, 15 May 2025 15:39:02 -0700 Subject: [PATCH 5/6] feedback --- .../services/amazonq/webview/BrowserConnector.kt | 13 +++++++------ .../amazonq/lsp/AmazonQLanguageClientImpl.kt | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt index 5d3fda30b78..12688e607eb 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt @@ -28,6 +28,7 @@ import kotlinx.coroutines.launch import org.cef.browser.CefBrowser import org.eclipse.lsp4j.TextDocumentIdentifier import org.eclipse.lsp4j.jsonrpc.ResponseErrorException +import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode import software.aws.toolkits.core.utils.error import software.aws.toolkits.core.utils.getLogger import software.aws.toolkits.core.utils.warn @@ -384,6 +385,7 @@ class BrowserConnector( CHAT_TAB_BAR_ACTIONS -> { handleChat(AmazonQChatServer.tabBarActions, node) { params, invoke -> + println("handling TabBarActions") invoke() .whenComplete { actions, error -> try { @@ -401,13 +403,12 @@ class BrowserConnector( val cause = if (e is CompletionException) e.cause else e // dont post error to UI if user cancels export - if (cause is ResponseErrorException && cause.responseError.code == "ResponseErrorCode.RequestCancelled) { + if (cause is ResponseErrorException && cause.responseError.code == ResponseErrorCode.RequestCancelled.getValue()) { return@whenComplete -} - LOG.error { "Failed to perform chat tab bar action $e" } - params.tabId?.let { - browser.postChat(chatCommunicationManager.getErrorUiMessage(it, e, null)) - } + } + LOG.error { "Failed to perform chat tab bar action $e" } + params.tabId?.let { + browser.postChat(chatCommunicationManager.getErrorUiMessage(it, e, null)) } } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt index bc69e264e74..be5dea8b492 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt @@ -233,7 +233,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC chosenFile?.let { ShowSaveFileDialogResult(chosenFile.file.path) - } ?: throw ResponseErrorException(ResponseError(ResponseErrorCode.RequestCancelled, "Export cancelled by user", null)) + }?: throw ResponseErrorException(ResponseError(ResponseErrorCode.RequestCancelled, "Export cancelled by user", null)) }, ApplicationManager.getApplication()::invokeLater ) From 5707dcc86a28cd27632cd4359cd72ab1ab95582c Mon Sep 17 00:00:00 2001 From: samgst-amazon Date: Thu, 15 May 2025 15:57:41 -0700 Subject: [PATCH 6/6] detekt --- .../jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt index be5dea8b492..bc69e264e74 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt @@ -233,7 +233,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC chosenFile?.let { ShowSaveFileDialogResult(chosenFile.file.path) - }?: throw ResponseErrorException(ResponseError(ResponseErrorCode.RequestCancelled, "Export cancelled by user", null)) + } ?: throw ResponseErrorException(ResponseError(ResponseErrorCode.RequestCancelled, "Export cancelled by user", null)) }, ApplicationManager.getApplication()::invokeLater )