-
Notifications
You must be signed in to change notification settings - Fork 274
feat(jetbrains): Add 2025.3 refresh #6098
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Remove com.jetbrains.codeWithMe from bundledPlugins (not available in 2025.3 EAP) - Version-segregate RebuildDevfileRequiredNotification to src-253+ (Code With Me APIs unavailable)
Use version string (253.28294-EAP-CANDIDATE-SNAPSHOT) instead of build number (253.28294.92)
OAuth APIs split into separate modules in 253: - intellij.platform.collaborationTools - intellij.platform.collaborationTools.auth.base - intellij.platform.collaborationTools.auth These must be explicitly bundled for compilation.
httpPost API signature incompatibility in coroutine context. Use ByteArray overload instead of OutputStream lambda. - src/: Original implementation for 2024.3-2025.2 - src-253+/: Updated for 2025.3+ using httpPost ByteArray overload
Move OTelService out of base src/ to version-specific folders: - src-242-252/: Original implementation for 2024.2-2025.2 - src-253+/: Updated implementation for 2025.3+ Gradle source sets include base src/ by default, causing redeclaration when src-253+ also exists. Files must be removed from src/ and placed in version ranges.
Move out of base src/ to version-specific folders: - src-242-252/: Working implementation for 2024.2-2025.2 - src-253+/: Commented out for 2025.3 (Code With Me APIs unavailable) Same pattern as OTelService - base src/ always included causes redeclaration when version-specific folders exist.
Replace deprecated RD platform APIs with standard Kotlin coroutines: - launchChildSyncIOBackground → scope.launch / lifetime.launch - startChildSyncIOBackgroundAsync → lifetime.launch Files: - src-242-252/: Original implementation for 2024.2-2025.2 - src-253+/: Updated for 2025.3+ with standard coroutines Affects: CawsConnectionProvider.kt, CawsConnectorViewPanels.kt Functionality: Identical - only internal API changes
JUnit5 ProjectExtension removed in 2025.3. Migrate to HeavyPlatformTestCase (JUnit4) for affected tests. Files segregated: - AwsToolkitExplorerToolWindowTest.kt - GettingStartedOnStartupTest.kt - JavaTestUtils.kt Structure: - tst-242-252/: Original JUnit5 tests for 2024.2-2025.2 - tst-253+/: Updated JUnit4 tests for 2025.3+
Migrate ProjectExtension tests to HeavyPlatformTestCase for 2025.3. Files segregated: - BrowserMessageTest.kt - LoginBrowserTest.kt - DefaultToolkitAuthManagerTest.kt - IdcRolePopupTest.kt - SetupAuthenticationDialogTest.kt Structure: - tst-242-252/: JUnit5 with ProjectExtension (2024.2-2025.2) - tst-253+/: JUnit4 with HeavyPlatformTestCase (2025.3+)
Auto-corrected formatting and style issues in migrated test files.
- Add api(libs.lsp4j) to amazonq/shared module - Add implementation(libs.lsp4j) to amazonq/codewhisperer module - Resolves unresolved reference errors for LSP types
- CodeCatalystGatewayClientCustomizer: GatewayClientCustomizationProvider API removed - DevEnvStatusWatcher: UnattendedStatusUtil API removed, use fallback values - GoHelper: Go debugger APIs changed, throw UnsupportedOperationException - NodeJsDebugSupport: NodeJS debugger APIs changed, stub implementation src-242-252: Original working implementations src-253+: Stubbed/disabled implementations with TODOs
- CodeWhispererService/ServiceNew: VirtualFile nullability fixes - ArtifactManagerTest: ProjectExtension -> HeavyPlatformTestCase - DefaultAuthCredentialsServiceTest: ProjectExtension -> HeavyPlatformTestCase - RedshiftUtilsTest: ProjectExtension -> HeavyPlatformTestCase src-242-252/tst-242-252: Original JUnit5 implementations src-253+/tst-253+: Fixed implementations with null checks and JUnit4
…e file Previous commit accidentally copied test file instead of service file to src-253+
These files only have null-safety changes that work in all versions: - CodeWhispererService.kt, CodeWhispererServiceNew.kt - AmazonQLanguageClientImpl.kt, TextDocumentServiceHandler.kt Keep CwmProblemsViewMutator.kt segregated (BackendToolWindowHost API removed)
- BrowserConnector.kt: Fix 2 VirtualFile null checks - LanguageExtractor.kt: Add null check with plaintext fallback - FocusAreaContextExtractor.kt: Add null check with unknown fallback - Segregate CodeInsightsSettingsFacadeTest.kt and CodeWhispererUtilTest.kt (ProjectExtension removed in 2025.3)
Replace ProjectExtension with CodeInsightTestFixture approach: - Use IdeaTestFixtureFactory to create lightweight fixture - Manual initialization of mock extensions after fixture setup - Migrate test methods to JUnit naming convention (test prefix) - Add proper tearDown to clean up mocks and fixture
Windows Python plugin scans for interpreters during test startup, needs access to C:/Program Files for PyPy detection
Python plugin scans during IDE startup, before @before runs. Use @BeforeClass with Disposer.newDisposable() to allow access earlier.
Same issue as AmazonQStreamingClientTest - Python plugin scans for interpreters during IDE startup, attempting to access paths outside allowed test roots. Added @BeforeAll method (JUnit5 equivalent of @BeforeClass) to allow C:/Program Files access on Windows before IDE initialization.
9117dad to
51ad4f9
Compare
| val requestFromUi = serializer.deserializeChatMessages<SendChatPromptRequest>(node) | ||
| val editor = FileEditorManager.getInstance(project).selectedTextEditor | ||
| val textDocumentIdentifier = editor?.let { TextDocumentIdentifier(toUriString(it.virtualFile)) } | ||
| val textDocumentIdentifier = editor?.virtualFile?.let { TextDocumentIdentifier(toUriString(it)) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this method call is obsolete
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this use the relative path approach instead, like in AmazonQLanguageClientImpl.kt?
kotlin
val textDocumentIdentifier = editor?.virtualFile?.let { virtualFile ->
val relativePath = VfsUtilCore.getRelativePath(virtualFile, project.baseDir)
?: virtualFile.path
TextDocumentIdentifier(relativePath)
}
Or is there a different preferred method?
| }.orEmpty(), | ||
| ).apply { | ||
| textDocument = TextDocumentIdentifier(toUriString(editor.virtualFile)) | ||
| textDocument = TextDocumentIdentifier(toUriString(editor.virtualFile ?: return@compute null)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
compute block should not return null
...rc-253+/software/aws/toolkits/jetbrains/remoteDev/caws/RebuildDevfileRequiredNotification.kt
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is a regression
| val output = ByteArrayOutputStream() | ||
| item.writeBinaryTo(output) | ||
|
|
||
| httpPost(traceUrl, contentType = ContentType.XProtobuf, body = output.toByteArray()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
follow up: don't need to copy entire file for this change
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
follow up: don't need to copy entire file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
follow up: don't need to copy entire file
| lifetime.launchOnUi { | ||
| loadingPanel.startLoading() | ||
| var panel: JComponent? = null | ||
| CoroutineScope(getCoroutineBgContext() + SupervisorJob()).launch { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
coroutine scope should be injected by service loader, not a new supervisor job
|
|
||
| @ExperimentalTime | ||
| class CawsConnectionProvider : GatewayConnectionProvider { | ||
| private val scope = CoroutineScope(getCoroutineBgContext() + SupervisorJob()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
coroutine scope should be injected by service loader, not a new supervisor job
| @Suppress("UNUSED_VARIABLE") | ||
| val fileFinder = RemoteDebuggingFileFinder(mappings, LocalFileSystemFileFinder()) | ||
|
|
||
| // STUB IMPLEMENTATION: NodeJS debugging temporarily disabled |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should not be doing this; breaks nodejs 20 debug support
| // TODO: GatewayClientCustomizationProvider removed in 2025.3 - investigate new Gateway customization APIs | ||
| /* | ||
| import com.intellij.openapi.extensions.ExtensionNotApplicableException | ||
| import com.jetbrains.rdserver.unattendedHost.customization.controlCenter.GatewayClientCustomizationProvider |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
enable com.jetbrains.codeWithMe
and use com.jetbrains.rdserver.unattendedHost.customization.GatewayClientCustomizationProvider
|
|
||
| class CwmProblemsViewMutator : ProblemsViewMutator { | ||
| override fun mutateProblemsView(project: Project, runnable: (ToolWindow) -> Unit) { | ||
| ProblemsView.getToolWindow(project)?.let { runnable(it) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BackendToolWindowHost is available with codeWithMe in the ultimate module
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LifetimedService is available by adding
intellijPlatform {
bundledModule("intellij.rd.platform")
}There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Follow up : can remove 242-252
- Add com.jetbrains.codeWithMe plugin dependency to IdeVersions - Replace toUriString with relative path calculation in BrowserConnector - Extract virtualFile validation outside ReadAction in CodeWhisperer services - Move CwmProblemsViewMutator to jetbrains-ultimate with BackendToolWindowHost - Update CodeCatalyst Gateway customization to use new property-based API - Re-enable RebuildDevfileRequiredNotification with updated RD platform APIs Addresses PR aws#6098 review comments
The intellij.rd.platform bundled module only exists in IDE versions 2025.2 and later. This change makes the dependency conditional to prevent build failures on earlier IDE versions (2024.3, 2025.1).
Add space after comma in version string list to comply with detekt code style requirements.
This file was already moved to jetbrains-ultimate but the old version in src-242-252 was not deleted, causing duplicate class errors in the coverage report for IDE versions 2024.2-2025.2.
… JaCoCo coverage for IDE versions 2024.2-2025.2
|
requires significant follow-up for cleanup |
Summary
Add 2025.3 support with latest EAP snapshot (253.28294)
Supersedes #6052 - Complete rewrite with proper version segregation and API compatibility handling.
Changes
Platform Configuration:
• Add 2025.3 profile with build 253.28294
• Configure Kotlin 2.1 and coroutines 1.10.1-intellij-5
• Remove com.jetbrains.codeWithMe bundled plugin dependency for 2025.3 (not available in EAP)
• Bundle collaboration modules for 2025.3 (intellij.platform.collaborationTools, collaborationTools.auth.base, collaborationTools.auth)
• Fix Gateway SDK version to use version string (253.28294-EAP-CANDIDATE-SNAPSHOT) instead of build number
Version Segregation (src-242-252 / src-253+):
Core Platform:
• OTelService.kt - httpPost API signature change (ByteArray overload)
• RebuildDevfileRequiredNotification.kt - Code With Me APIs unavailable
Gateway/Remote Development:
• CawsConnectionProvider.kt, CawsConnectorViewPanels.kt - replace deprecated RD APIs with Kotlin coroutines
• CodeCatalystGatewayClientCustomizer.kt - GatewayClientCustomizationProvider API removed
• DevEnvStatusWatcher.kt - UnattendedStatusUtil API removed
AmazonQ:
• CwmProblemsViewMutator.kt - BackendToolWindowHost → ProblemsView.getToolWindow
• Add LSP4J dependency to amazonq/shared and amazonq/codewhisperer modules
AmazonQ Chat:
• BrowserConnector.kt - VirtualFile nullability fixes (2 locations)
• LanguageExtractor.kt - VirtualFile nullability with plaintext fallback
• FocusAreaContextExtractor.kt - VirtualFile nullability with unknown fallback
Debugger (jetbrains-ultimate):
• GoHelper.kt, NodeJsDebugSupport.kt - debugger APIs changed, stubbed in 253+
VirtualFile Nullability Fixes (no segregation needed):
• CodeWhispererService.kt, CodeWhispererServiceNew.kt
• AmazonQLanguageClientImpl.kt, TextDocumentServiceHandler.kt
Test Migration (tst-242-252 / tst-253+):
JUnit4 HeavyPlatformTestCase migration:
• jetbrains-core: AwsToolkitExplorerToolWindowTest, AwsSettingsPanelTest, AwsConnectionSettingsEditorTest
• jetbrains-community: ToolkitConnectionManagerTest, ToolkitAuthManagerTest, AwsConnectionManagerTest, AwsBearerTokenConnectionTest, AwsToolkitConnectionTest
• amazonq/shared: ArtifactManagerTest, DefaultAuthCredentialsServiceTest
• amazonq/codewhisperer: CodeInsightsSettingsFacadeTest, CodeWhispererUtilTest
• jetbrains-ultimate: RedshiftUtilsTest
CodeInsightTestFixture migration:
• TelemetryHelperTest - manual fixture initialization with mock extensions
Test Fixes:
• AmazonQStreamingClientTest - allow Windows Python SDK paths in VfsRootAccess (@BeforeClass for JUnit4)
• TelemetryHelperTest - allow Windows Python SDK paths in VfsRootAccess (@BeforeAll for JUnit5)
Code Quality:
• Fix detekt trailing whitespace issues in test files
License
I confirm that my contribution is made under the terms of the Apache 2.0 license.