Skip to content

Commit 6199575

Browse files
authored
Merge branch 'main' into rli/intellij-gradle-2
2 parents 0b028bd + ca342d3 commit 6199575

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix infinite restart loop on <=241 when an incompatible version of AWS Toolkit is installed alongside Amazon Q (#4519)"
4+
}

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/PluginVersionChecker.kt

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import software.aws.toolkits.core.utils.warn
2121
import software.aws.toolkits.jetbrains.AwsToolkit.TOOLKIT_PLUGIN_ID
2222
import software.aws.toolkits.jetbrains.core.plugin.PluginUpdateManager
2323
import software.aws.toolkits.resources.message
24+
import javax.swing.SwingUtilities
2425

2526
class PluginVersionChecker : ApplicationInitializedListener {
2627
override suspend fun execute(asyncScope: CoroutineScope) {
@@ -51,19 +52,14 @@ class PluginVersionChecker : ApplicationInitializedListener {
5152

5253
// defensively disable the old toolkit if we couldn't update it because we might deadlock during project open
5354
val toolkit = mismatch.firstOrNull { it.id == TOOLKIT_PLUGIN_ID && it.version?.startsWith("2.") == true }
54-
val shouldDisableToolkit = (toolkit != null && updated.none { it == toolkit })
55-
if (shouldDisableToolkit) {
56-
LOG.info { "Attempting to disable aws.toolkit due to known incompatibility" }
57-
val descriptor = toolkit?.descriptor as? IdeaPluginDescriptor
58-
59-
descriptor?.let {
60-
PluginEnabler.getInstance().disable(listOf(descriptor))
61-
} ?: LOG.warn { "Expected toolkit descriptor to be IdeaPluginDescriptor, but was ${toolkit?.descriptor}" }
62-
}
6355

64-
if (shouldDisableToolkit || updated.isNotEmpty()) {
56+
if (shouldDisableToolkit(toolkit, updated) || updated.isNotEmpty()) {
6557
LOG.info { "Restarting due to forced update of plugins" }
66-
ApplicationManagerEx.getApplicationEx().restart(true)
58+
59+
// IDE invokeLater is not initialized yet
60+
SwingUtilities.invokeAndWait {
61+
ApplicationManagerEx.getApplicationEx().restart(true)
62+
}
6763
return
6864
}
6965

@@ -82,7 +78,7 @@ class PluginVersionChecker : ApplicationInitializedListener {
8278
coreDescriptor?.let { descriptor -> PluginUpdateManager.updatePlugin(descriptor, EmptyProgressIndicator()) }
8379
}
8480

85-
PluginEnabler.getInstance().disable(
81+
PluginEnabler.HEADLESS.disable(
8682
AwsToolkit.PLUGINS_INFO.values.mapNotNull {
8783
val descriptor = it.descriptor as? IdeaPluginDescriptor
8884
if (descriptor != null && descriptor != core.descriptor) {
@@ -97,6 +93,26 @@ class PluginVersionChecker : ApplicationInitializedListener {
9793
}
9894
}
9995

96+
private fun shouldDisableToolkit(toolkit: PluginInfo?, updated: List<PluginInfo>): Boolean {
97+
if (toolkit != null && updated.none { it == toolkit }) {
98+
LOG.info { "Attempting to disable aws.toolkit due to known incompatibility" }
99+
val descriptor = toolkit.descriptor as? IdeaPluginDescriptor ?: run {
100+
LOG.warn { "Expected toolkit descriptor to be IdeaPluginDescriptor, but was ${toolkit.descriptor}" }
101+
return false
102+
}
103+
104+
if (!descriptor.isEnabled) {
105+
LOG.info { "Does not need to disable toolkit since it is already disabled" }
106+
return false
107+
}
108+
109+
PluginEnabler.HEADLESS.disable(listOf(descriptor))
110+
return true
111+
}
112+
113+
return false
114+
}
115+
100116
companion object {
101117
private val LOG = getLogger<PluginVersionChecker>()
102118
}

0 commit comments

Comments
 (0)