From eb894f9545d2550d8da06c9eee1a0edb7bdebab7 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Wed, 9 Jul 2025 11:10:40 -0700 Subject: [PATCH 1/2] fix(amazonq): fix merge issue in QInlineCompletionProvider --- .../popup/QInlineCompletionProvider.kt | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt index 24c5f0d8c84..cb700c22973 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt @@ -46,9 +46,9 @@ import kotlinx.coroutines.withContext import migration.software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager import org.eclipse.lsp4j.jsonrpc.ResponseErrorException import org.eclipse.lsp4j.jsonrpc.messages.Either -import software.amazon.awssdk.services.ssooidc.model.InvalidGrantException import software.aws.toolkits.core.utils.debug import software.aws.toolkits.core.utils.getLogger +import software.aws.toolkits.core.utils.warn import software.aws.toolkits.jetbrains.core.coroutines.getCoroutineBgContext import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager @@ -601,20 +601,17 @@ class QInlineCompletionProvider(private val cs: CoroutineScope) : InlineCompleti // https://github.com/aws/language-servers/blob/1f3e93024eeb22186a34f0bd560f8d552f517300/server/aws-lsp-codewhisperer/src/language-server/chat/utils.ts#L22-L23 // error data is nullable if (e.responseError.data?.toString()?.contains("E_AMAZON_Q_CONNECTION_EXPIRED") == true) { - // kill the session if the connection is expired - val connection = ToolkitConnectionManager - .getInstance(project) - .activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection - val tokenProvider = connection?.let { it.getConnectionSettings().tokenProvider.delegate as? BearerTokenProvider } - tokenProvider?.let { - // TODO: fragile - try { - it.refresh() - } catch (_: InvalidGrantException) { - it.invalidate() - CodeWhispererUtil.reconnectCodeWhisperer(project) + try { + // kill the session if the connection is expired + val connection = ToolkitConnectionManager + .getInstance(project) + .activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection + connection?.let { it.getConnectionSettings().tokenProvider.delegate as? BearerTokenProvider } + ?.invalidate() + } catch (e: Exception) { + LOG.warn(e) { "Failed to invalidate existing token in response to E_AMAZON_Q_CONNECTION_EXPIRED" } } - } + CodeWhispererUtil.reconnectCodeWhisperer(project) } } return null From 7e81d72a1cce6c5a86ad89b1ad7b4f02fafdab6c Mon Sep 17 00:00:00 2001 From: Richard Li Date: Wed, 9 Jul 2025 11:40:52 -0700 Subject: [PATCH 2/2] lint --- .../codewhisperer/popup/QInlineCompletionProvider.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt index cb700c22973..74ed6747da6 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt @@ -608,9 +608,9 @@ class QInlineCompletionProvider(private val cs: CoroutineScope) : InlineCompleti .activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection connection?.let { it.getConnectionSettings().tokenProvider.delegate as? BearerTokenProvider } ?.invalidate() - } catch (e: Exception) { - LOG.warn(e) { "Failed to invalidate existing token in response to E_AMAZON_Q_CONNECTION_EXPIRED" } - } + } catch (e: Exception) { + LOG.warn(e) { "Failed to invalidate existing token in response to E_AMAZON_Q_CONNECTION_EXPIRED" } + } CodeWhispererUtil.reconnectCodeWhisperer(project) } }