From 8b35b1d485125111da8b3967656986be364d8bfb Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 10 Apr 2025 16:47:30 -0700 Subject: [PATCH 1/6] disable toolkit_didLoadModule metrics --- .../aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt | 2 +- .../software/aws/toolkits/jetbrains/core/LoginBrowserTest.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt index 16a37e150c7..3650491688f 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt @@ -227,7 +227,7 @@ class QWebviewBrowser(val project: Project, private val parentDisposable: Dispos } is BrowserMessage.PublishWebviewTelemetry -> { - publishTelemetry(message) +// publishTelemetry(message) } is BrowserMessage.OpenUrl -> { diff --git a/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/LoginBrowserTest.kt b/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/LoginBrowserTest.kt index f5ed7e0f2c5..2a281f7a981 100644 --- a/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/LoginBrowserTest.kt +++ b/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/LoginBrowserTest.kt @@ -9,6 +9,7 @@ import com.intellij.ui.jcef.JBCefBrowserBase import com.intellij.ui.jcef.JBCefJSQuery import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.RegisterExtension import org.mockito.kotlin.argumentCaptor @@ -34,6 +35,7 @@ class TestLoginBrowser(project: Project) : LoginBrowser(project, "", "") { override fun loadWebView(query: JBCefJSQuery) {} } +@Disabled class LoginBrowserTest { private lateinit var sut: TestLoginBrowser private val project: Project From a280fd8eab5653b16ab31c1875922472cea27b7b Mon Sep 17 00:00:00 2001 From: Will Lo Date: Fri, 11 Apr 2025 04:56:55 -0700 Subject: [PATCH 2/6] fix users some ide window will be stuck at fetching profile... state in multi window use cases --- .../jetbrains/services/amazonq/profile/QRegionProfileManager.kt | 2 +- .../services/amazonq/profile/QRegionProfileSelectedListener.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt index 60f98c26d0f..b3b242c363d 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt @@ -144,7 +144,7 @@ class QRegionProfileManager : PersistentStateComponent, Disposabl } } - project.messageBus + ApplicationManager.getApplication().messageBus .syncPublisher(QRegionProfileSelectedListener.TOPIC) .onProfileSelected(project, newProfile) } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt index f107d883169..e507cd04a13 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt @@ -8,7 +8,7 @@ import com.intellij.util.messages.Topic interface QRegionProfileSelectedListener { companion object { - @Topic.ProjectLevel + @Topic.AppLevel val TOPIC = Topic.create("QRegionProfileSelected", QRegionProfileSelectedListener::class.java) } From 183ded53a95a5d5f50a084480889f71ef6067dff Mon Sep 17 00:00:00 2001 From: Will Lo Date: Mon, 14 Apr 2025 16:52:37 -0700 Subject: [PATCH 3/6] a --- .../jetbrains/services/amazonq/QRefreshPanelAction.kt | 2 +- .../services/amazonq/toolwindow/AmazonQToolWindow.kt | 6 ++++-- .../services/amazonq/toolwindow/AmazonQToolWindowFactory.kt | 2 +- .../jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt | 2 +- .../jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt | 3 +-- .../aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt | 3 +-- .../jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt | 3 +-- .../amazonqFeatureDev/controller/FeatureDevController.kt | 2 +- .../src/software/aws/toolkits/jetbrains/services/cwc/App.kt | 3 +-- .../jetbrains/services/cwc/inline/InlineChatController.kt | 2 +- .../services/codemodernizer/CodeModernizerManager.kt | 2 +- .../services/codemodernizer/CodeTransformChatApp.kt | 3 +-- .../services/codewhisperer/QRegionProfileManagerTest.kt | 2 +- .../services/amazonq/profile/QRegionProfileManager.kt | 2 +- .../amazonq/profile/QRegionProfileSelectedListener.kt | 3 +-- 15 files changed, 18 insertions(+), 22 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt index 8b22e156399..975f71ef748 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt @@ -18,7 +18,7 @@ class QRefreshPanelAction : DumbAwareAction(AmazonQBundle.message("amazonq.refre override fun actionPerformed(e: AnActionEvent) { val project = e.project ?: return // recreate chat browser - AmazonQToolWindow.getInstance(project).disposeAndRecreate() + AmazonQToolWindow.getInstance(project).disposeAndRecreate(true) // recreate signin browser QWebviewPanel.getInstance(project).disposeAndRecreate() RefreshQChatPanelButtonPressedListener.notifyRefresh() diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt index 8a1d6378565..1d9b1c39c3c 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt @@ -58,7 +58,7 @@ class AmazonQToolWindow private constructor( connectApps() } - fun disposeAndRecreate() { + fun disposeAndRecreate(broadcast: Boolean = false) { browserConnector.uiReady = CompletableDeferred() chatPanel.disposeAndRecreate() @@ -67,7 +67,9 @@ class AmazonQToolWindow private constructor( connectUi() connectApps() - ApplicationManager.getApplication().messageBus.syncPublisher(LafManagerListener.TOPIC).lookAndFeelChanged(LafManager.getInstance()) + if (broadcast) { + ApplicationManager.getApplication().messageBus.syncPublisher(LafManagerListener.TOPIC).lookAndFeelChanged(LafManager.getInstance()) + } } private fun sendMessage(message: AmazonQMessage, tabType: String) { diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt index 75120cf493e..28fe55c98c3 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt @@ -95,7 +95,7 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware { project.messageBus.connect(toolWindow.disposable).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { if (project.isDisposed) return AmazonQToolWindow.getInstance(project).disposeAndRecreate() qPanel.setContent(AmazonQToolWindow.getInstance(project).component) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt index 0aa8dc42b04..a15b09cfc99 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt @@ -147,7 +147,7 @@ class CodeScanChatApp(private val scope: CoroutineScope) : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt index 7972e45fb9c..79773b30283 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt @@ -4,7 +4,6 @@ package software.aws.toolkits.jetbrains.services.amazonqCodeTest import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.project.Project import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection @@ -78,7 +77,7 @@ class CodeTestChatApp(private val scope: CoroutineScope) : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt index ed913374e08..90724408072 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt @@ -4,7 +4,6 @@ package software.aws.toolkits.jetbrains.services.amazonqDoc import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.project.Project import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection @@ -81,7 +80,7 @@ class DocApp : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt index c9fe08efc64..3565ee16981 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt @@ -4,7 +4,6 @@ package software.aws.toolkits.jetbrains.services.amazonqFeatureDev import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.project.Project import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection @@ -82,7 +81,7 @@ class FeatureDevApp : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt index 75abc80ebf1..5cab4a00173 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt @@ -100,7 +100,7 @@ class FeatureDevController( context.project.messageBus.connect().subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt index 34bb6bca614..6fc01bd9f34 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt @@ -4,7 +4,6 @@ package software.aws.toolkits.jetbrains.services.cwc import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.project.Project import kotlinx.coroutines.flow.merge import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope @@ -82,7 +81,7 @@ class App : AmazonQApp { ApplicationManager.getApplication().messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { inboundAppMessagesHandler.processSessionClear() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt index bf468976a2f..72689cc309b 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt @@ -106,7 +106,7 @@ class InlineChatController( project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { sessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt index 9b2db462a41..95ae8ddaf2f 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt @@ -139,7 +139,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { stopModernize() codeTransformationSession?.let { Disposer.dispose(it) diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt index b102d348d11..9976833a12f 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt @@ -4,7 +4,6 @@ package software.aws.toolkits.jetbrains.services.codemodernizer import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.project.Project import kotlinx.coroutines.flow.merge import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope @@ -168,7 +167,7 @@ class CodeTransformChatApp : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt index 628ab8e36c9..efb97e4bdef 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt @@ -142,7 +142,7 @@ class QRegionProfileManagerTest { project.messageBus.connect(disposableRule.disposable).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(project: Project, profile: QRegionProfile?) { + override fun onProfileSelected(profile: QRegionProfile?) { cnt += 1 } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt index b3b242c363d..f1a3110e60a 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt @@ -146,7 +146,7 @@ class QRegionProfileManager : PersistentStateComponent, Disposabl ApplicationManager.getApplication().messageBus .syncPublisher(QRegionProfileSelectedListener.TOPIC) - .onProfileSelected(project, newProfile) + .onProfileSelected(newProfile) } private fun invalidateProfile(arn: String) { diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt index e507cd04a13..f3e92c11799 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt @@ -3,7 +3,6 @@ package software.aws.toolkits.jetbrains.services.amazonq.profile -import com.intellij.openapi.project.Project import com.intellij.util.messages.Topic interface QRegionProfileSelectedListener { @@ -12,5 +11,5 @@ interface QRegionProfileSelectedListener { val TOPIC = Topic.create("QRegionProfileSelected", QRegionProfileSelectedListener::class.java) } - fun onProfileSelected(project: Project, profile: QRegionProfile?) + fun onProfileSelected(profile: QRegionProfile?) } From 6b5c0691d9325490d478cd0d27cabaaa4a8877e6 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Tue, 15 Apr 2025 11:30:38 -0700 Subject: [PATCH 4/6] revert --- .../jetbrains/services/amazonq/QRefreshPanelAction.kt | 2 +- .../services/amazonq/toolwindow/AmazonQToolWindow.kt | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt index 975f71ef748..8b22e156399 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QRefreshPanelAction.kt @@ -18,7 +18,7 @@ class QRefreshPanelAction : DumbAwareAction(AmazonQBundle.message("amazonq.refre override fun actionPerformed(e: AnActionEvent) { val project = e.project ?: return // recreate chat browser - AmazonQToolWindow.getInstance(project).disposeAndRecreate(true) + AmazonQToolWindow.getInstance(project).disposeAndRecreate() // recreate signin browser QWebviewPanel.getInstance(project).disposeAndRecreate() RefreshQChatPanelButtonPressedListener.notifyRefresh() diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt index 1d9b1c39c3c..8a1d6378565 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt @@ -58,7 +58,7 @@ class AmazonQToolWindow private constructor( connectApps() } - fun disposeAndRecreate(broadcast: Boolean = false) { + fun disposeAndRecreate() { browserConnector.uiReady = CompletableDeferred() chatPanel.disposeAndRecreate() @@ -67,9 +67,7 @@ class AmazonQToolWindow private constructor( connectUi() connectApps() - if (broadcast) { - ApplicationManager.getApplication().messageBus.syncPublisher(LafManagerListener.TOPIC).lookAndFeelChanged(LafManager.getInstance()) - } + ApplicationManager.getApplication().messageBus.syncPublisher(LafManagerListener.TOPIC).lookAndFeelChanged(LafManager.getInstance()) } private fun sendMessage(message: AmazonQMessage, tabType: String) { From 9f765c1d5b5028f3f54456b76bff0611046dee00 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Tue, 15 Apr 2025 11:33:18 -0700 Subject: [PATCH 5/6] cl --- .../bugfix-afb46d2b-24c7-48be-94b1-02a7f56cbde0.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changes/next-release/bugfix-afb46d2b-24c7-48be-94b1-02a7f56cbde0.json diff --git a/.changes/next-release/bugfix-afb46d2b-24c7-48be-94b1-02a7f56cbde0.json b/.changes/next-release/bugfix-afb46d2b-24c7-48be-94b1-02a7f56cbde0.json new file mode 100644 index 00000000000..090ccd90650 --- /dev/null +++ b/.changes/next-release/bugfix-afb46d2b-24c7-48be-94b1-02a7f56cbde0.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Q panel will get stuck while signin if users have multiple windows" +} \ No newline at end of file From 46f6b458b278816cf1b6506b4f791b58a4c11505 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Tue, 15 Apr 2025 23:36:34 -0700 Subject: [PATCH 6/6] r --- .../services/amazonq/toolwindow/AmazonQToolWindowFactory.kt | 3 ++- .../jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt | 2 +- .../jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt | 3 ++- .../aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt | 3 ++- .../jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt | 3 ++- .../amazonqFeatureDev/controller/FeatureDevController.kt | 2 +- .../src/software/aws/toolkits/jetbrains/services/cwc/App.kt | 3 ++- .../jetbrains/services/cwc/inline/InlineChatController.kt | 2 +- .../jetbrains/services/codemodernizer/CodeModernizerManager.kt | 2 +- .../jetbrains/services/codemodernizer/CodeTransformChatApp.kt | 3 ++- .../services/codewhisperer/QRegionProfileManagerTest.kt | 2 +- .../services/amazonq/profile/QRegionProfileManager.kt | 2 +- .../services/amazonq/profile/QRegionProfileSelectedListener.kt | 3 ++- 13 files changed, 20 insertions(+), 13 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt index 28fe55c98c3..f9279eb61be 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt @@ -95,7 +95,8 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware { project.messageBus.connect(toolWindow.disposable).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + // note we name myProject intentionally ow it will shadow the "project" provided by the IDE + override fun onProfileSelected(myProject: Project, profile: QRegionProfile?) { if (project.isDisposed) return AmazonQToolWindow.getInstance(project).disposeAndRecreate() qPanel.setContent(AmazonQToolWindow.getInstance(project).component) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt index a15b09cfc99..0aa8dc42b04 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeScan/CodeScanChatApp.kt @@ -147,7 +147,7 @@ class CodeScanChatApp(private val scope: CoroutineScope) : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt index 79773b30283..7972e45fb9c 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatApp.kt @@ -4,6 +4,7 @@ package software.aws.toolkits.jetbrains.services.amazonqCodeTest import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.project.Project import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection @@ -77,7 +78,7 @@ class CodeTestChatApp(private val scope: CoroutineScope) : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt index 90724408072..ed913374e08 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/DocApp.kt @@ -4,6 +4,7 @@ package software.aws.toolkits.jetbrains.services.amazonqDoc import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.project.Project import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection @@ -80,7 +81,7 @@ class DocApp : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt index 3565ee16981..c9fe08efc64 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt @@ -4,6 +4,7 @@ package software.aws.toolkits.jetbrains.services.amazonqFeatureDev import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.project.Project import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection @@ -81,7 +82,7 @@ class FeatureDevApp : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt index 5cab4a00173..75abc80ebf1 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt @@ -100,7 +100,7 @@ class FeatureDevController( context.project.messageBus.connect().subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt index 6fc01bd9f34..34bb6bca614 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt @@ -4,6 +4,7 @@ package software.aws.toolkits.jetbrains.services.cwc import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.project.Project import kotlinx.coroutines.flow.merge import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope @@ -81,7 +82,7 @@ class App : AmazonQApp { ApplicationManager.getApplication().messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { inboundAppMessagesHandler.processSessionClear() } } diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt index 72689cc309b..bf468976a2f 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatController.kt @@ -106,7 +106,7 @@ class InlineChatController( project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { sessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt index 95ae8ddaf2f..9b2db462a41 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt @@ -139,7 +139,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { stopModernize() codeTransformationSession?.let { Disposer.dispose(it) diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt index 9976833a12f..b102d348d11 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt @@ -4,6 +4,7 @@ package software.aws.toolkits.jetbrains.services.codemodernizer import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.project.Project import kotlinx.coroutines.flow.merge import kotlinx.coroutines.launch import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope @@ -167,7 +168,7 @@ class CodeTransformChatApp : AmazonQApp { context.project.messageBus.connect(this).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { chatSessionStorage.deleteAllSessions() } } diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt index efb97e4bdef..628ab8e36c9 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/QRegionProfileManagerTest.kt @@ -142,7 +142,7 @@ class QRegionProfileManagerTest { project.messageBus.connect(disposableRule.disposable).subscribe( QRegionProfileSelectedListener.TOPIC, object : QRegionProfileSelectedListener { - override fun onProfileSelected(profile: QRegionProfile?) { + override fun onProfileSelected(project: Project, profile: QRegionProfile?) { cnt += 1 } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt index f1a3110e60a..b3b242c363d 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileManager.kt @@ -146,7 +146,7 @@ class QRegionProfileManager : PersistentStateComponent, Disposabl ApplicationManager.getApplication().messageBus .syncPublisher(QRegionProfileSelectedListener.TOPIC) - .onProfileSelected(newProfile) + .onProfileSelected(project, newProfile) } private fun invalidateProfile(arn: String) { diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt index f3e92c11799..e507cd04a13 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileSelectedListener.kt @@ -3,6 +3,7 @@ package software.aws.toolkits.jetbrains.services.amazonq.profile +import com.intellij.openapi.project.Project import com.intellij.util.messages.Topic interface QRegionProfileSelectedListener { @@ -11,5 +12,5 @@ interface QRegionProfileSelectedListener { val TOPIC = Topic.create("QRegionProfileSelected", QRegionProfileSelectedListener::class.java) } - fun onProfileSelected(profile: QRegionProfile?) + fun onProfileSelected(project: Project, profile: QRegionProfile?) }