From c6480fd077f65b32159846ca8eea0b585024eef9 Mon Sep 17 00:00:00 2001 From: Alexander Schwartz Date: Fri, 22 Sep 2023 23:45:25 +0200 Subject: [PATCH] Rework fix for IntelliJ 2023.3 EAP compatibility. Dropping compatibility for 2023.1 and earlier. (#1439) --- CHANGELOG.adoc | 4 ++ gradle.properties | 2 +- .../intellij/ui/SplitTextEditorProvider.java | 40 ++++++++++++++++++- src/main/resources/META-INF/plugin.xml | 2 +- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index cb2933de8..e61923327 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -7,6 +7,10 @@ This document provides a high-level view of the changes introduced by release. [[releasenotes]] == Release notes +=== 0.40.1 + +- Rework fix for IntelliJ 2023.3 EAP compatibility. Dropping compatibility for 2023.1 and earlier. (#1439) + === 0.39.9 - Fix IntelliJ 2023.3 EAP compatibility (#1439) diff --git a/gradle.properties b/gradle.properties index b62646ab0..17e87682a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ # Plugin Verifier integration -> https://github.com/JetBrains/gradle-intellij-plugin#plugin-verifier-dsl # See https://jb.gg/intellij-platform-builds-list for available build versions # skipping IC-223.7571.182 do to disk space limitations on GHA runners -pluginVerifierIdeVersions = IC-222.3739.54, IC-231.9225.16, IC-232.9559.62 +pluginVerifierIdeVersions = IC-232.9559.62, IC-233.6745.305 diff --git a/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java b/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java index 9da6eb4a9..085dce618 100644 --- a/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java +++ b/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java @@ -1,9 +1,11 @@ package org.asciidoc.intellij.ui; +import com.intellij.openapi.fileEditor.AsyncFileEditorProvider; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorPolicy; import com.intellij.openapi.fileEditor.FileEditorProvider; import com.intellij.openapi.fileEditor.FileEditorState; +import com.intellij.openapi.progress.CoroutinesKt; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -11,7 +13,7 @@ import org.jdom.Element; import org.jetbrains.annotations.NotNull; -public abstract class SplitTextEditorProvider implements FileEditorProvider, DumbAware { +public abstract class SplitTextEditorProvider implements AsyncFileEditorProvider, DumbAware { private static final String FIRST_EDITOR = "first_editor"; private static final String SECOND_EDITOR = "second_editor"; @@ -40,7 +42,7 @@ public boolean accept(@NotNull Project project, @NotNull VirtualFile file) { @NotNull @Override public FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile file) { - return createSplitEditor(myFirstProvider.createEditor(project, file), mySecondProvider.createEditor(project, file)); + return createEditorAsync(project, file).build(); } @NotNull @@ -49,6 +51,24 @@ public String getEditorTypeId() { return myEditorTypeId; } + @NotNull + @Override + public Builder createEditorAsync(@NotNull final Project project, @NotNull final VirtualFile file) { + final Builder firstBuilder = getBuilderFromEditorProvider(myFirstProvider, project, file); + final Builder secondBuilder = getBuilderFromEditorProvider(mySecondProvider, project, file); + + return new Builder() { + @Override + public @NotNull FileEditor build() { + // FileEditorManagerImpl$dumbModeFinished$fileToNewProviders will call this in a background thread + // EditorImpl wants to be called from EDT only, let's switch to EDT for this. + // This is a known problem: https://youtrack.jetbrains.com/issue/IDEA-318259 in 2023.2 and will be fixed in 2023.3 + // A workaround didn't work as expected, reverting it. + return createSplitEditor(firstBuilder.build(), secondBuilder.build()); + } + }; + } + @NotNull @Override public FileEditorState readState(@NotNull Element sourceElement, @NotNull Project project, @NotNull VirtualFile file) { @@ -107,4 +127,20 @@ public FileEditorPolicy getPolicy() { return FileEditorPolicy.HIDE_DEFAULT_EDITOR; } + @NotNull + private static Builder getBuilderFromEditorProvider(@NotNull final FileEditorProvider provider, + @NotNull final Project project, + @NotNull final VirtualFile file) { + if (provider instanceof AsyncFileEditorProvider) { + return CoroutinesKt.runBlockingMaybeCancellable((coroutineScope, continuation) -> + ((AsyncFileEditorProvider) provider).createEditorBuilder(project, file, continuation)); + } else { + return new Builder() { + @Override + public FileEditor build() { + return provider.createEditor(project, file); + } + }; + } + } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 354828b29..846ed2f3d 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -12,7 +12,7 @@ - + com.intellij.modules.lang com.intellij.javafx