From 60a0abf9d0a1caf7d6e9194807ba7b6910815765 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Wed, 25 Feb 2026 12:16:16 -0800 Subject: [PATCH 1/7] fix: Merging code from aws-toolkit-jetbrains repository (#30) * fix(amazonq): Can't remove document listener (#6214) * fix(amazonq): Can't remove document listener * fix: updating the mockitoKotlin version for fixing ci builds * fix: upgrade mockito-kotlin to 6.2.3 and mockito-core to 5.20.0 - Update mockito from 5.12.0 to 5.20.0 - Update mockitoKotlin from 5.4.0 to 6.2.3 - Remove snapshot repository since we're using stable releases - Update CodeWhispererTestBase.kt to use mockito-kotlin 6.x API syntax This fixes failing CI tests caused by downgrading from 5.4.1-SNAPSHOT. * fix(tests): downgrade mockito to 5.x for CI stability (#6232) * fix(tests): downgrade mockito to 5.12.0 and mockito-kotlin to 5.4.0 for CI stability Downgrade from mockito-kotlin 6.2.3 to 5.4.0 (latest stable 5.x) and mockito-core from 5.20.0 to 5.12.0 to restore CI build stability without requiring extensive test migration to mockito-kotlin 6.x API. * fix(tests): downgrade mockito-kotlin to 5.4.0 for CI stability Downgrade mockito-kotlin from 6.2.3 to 5.4.0 (latest stable 5.x) to restore CI build stability without requiring extensive test migration to mockito-kotlin 6.x API. Keep mockito-core at 5.20.0. * fix(amazonq): Handle directory paths in user-configured Node.js runtime settings (#6217) * fix: Handle directory paths in user-configured Node.js runtime settings * fix: fix unit tests cases * fix: Unit test cases --------- Co-authored-by: chungjac * deps: deprecate IDE 243 / GW 252 (#6246) * fix(amazonq): adding changelog (#6247) Co-authored-by: chungjac * add info banner pointing to ATX (#6261) Co-authored-by: David Hasani * add info banner pointing to ATX (#6261) Co-authored-by: David Hasani * fix: test cases --------- Co-authored-by: chungjac Co-authored-by: David <60020664+dhasani23@users.noreply.github.com> Co-authored-by: David Hasani --- ...-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json | 4 + ...-ce0e09a5-9928-428a-8d0d-466db368ebb5.json | 4 + ...-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json | 4 + ...-8e1c9680-abc5-4e7b-a533-81608311af3b.json | 4 + .../src/main/kotlin/toolkit-detekt.gradle.kts | 2 +- .../clients/AmazonQStreamingClientTest.kt | 9 +- .../CodeWhispererCodeModernizerTestBase.kt | 7 + .../CodeWhispererSettingsTest.kt | 3 +- .../codewhisperer/CodeWhispererTestBase.kt | 37 ++--- .../src/mynah-ui/ui/tabs/generator.ts | 3 +- .../core/notification/MinimumVersionChange.kt | 65 +++++++++ .../services/amazonq/lsp/NodeExePatcher.kt | 41 +++++- .../TextDocumentServiceHandler.kt | 16 +-- .../amazonq/lsp/NodeExePatcherTest.kt | 80 +++++++++++ .../TextDocumentServiceHandlerTest.kt | 9 ++ .../src/main/resources/META-INF/plugin.xml | 2 + .../profiles/ProfileWatcherTest.kt | 2 + .../lambda/java/JavaLambdaBuilderTest.kt | 126 ++++++++++++++++++ settings.gradle.kts | 6 - 19 files changed, 379 insertions(+), 45 deletions(-) create mode 100644 .changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json create mode 100644 .changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json create mode 100644 .changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json create mode 100644 .changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json create mode 100644 plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notification/MinimumVersionChange.kt create mode 100644 plugins/toolkit/jetbrains-core/tst/software/aws/toolkits/jetbrains/services/lambda/java/JavaLambdaBuilderTest.kt diff --git a/.changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json b/.changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json new file mode 100644 index 000000000..833deea01 --- /dev/null +++ b/.changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Amazon Q: Fix race condition causing \"Can't remove document listener\" error during LSP restart" +} \ No newline at end of file diff --git a/.changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json b/.changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json new file mode 100644 index 000000000..d13cdac33 --- /dev/null +++ b/.changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences" +} \ No newline at end of file diff --git a/.changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json b/.changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json new file mode 100644 index 000000000..225788099 --- /dev/null +++ b/.changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path" +} \ No newline at end of file diff --git a/.changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json b/.changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json new file mode 100644 index 000000000..1829bf892 --- /dev/null +++ b/.changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json @@ -0,0 +1,4 @@ +{ + "type" : "deprecation", + "description" : "An upcoming release will remove support for JetBrains Gateway version 2025.2 and for IDEs based on the 2024.3 platform" +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/toolkit-detekt.gradle.kts b/buildSrc/src/main/kotlin/toolkit-detekt.gradle.kts index 4ada98452..9acd873a3 100644 --- a/buildSrc/src/main/kotlin/toolkit-detekt.gradle.kts +++ b/buildSrc/src/main/kotlin/toolkit-detekt.gradle.kts @@ -19,7 +19,7 @@ dependencies { // detekt with type introspection configured in kotlin conventions private val detektFiles = fileTree(projectDir).matching { include("**/*.kt", "**/*.kts") - exclude("**/build") + exclude("**/build", "**/bin") } detekt { diff --git a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/clients/AmazonQStreamingClientTest.kt b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/clients/AmazonQStreamingClientTest.kt index 182f0d729..2da3366e6 100644 --- a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/clients/AmazonQStreamingClientTest.kt +++ b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/clients/AmazonQStreamingClientTest.kt @@ -59,9 +59,11 @@ class AmazonQStreamingClientTest : AmazonQTestBase() { override fun setup() { super.setup() - // Allow Python paths on Windows for test environment (Python plugin scans for interpreters) + // Allow Python paths for test environment (Python plugin scans for interpreters) if (SystemInfo.isWindows) { VfsRootAccess.allowRootAccess(disposableRule.disposable, "C:/Program Files") + } else { + VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin") } amazonQStreamingClient = AmazonQStreamingClient.getInstance(projectRule.project) @@ -245,9 +247,12 @@ class AmazonQStreamingClientTest : AmazonQTestBase() { companion object { @JvmStatic @BeforeClass - fun allowWindowsPythonPaths() { + fun allowPythonPaths() { + // Allow Python paths for test environment (Python plugin scans for interpreters) if (SystemInfo.isWindows) { VfsRootAccess.allowRootAccess(Disposer.newDisposable(), "C:/Program Files") + } else { + VfsRootAccess.allowRootAccess(Disposer.newDisposable(), "/usr/bin", "/usr/local/bin") } } diff --git a/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerTestBase.kt b/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerTestBase.kt index fc67d265a..d3237bb76 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerTestBase.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerTestBase.kt @@ -246,6 +246,13 @@ open class CodeWhispererCodeModernizerTestBase( @Before open fun setup() { + // Allow Python paths for test environment (Python plugin scans for interpreters) + if (com.intellij.openapi.util.SystemInfo.isWindows) { + com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess.allowRootAccess(disposableRule.disposable, "C:/Program Files") + } else { + com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin") + } + project = projectRule.project toolkitConnectionManager = spy(ToolkitConnectionManager.getInstance(project)) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererSettingsTest.kt b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererSettingsTest.kt index 78c41f619..5b061355c 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererSettingsTest.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererSettingsTest.kt @@ -72,7 +72,8 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() { ) ToolWindowManager.getInstance(projectRule.project).registerToolWindow( RegisterToolWindowTask( - id = CodeWhispererCodeReferenceToolWindowFactory.id + id = CodeWhispererCodeReferenceToolWindowFactory.id, + shouldBeAvailable = false ) ) projectRule.project.service().updateWidget(CodeWhispererStatusBarWidgetFactory::class.java) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt index 8ec0abc6e..13a76338a 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt @@ -316,23 +316,26 @@ open class CodeWhispererTestBase { val psiFileCaptor = argumentCaptor() val latencyContextCaptor = argumentCaptor() - wheneverBlocking { - codewhispererService.getRequestContext( - triggerTypeCaptor.capture(), - editorCaptor.capture(), - projectCaptor.capture(), - psiFileCaptor.capture(), - latencyContextCaptor.capture() - ) - }.doSuspendableAnswer { - projectRule.fixture.type(userInput) - codewhispererService.getRequestContext( - triggerTypeCaptor.firstValue, - editorCaptor.firstValue, - projectRule.project, - psiFileCaptor.firstValue, - latencyContextCaptor.firstValue - ) + codewhispererService.stub { + onBlocking { + getRequestContext( + triggerTypeCaptor.capture(), + editorCaptor.capture(), + projectCaptor.capture(), + psiFileCaptor.capture(), + latencyContextCaptor.capture() + ) + } doSuspendableAnswer { + val requestContext = codewhispererService.getRequestContext( + triggerTypeCaptor.firstValue, + editorCaptor.firstValue, + projectRule.project, + psiFileCaptor.firstValue, + latencyContextCaptor.firstValue + ) + projectRule.fixture.type(userInput) + requestContext + } } } diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts index 11c3c2ab7..f91a272d1 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts @@ -48,7 +48,8 @@ export class TabDataGenerator { ], [ 'codetransform', - `Welcome to Code Transformation! **You can also run transformations from the command line. To install the tool, see the [documentation](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/run-CLI-transformations.html).**`, + `Welcome to Code Transformation! + **ℹ️ AWS Transform custom now available for Java upgrades. Agentic AI that handles version upgrades, SDK migration, and more, and improves with every execution. [Learn more](https://aws.amazon.com/transform/custom/)**`, ], ]) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notification/MinimumVersionChange.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notification/MinimumVersionChange.kt new file mode 100644 index 000000000..1c5e1da86 --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notification/MinimumVersionChange.kt @@ -0,0 +1,65 @@ +// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.core.notification + +import com.intellij.ide.util.PropertiesComponent +import com.intellij.notification.NotificationAction +import com.intellij.notification.NotificationGroupManager +import com.intellij.notification.NotificationType +import com.intellij.openapi.application.ApplicationInfo +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.ApplicationNamesInfo +import com.intellij.openapi.extensions.ExtensionNotApplicableException +import com.intellij.openapi.project.Project +import com.intellij.openapi.startup.StartupActivity +import software.aws.toolkits.resources.message + +class MinimumVersionChange @JvmOverloads constructor(isUnderTest: Boolean = false) : StartupActivity.DumbAware { + init { + if (ApplicationManager.getApplication().isUnitTestMode && !isUnderTest) { + throw ExtensionNotApplicableException.INSTANCE + } + } + + override fun runActivity(project: Project) { + if (System.getProperty(SKIP_PROMPT)?.toBoolean() == true) { + return + } + + // Setting is stored application wide + if (PropertiesComponent.getInstance().getBoolean(IGNORE_PROMPT)) { + return + } + + if (ApplicationInfo.getInstance().build.baselineVersion >= MIN_VERSION) { + return + } + + val title = message("aws.toolkit_deprecation.title") + val message = message( + "aws.toolkit_deprecation.message", + ApplicationNamesInfo.getInstance().fullProductName, + ApplicationInfo.getInstance().fullVersion, + MIN_VERSION_HUMAN + ) + + val notificationGroup = NotificationGroupManager.getInstance().getNotificationGroup("aws.toolkit_deprecation") + notificationGroup.createNotification(title, message, NotificationType.WARNING) + .addAction( + NotificationAction.createSimpleExpiring(message("general.notification.action.hide_forever")) { + PropertiesComponent.getInstance().setValue(IGNORE_PROMPT, true) + } + ) + .notify(project) + } + + companion object { + const val MIN_VERSION = 251 + const val MIN_VERSION_HUMAN = "2025.1" + + // Used by tests to make sure the prompt never shows up + const val SKIP_PROMPT = "aws.suppress_deprecation_prompt" + const val IGNORE_PROMPT = "aws.ignore_deprecation_prompt" + } +} diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcher.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcher.kt index ab39ddae9..42c478598 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcher.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcher.kt @@ -84,10 +84,14 @@ object NodeExePatcher { // attempt to use user provided node runtime path val nodeRuntime = LspSettings.getInstance().getNodeRuntimePath() if (!nodeRuntime.isNullOrEmpty()) { - LOG.info { "Using node from $nodeRuntime " } - - resolveNodeMetric(false, true) - return Path.of(nodeRuntime) + val userNodePath = resolveNodeExecutable(Path.of(nodeRuntime)) + if (userNodePath != null && validateNode(userNodePath) != null) { + LOG.info { "Using node from $userNodePath" } + resolveNodeMetric(false, true) + return userNodePath + } else { + LOG.warn { "User-specified node runtime path is invalid: $nodeRuntime" } + } } // attempt to use bundled node @@ -126,6 +130,35 @@ object NodeExePatcher { } } + /** + * Resolves a path to a Node.js executable. + * If the path is a directory, looks for node.exe (Windows) or node (Unix) inside it. + * If the path is a file, returns it if it exists and is executable. + * + * @param path The path to resolve (can be a directory or file path) + * @return Path? The resolved path to the node executable, or null if not found + */ + private fun resolveNodeExecutable(path: Path): Path? { + val exeName = if (SystemInfo.isWindows) "node.exe" else "node" + + return when { + Files.isDirectory(path) -> { + val nodePath = path.resolve(exeName) + if (Files.isRegularFile(nodePath) && Files.isExecutable(nodePath)) { + nodePath.toAbsolutePath() + } else { + LOG.debug { "Node executable not found in directory: $path" } + null + } + } + Files.isRegularFile(path) && Files.isExecutable(path) -> path.toAbsolutePath() + else -> { + LOG.debug { "Invalid node path: $path (not a file or directory)" } + null + } + } + } + /** * Locates node executable ≥18 in system PATH. * Uses IntelliJ's PathEnvironmentVariableUtil to find executables. diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt index 001ba34dd..2eb2e43ec 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt @@ -16,7 +16,6 @@ import com.intellij.openapi.fileEditor.FileEditorManagerEvent import com.intellij.openapi.fileEditor.FileEditorManagerListener import com.intellij.openapi.fileEditor.TextEditor import com.intellij.openapi.project.Project -import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Key import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager @@ -86,21 +85,12 @@ class TextDocumentServiceHandler( realTimeEdit(event) } } - ApplicationManager.getApplication().runReadAction { - FileDocumentManager.getInstance().getDocument(file)?.addDocumentListener(listener) + val document = ApplicationManager.getApplication().runReadAction { + FileDocumentManager.getInstance().getDocument(file) } + document?.addDocumentListener(listener, this) file.putUserData(KEY_REAL_TIME_EDIT_LISTENER, listener) - Disposer.register(this) { - ApplicationManager.getApplication().runReadAction { - val existingListener = file.getUserData(KEY_REAL_TIME_EDIT_LISTENER) - if (existingListener != null) { - tryOrNull { FileDocumentManager.getInstance().getDocument(file)?.removeDocumentListener(existingListener) } - file.putUserData(KEY_REAL_TIME_EDIT_LISTENER, null) - } - } - } - trySendIfValid { languageServer -> toUriString(file)?.let { uri -> languageServer.textDocumentService.didOpen( diff --git a/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcherTest.kt b/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcherTest.kt index c579b44f1..1d3db4385 100644 --- a/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcherTest.kt +++ b/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/NodeExePatcherTest.kt @@ -6,6 +6,7 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.process.ProcessOutput import com.intellij.execution.util.ExecUtil +import com.intellij.openapi.util.SystemInfo import com.intellij.testFramework.ApplicationRule import com.intellij.testFramework.rules.TempDirectory import com.intellij.testFramework.utils.io.createFile @@ -13,6 +14,7 @@ import com.intellij.util.system.CpuArch import io.mockk.every import io.mockk.junit4.MockKRule import io.mockk.mockk +import io.mockk.mockkObject import io.mockk.mockkStatic import io.mockk.slot import org.assertj.core.api.Assertions.assertThat @@ -22,6 +24,7 @@ import org.junit.Test import software.amazon.q.core.rules.EnvironmentVariableHelper import software.amazon.q.core.utils.exists import software.aws.toolkits.jetbrains.services.cwc.controller.chat.telemetry.getStartUrl +import software.aws.toolkits.jetbrains.settings.LspSettings import java.nio.file.Paths class NodeExePatcherTest { @@ -122,4 +125,81 @@ class NodeExePatcherTest { assertThat(NodeExePatcher.getNodeRuntimePath(mockk(), Paths.get(pathToNode))) .isNotEqualTo(Paths.get(pathToNode)) } + + @Test + fun `getNodeRuntimePath res olves node executable from user-provided directory path`() { + // Create a directory with node executable inside + val nodeDir = tempDir.newDirectory("nodejs").toPath().toAbsolutePath() + val exeName = if (SystemInfo.isWindows) "node.exe" else "node" + val nodeExe = Paths.get(nodeDir.toString(), exeName).createFile() + nodeExe.toFile().setExecutable(true) + + // Mock LspSettings to return the directory path (not the executable) + val mockLspSettings = mockk() + every { mockLspSettings.getNodeRuntimePath() } returns nodeDir.toString() + + mockkObject(LspSettings.Companion) + every { LspSettings.getInstance() } returns mockLspSettings + + mockkStatic(ExecUtil::class) + mockkStatic(::getStartUrl) + every { getStartUrl(any()) } returns "https://start.url" + every { ExecUtil.execAndGetOutput(any(), any()) } returns ProcessOutput("v99.0.0", "", 0, false, false) + + val result = NodeExePatcher.getNodeRuntimePath(mockk(), Paths.get(pathToNode)) + + // Should resolve to the node executable inside the directory + assertThat(result).isEqualTo(nodeExe.toAbsolutePath()) + } + + @Test + fun `getNodeRuntimePath falls back when user-provided directory has no node executable`() { + // Create an empty directory + val emptyDir = tempDir.newDirectory("empty-nodejs").toPath().toAbsolutePath() + + // Create a bundled node as fallback + val bundledNode = tempDir.newFile("bundled-node").toPath().toAbsolutePath() + + // Mock LspSettings to return the empty directory path + val mockLspSettings = mockk() + every { mockLspSettings.getNodeRuntimePath() } returns emptyDir.toString() + + mockkObject(LspSettings.Companion) + every { LspSettings.getInstance() } returns mockLspSettings + + mockkStatic(ExecUtil::class) + mockkStatic(::getStartUrl) + every { getStartUrl(any()) } returns "https://start.url" + every { ExecUtil.execAndGetOutput(any(), any()) } returns ProcessOutput("v99.0.0", "", 0, false, false) + + val result = NodeExePatcher.getNodeRuntimePath(mockk(), bundledNode) + + // Should fall back to bundled node since directory has no node executable + assertThat(result).isEqualTo(bundledNode) + } + + @Test + fun `getNodeRuntimePath uses user-provided executable path directly`() { + // Create a node executable file directly + val exeName = if (SystemInfo.isWindows) "node.exe" else "node" + val nodeExe = tempDir.newFile(exeName).toPath().toAbsolutePath() + nodeExe.toFile().setExecutable(true) + + // Mock LspSettings to return the executable path directly + val mockLspSettings = mockk() + every { mockLspSettings.getNodeRuntimePath() } returns nodeExe.toString() + + mockkObject(LspSettings.Companion) + every { LspSettings.getInstance() } returns mockLspSettings + + mockkStatic(ExecUtil::class) + mockkStatic(::getStartUrl) + every { getStartUrl(any()) } returns "https://start.url" + every { ExecUtil.execAndGetOutput(any(), any()) } returns ProcessOutput("v99.0.0", "", 0, false, false) + + val result = NodeExePatcher.getNodeRuntimePath(mockk(), Paths.get(pathToNode)) + + // Should use the user-provided executable path + assertThat(result).isEqualTo(nodeExe.toAbsolutePath()) + } } diff --git a/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandlerTest.kt b/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandlerTest.kt index e25385dfe..64bd2be6d 100644 --- a/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandlerTest.kt +++ b/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandlerTest.kt @@ -9,9 +9,11 @@ import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx import com.intellij.openapi.fileTypes.FileType import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.SystemInfo import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.newvfs.events.VFileContentChangeEvent import com.intellij.openapi.vfs.newvfs.events.VFileEvent +import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess import com.intellij.openapi.vfs.writeText import com.intellij.testFramework.DisposableRule import com.intellij.testFramework.LightVirtualFile @@ -79,6 +81,13 @@ class TextDocumentServiceHandlerTest { @Before fun setup() { + // Allow Python paths for test environment (Python plugin scans for interpreters) + if (SystemInfo.isWindows) { + VfsRootAccess.allowRootAccess(disposableRule.disposable, "C:/Program Files") + } else { + VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin") + } + mockTextDocumentService = mockk() mockLanguageServer = mockk() diff --git a/plugins/amazonq/src/main/resources/META-INF/plugin.xml b/plugins/amazonq/src/main/resources/META-INF/plugin.xml index e859f505b..c7c1abb23 100644 --- a/plugins/amazonq/src/main/resources/META-INF/plugin.xml +++ b/plugins/amazonq/src/main/resources/META-INF/plugin.xml @@ -146,6 +146,8 @@ + + Date: Thu, 26 Feb 2026 16:53:59 -0800 Subject: [PATCH 2/7] ci: add missing version bump commits for 3.103 release (#6267) * Updating version to 3.103 * Updating SNAPSHOT version to 3.104-SNAPSHOT --------- Co-authored-by: aws-toolkit-automation <> --- .changes/3.103.json | 17 +++++++++++++++++ ...ix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json | 4 ---- ...ix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json | 4 ---- ...ix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json | 4 ---- ...on-8e1c9680-abc5-4e7b-a533-81608311af3b.json | 4 ---- CHANGELOG.md | 6 ++++++ 6 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 .changes/3.103.json delete mode 100644 .changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json delete mode 100644 .changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json delete mode 100644 .changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json delete mode 100644 .changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json diff --git a/.changes/3.103.json b/.changes/3.103.json new file mode 100644 index 000000000..f9899ac44 --- /dev/null +++ b/.changes/3.103.json @@ -0,0 +1,17 @@ +{ + "date" : "2026-02-12", + "version" : "3.103", + "entries" : [ { + "type" : "bugfix", + "description" : "Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences" + }, { + "type" : "bugfix", + "description" : "Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path" + }, { + "type" : "bugfix", + "description" : "Amazon Q: Fix race condition causing \"Can't remove document listener\" error during LSP restart" + }, { + "type" : "deprecation", + "description" : "An upcoming release will remove support for JetBrains Gateway version 2025.2 and for IDEs based on the 2024.3 platform" + } ] +} \ No newline at end of file diff --git a/.changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json b/.changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json deleted file mode 100644 index 833deea01..000000000 --- a/.changes/next-release/bugfix-c3a7b1a9-1d2e-45cf-971c-513e19b7094e.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type" : "bugfix", - "description" : "Amazon Q: Fix race condition causing \"Can't remove document listener\" error during LSP restart" -} \ No newline at end of file diff --git a/.changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json b/.changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json deleted file mode 100644 index d13cdac33..000000000 --- a/.changes/next-release/bugfix-ce0e09a5-9928-428a-8d0d-466db368ebb5.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type" : "bugfix", - "description" : "Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences" -} \ No newline at end of file diff --git a/.changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json b/.changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json deleted file mode 100644 index 225788099..000000000 --- a/.changes/next-release/bugfix-f6e1a4dd-64e2-41c6-8538-a7f2c2c2eb67.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type" : "bugfix", - "description" : "Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path" -} \ No newline at end of file diff --git a/.changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json b/.changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json deleted file mode 100644 index 1829bf892..000000000 --- a/.changes/next-release/deprecation-8e1c9680-abc5-4e7b-a533-81608311af3b.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type" : "deprecation", - "description" : "An upcoming release will remove support for JetBrains Gateway version 2025.2 and for IDEs based on the 2024.3 platform" -} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f1f996d20..d582c279c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# _3.103_ (2026-02-12) +- **(Bug Fix)** Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences +- **(Bug Fix)** Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path +- **(Bug Fix)** Amazon Q: Fix race condition causing "Can't remove document listener" error during LSP restart +- **(Deprecation)** An upcoming release will remove support for JetBrains Gateway version 2025.2 and for IDEs based on the 2024.3 platform + # _3.102_ (2026-01-15) # _3.101_ (2026-01-09) From 4c4786e6059aa3100cec5d2b3de1040a25694312 Mon Sep 17 00:00:00 2001 From: Will Lo <96078566+Will-ShaoHua@users.noreply.github.com> Date: Fri, 27 Feb 2026 14:21:51 -0800 Subject: [PATCH 3/7] build(ci): windows unit test failure File accessed outside allowed roots: C:/Program Files/pypy3.11-v7.3.20-win64/python.exe (#6273) * fix: windows unit test failure File accessed outside allowed roots: file://C:/Program Files/pypy3.11-v7.3.20-win64/python.exe * r --- .../services/codewhisperer/CodeWhispererTestBase.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt index 13a76338a..3302bb7a9 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt @@ -117,7 +117,13 @@ open class CodeWhispererTestBase { @Before open fun setUp() = runTest { mockLanguageServer = mockk() - VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin", "C:/Program Files/pypy3.10-v7.3.17-win64") + VfsRootAccess.allowRootAccess( + disposableRule.disposable, + "/usr/bin", + "/usr/local/bin", + "C:/Program Files/pypy3.10-v7.3.17-win64", + "C:/Program Files/pypy3.11-v7.3.20-win64" + ) val starter = object : AmazonQServerInstanceStarter { override fun start( project: Project, From ea328d5060fb9e25651f85e641faf0720888e24a Mon Sep 17 00:00:00 2001 From: aws-toolkit-automation <> Date: Fri, 27 Feb 2026 22:28:02 +0000 Subject: [PATCH 4/7] Updating version to 3.104 --- .changes/3.104.json | 5 +++++ CHANGELOG.md | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 .changes/3.104.json diff --git a/.changes/3.104.json b/.changes/3.104.json new file mode 100644 index 000000000..b4af90336 --- /dev/null +++ b/.changes/3.104.json @@ -0,0 +1,5 @@ +{ + "date" : "2026-02-27", + "version" : "3.104", + "entries" : [ ] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index d582c279c..eb2d4a4fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +# _3.104_ (2026-02-27) + # _3.103_ (2026-02-12) - **(Bug Fix)** Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences - **(Bug Fix)** Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path From 47bca8192cfee840fb1c5dcb1492b244cc696051 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Tue, 3 Mar 2026 14:02:15 -0800 Subject: [PATCH 5/7] fix(amazonq): Fix for incorrect TriggerToResponseLatencyMilliseconds values in JetBrains telemetry (#6260) * fix(amazonq): adding changelog * fix(amazonq): Fix for incorrect TriggerToResponseLatencyMilliseconds values in JetBrains telemetry --------- Co-authored-by: chungjac --- .../codewhisperer/model/CodeWhispererModel.kt | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt index d96c8006b..10395b7bf 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt @@ -219,20 +219,31 @@ data class LatencyContext( var firstRequestId: String = "", ) { - fun getCodeWhispererEndToEndLatency() = TimeUnit.NANOSECONDS.toMillis( - codewhispererEndToEndEnd - codewhispererEndToEndStart - ).toDouble() + fun getCodeWhispererEndToEndLatency(): Double { + // Guard against uninitialized timestamps which would result in incorrect latency values + if (codewhispererEndToEndStart == 0L || codewhispererEndToEndEnd == 0L) { + return 0.0 + } + return TimeUnit.NANOSECONDS.toMillis( + codewhispererEndToEndEnd - codewhispererEndToEndStart + ).toDouble() + } // For auto-trigger it's from the time when last char typed // for manual-trigger it's from the time when last trigger action happened(alt + c) - fun getPerceivedLatency(triggerType: CodewhispererTriggerType) = - if (triggerType == CodewhispererTriggerType.OnDemand) { + fun getPerceivedLatency(triggerType: CodewhispererTriggerType): Double { + // Guard against uninitialized timestamps which would result in incorrect latency values + if (codewhispererEndToEndEnd == 0L) { + return 0.0 + } + return if (triggerType == CodewhispererTriggerType.OnDemand) { getCodeWhispererEndToEndLatency() } else { TimeUnit.NANOSECONDS.toMillis( codewhispererEndToEndEnd - CodeWhispererAutoTriggerService.getInstance().timeAtLastCharTyped ).toDouble() } + } } data class TryExampleRowContext( From eac9858286ab7d389e16c766270131220fa7184f Mon Sep 17 00:00:00 2001 From: chungjac Date: Thu, 5 Mar 2026 13:34:50 -0800 Subject: [PATCH 6/7] build: drop support for 243 (#6248) * build: drop support for 243 * fix: remove 2024.3 * fix: FIX_WHEN_MIN_IS_252 --- ...-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json | 4 ++ .github/workflows/prerelease.yml | 2 +- .../Run Amazon Q - Community [2024.3].run.xml | 25 ----------- .run/Run Amazon Q - Rider [2024.3].run.xml | 25 ----------- .run/Run Amazon Q - Ultimate [2024.3].run.xml | 25 ----------- .run/generateConfigs.py | 2 +- .../aws/toolkits/gradle/BuildScriptUtils.kt | 1 - .../toolkits/gradle/intellij/IdeVersions.kt | 43 ------------------- kotlinResolution.settings.gradle.kts | 2 +- settings.gradle.kts | 2 +- 10 files changed, 8 insertions(+), 123 deletions(-) create mode 100644 .changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json delete mode 100644 .run/Run Amazon Q - Community [2024.3].run.xml delete mode 100644 .run/Run Amazon Q - Rider [2024.3].run.xml delete mode 100644 .run/Run Amazon Q - Ultimate [2024.3].run.xml diff --git a/.changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json b/.changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json new file mode 100644 index 000000000..8405092e2 --- /dev/null +++ b/.changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json @@ -0,0 +1,4 @@ +{ + "type" : "removal", + "description" : "Removed support for 2024.3.x IDEs and Gateway 2025.2" +} \ No newline at end of file diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 8d902b7cd..2998a4170 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: build_target: [ ':plugin-amazonq:buildPlugin' ] - version: [ '2024.3', '2025.1', '2025.2', '2025.3' ] + version: [ '2025.1', '2025.2', '2025.3' ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.run/Run Amazon Q - Community [2024.3].run.xml b/.run/Run Amazon Q - Community [2024.3].run.xml deleted file mode 100644 index 4f6b86d32..000000000 --- a/.run/Run Amazon Q - Community [2024.3].run.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - false - true - false - false - - - \ No newline at end of file diff --git a/.run/Run Amazon Q - Rider [2024.3].run.xml b/.run/Run Amazon Q - Rider [2024.3].run.xml deleted file mode 100644 index 9e64b94c3..000000000 --- a/.run/Run Amazon Q - Rider [2024.3].run.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - false - true - false - false - - - \ No newline at end of file diff --git a/.run/Run Amazon Q - Ultimate [2024.3].run.xml b/.run/Run Amazon Q - Ultimate [2024.3].run.xml deleted file mode 100644 index 689136705..000000000 --- a/.run/Run Amazon Q - Ultimate [2024.3].run.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - false - true - false - false - - - \ No newline at end of file diff --git a/.run/generateConfigs.py b/.run/generateConfigs.py index abbb793ca..05b766bbf 100644 --- a/.run/generateConfigs.py +++ b/.run/generateConfigs.py @@ -52,7 +52,7 @@ def write_config(mv: str, ide: IdeVariant, plugin: PluginVariant): f.write(TEMPLATE.format(plugin = plugin, variant = ide, major_version = mv)) if __name__ == '__main__': - mvs = ["2024.3", "2025.1", "2025.2", "2025.3"] + mvs = ["2025.1", "2025.2", "2025.3"] ides = [ IdeVariant("Community", "IC"), IdeVariant("Rider", "RD"), diff --git a/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/BuildScriptUtils.kt b/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/BuildScriptUtils.kt index 30d318728..96c016a28 100644 --- a/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/BuildScriptUtils.kt +++ b/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/BuildScriptUtils.kt @@ -28,7 +28,6 @@ fun Project.jvmTarget(): Provider = withCurrentProfileName { // https://plugins.jetbrains.com/docs/intellij/using-kotlin.html#stdlib-miscellaneous fun Project.kotlinTarget(): Provider = withCurrentProfileName { when (it) { - "2024.3" -> KotlinVersionEnum.KOTLIN_2_0 "2025.1", "2025.2", "2025.3" -> KotlinVersionEnum.KOTLIN_2_1 else -> error("not set") }.version diff --git a/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/IdeVersions.kt b/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/IdeVersions.kt index 4ed6d061b..b0930bc93 100644 --- a/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/IdeVersions.kt +++ b/buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/IdeVersions.kt @@ -26,45 +26,6 @@ object IdeVersions { ) private val ideProfiles = listOf( - Profile( - name = "2024.3", - community = ProductProfile( - sdkVersion = "2024.3", - bundledPlugins = commonPlugins + listOf( - "com.intellij.java", - "com.intellij.gradle", - "org.jetbrains.idea.maven", - ), - marketplacePlugins = listOf( - "org.toml.lang:243.21565.122", - "PythonCore:243.21565.211", - "Docker:243.21565.204", - "com.intellij.modules.json:243.26574.91" - ) - ), - ultimate = ProductProfile( - sdkVersion = "2024.3", - bundledPlugins = commonPlugins + listOf( - "JavaScript", - "JavaScriptDebugger", - "com.intellij.database", - "com.jetbrains.codeWithMe", - ), - marketplacePlugins = listOf( - "org.toml.lang:243.21565.122", - "Pythonid:243.21565.211", - "org.jetbrains.plugins.go:243.21565.211", - "com.intellij.modules.json:243.26574.91" - ) - ), - rider = RiderProfile( - sdkVersion = "2024.3", - bundledPlugins = commonPlugins, - netFrameworkTarget = "net472", - rdGenVersion = "2024.3.0", - nugetVersion = " 2024.3.0" - ) - ), Profile( name = "2025.1", community = ProductProfile( @@ -109,10 +70,6 @@ object IdeVersions { ), Profile( name = "2025.2", - gateway = ProductProfile( - sdkVersion = "2025.2", - bundledPlugins = listOf("org.jetbrains.plugins.terminal") - ), community = ProductProfile( sdkVersion = "2025.2", bundledPlugins = commonPlugins + listOf( diff --git a/kotlinResolution.settings.gradle.kts b/kotlinResolution.settings.gradle.kts index 3023d2002..04c5efe22 100644 --- a/kotlinResolution.settings.gradle.kts +++ b/kotlinResolution.settings.gradle.kts @@ -6,7 +6,7 @@ dependencyResolutionManagement { maybeCreate("libs").apply { // pull value from IJ library list: https://github.com/JetBrains/intellij-community/blob//.idea/libraries/kotlinx_coroutines_core.xml val version = when (providers.gradleProperty("ideProfileName").getOrNull() ?: return@apply) { - "2024.3", "2025.1" -> { + "2025.1" -> { "1.8.0-intellij-11" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 919bd134d..68f5f1bd6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -164,7 +164,7 @@ file("plugins").listFiles()?.forEach root@ { if (it.name == "jetbrains-gateway") { when (providers.gradleProperty("ideProfileName").get()) { // buildSrc is evaluated after settings so we can't key off of IdeVersions.kt - "2024.3", "2025.1" -> { + "2025.1", "2025.2" -> { return@forEach } } From 761bedc2229d687109866230856d2f712aebdb47 Mon Sep 17 00:00:00 2001 From: aws-toolkit-automation <> Date: Fri, 6 Mar 2026 00:22:29 +0000 Subject: [PATCH 7/7] Updating version to 3.105 --- .changes/3.105.json | 8 ++++++++ .../removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json | 4 ---- CHANGELOG.md | 3 +++ 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 .changes/3.105.json delete mode 100644 .changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json diff --git a/.changes/3.105.json b/.changes/3.105.json new file mode 100644 index 000000000..9cbbd8d20 --- /dev/null +++ b/.changes/3.105.json @@ -0,0 +1,8 @@ +{ + "date" : "2026-03-06", + "version" : "3.105", + "entries" : [ { + "type" : "removal", + "description" : "Removed support for 2024.3.x IDEs and Gateway 2025.2" + } ] +} \ No newline at end of file diff --git a/.changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json b/.changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json deleted file mode 100644 index 8405092e2..000000000 --- a/.changes/next-release/removal-6d8da6d5-5620-42d4-89ae-1f2ce5128946.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type" : "removal", - "description" : "Removed support for 2024.3.x IDEs and Gateway 2025.2" -} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index eb2d4a4fb..862e2009d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# _3.105_ (2026-03-06) +- **(Removal)** Removed support for 2024.3.x IDEs and Gateway 2025.2 + # _3.104_ (2026-02-27) # _3.103_ (2026-02-12)