From 516c86139a8a12c1750cafc452c62624b7321291 Mon Sep 17 00:00:00 2001 From: Jomo Fisher Date: Tue, 31 Mar 2026 08:07:36 +0000 Subject: [PATCH] feat: support IntelliJ Platform 2026.1 Configuration and test fixes required to support the IntelliJ Platform version 2026.1 (261). Had to rename ClearThisConsoleAction to LSPClearConsoleAction because compiling against 2026.1 generated bytecode that triggered an IllegalAccessError when verified against 2025.3 (due to name collision with a package-private platform class in ConsoleViewImpl). Renaming avoids the collision and ensures cross-version compatibility. Key changes: - Added junit-platform-launcher to resolve test discovery issues encountered with platform 2026.1. - Updated LSPFoldingRangeFixtureTestCase to account for changes in platform EditorTestUtil.buildInitialFoldingsInBackground() behavior. - Renamed ClearThisConsoleAction to LSPClearConsoleAction to resolve cross-version verification failure. I confirmed gradlew build, test, and verifyPlugin work for all platform versions from 2024.1 to 2026.1. I also did runIde for each and visually confirmed the plugin is loaded. After this change, it is possible to re-enable "IJ Latest" github action since it is currently running against 2026.1. --- build.gradle.kts | 4 +++- .../redhat/devtools/lsp4ij/console/LSPConsoleViewBase.java | 4 ++-- ...earThisConsoleAction.java => LSPClearConsoleAction.java} | 4 ++-- .../redhat/devtools/lsp4ij/dap/console/DAPConsoleView.java | 4 ++-- .../lsp4ij/fixtures/LSPFoldingRangeFixtureTestCase.java | 6 ++++++ 5 files changed, 15 insertions(+), 7 deletions(-) rename src/main/java/com/redhat/devtools/lsp4ij/console/actions/{ClearThisConsoleAction.java => LSPClearConsoleAction.java} (88%) diff --git a/build.gradle.kts b/build.gradle.kts index f4691e0a9..6f29c2279 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -108,6 +108,8 @@ dependencies { testImplementation(libs.junit.jupiter.api) testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") testRuntimeOnly(libs.junit.vintage.engine) + // Required for IntelliJ Platform 2026.1 to discover and run tests via JUnit Platform + testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.11.0") } // Set the JDK version used by the toolchain to build the project (Java 21 is required for platform 2025.3). @@ -178,7 +180,7 @@ intellijPlatform { types = listOf(IntelliJPlatformType.IntellijIdea) channels = listOf(ProductRelease.Channel.RELEASE) // Only stable releases sinceBuild = "242" // From your minimum supported version - untilBuild = "253.*" // Up to current major version + untilBuild = "261.*" // Up to current major version } } } diff --git a/src/main/java/com/redhat/devtools/lsp4ij/console/LSPConsoleViewBase.java b/src/main/java/com/redhat/devtools/lsp4ij/console/LSPConsoleViewBase.java index 05444c704..da2d951ef 100644 --- a/src/main/java/com/redhat/devtools/lsp4ij/console/LSPConsoleViewBase.java +++ b/src/main/java/com/redhat/devtools/lsp4ij/console/LSPConsoleViewBase.java @@ -19,7 +19,7 @@ import com.intellij.openapi.editor.actions.ScrollToTheEndToolbarAction; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; -import com.redhat.devtools.lsp4ij.console.actions.ClearThisConsoleAction; +import com.redhat.devtools.lsp4ij.console.actions.LSPClearConsoleAction; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -48,6 +48,6 @@ public LSPConsoleViewBase(@NotNull Project project, protected void fillConsoleActions(List consoleActions) { consoleActions.add(new ScrollToTheEndToolbarAction(getEditor())); consoleActions.add(ActionManager.getInstance().getAction("Print")); - consoleActions.add(new ClearThisConsoleAction(this)); + consoleActions.add(new LSPClearConsoleAction(this)); } } diff --git a/src/main/java/com/redhat/devtools/lsp4ij/console/actions/ClearThisConsoleAction.java b/src/main/java/com/redhat/devtools/lsp4ij/console/actions/LSPClearConsoleAction.java similarity index 88% rename from src/main/java/com/redhat/devtools/lsp4ij/console/actions/ClearThisConsoleAction.java rename to src/main/java/com/redhat/devtools/lsp4ij/console/actions/LSPClearConsoleAction.java index 5fec5e6df..dd27fbaf8 100644 --- a/src/main/java/com/redhat/devtools/lsp4ij/console/actions/ClearThisConsoleAction.java +++ b/src/main/java/com/redhat/devtools/lsp4ij/console/actions/LSPClearConsoleAction.java @@ -23,10 +23,10 @@ * * @author Angelo ZERR */ -public class ClearThisConsoleAction extends ClearConsoleAction { +public class LSPClearConsoleAction extends ClearConsoleAction { private final ConsoleView myConsoleView; - public ClearThisConsoleAction(@NotNull ConsoleView consoleView) { + public LSPClearConsoleAction(@NotNull ConsoleView consoleView) { myConsoleView = consoleView; } diff --git a/src/main/java/com/redhat/devtools/lsp4ij/dap/console/DAPConsoleView.java b/src/main/java/com/redhat/devtools/lsp4ij/dap/console/DAPConsoleView.java index d9a38cf97..2934c79e6 100644 --- a/src/main/java/com/redhat/devtools/lsp4ij/dap/console/DAPConsoleView.java +++ b/src/main/java/com/redhat/devtools/lsp4ij/dap/console/DAPConsoleView.java @@ -22,7 +22,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; import com.redhat.devtools.lsp4ij.console.actions.AutoFoldingAction; -import com.redhat.devtools.lsp4ij.console.actions.ClearThisConsoleAction; +import com.redhat.devtools.lsp4ij.console.actions.LSPClearConsoleAction; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; @@ -130,7 +130,7 @@ private static int findLastCompleteJsonBlockEnd(@NotNull String text) { consoleActions.add(new ScrollToTheEndToolbarAction(editor)); } consoleActions.add(ActionManager.getInstance().getAction("Print")); - consoleActions.add(new ClearThisConsoleAction(this)); + consoleActions.add(new LSPClearConsoleAction(this)); return consoleActions.toArray(AnAction.EMPTY_ARRAY); } diff --git a/src/test/java/com/redhat/devtools/lsp4ij/fixtures/LSPFoldingRangeFixtureTestCase.java b/src/test/java/com/redhat/devtools/lsp4ij/fixtures/LSPFoldingRangeFixtureTestCase.java index 1af911723..b485f6059 100644 --- a/src/test/java/com/redhat/devtools/lsp4ij/fixtures/LSPFoldingRangeFixtureTestCase.java +++ b/src/test/java/com/redhat/devtools/lsp4ij/fixtures/LSPFoldingRangeFixtureTestCase.java @@ -88,6 +88,12 @@ protected void assertFoldingRanges(@NotNull String fileName, PsiFile file = myFixture.configureByText(fileName, stripTokens(fileBody)); Editor editor = myFixture.getEditor(); + // Move the caret to the end to avoid implicitly opening a fold region that would + // interfere with the test assertions. This was required because JB 2026.1 + // started accounting for caret positions in tests in the: + // EditorTestUtil.buildInitialFoldingsInBackground() + // function. + editor.getCaretModel().moveToOffset(file.getTextLength()); // Initialize the language server try {