From 03c9ff87aa71e91710cefc4e1afecaf7a3e4fd6e Mon Sep 17 00:00:00 2001 From: Alexander Schwartz Date: Fri, 21 Jun 2024 23:18:06 +0200 Subject: [PATCH] Restore compatibility with EAP 2024.2, the minimum version is now 2024.1 (#1636) --- CHANGELOG.adoc | 3 +- gradle.properties | 2 +- .../editor/AsciiDocSplitEditorProvider.java | 18 +- .../intellij/ui/SplitTextEditorProvider.java | 154 ------------------ src/main/resources/META-INF/plugin.xml | 2 +- 5 files changed, 7 insertions(+), 172 deletions(-) delete mode 100644 src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 8426850f8..16488fdf5 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -7,9 +7,10 @@ This document provides a high-level view of the changes introduced by release. [[releasenotes]] == Release notes -=== 0.41.16 +=== 0.42.0 - Custom extensions loading in multimodule projects (thanks to @o-nix) (#1633) +- Restore compatibility with EAP 2024.2, the minimum version is now 2024.1 (#1636) === 0.41.15 diff --git a/gradle.properties b/gradle.properties index 71907f983..0f26c1dea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ # 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 # Run for example RD-233.11799.49 which doesn't include java -pluginVerifierIdeVersions = IC-233.11361.10,IC-241.15989.150 +pluginVerifierIdeVersions = IC-241.14494.240,IC-241.15989.150 diff --git a/src/main/java/org/asciidoc/intellij/editor/AsciiDocSplitEditorProvider.java b/src/main/java/org/asciidoc/intellij/editor/AsciiDocSplitEditorProvider.java index ebb880f9e..d5abfe209 100644 --- a/src/main/java/org/asciidoc/intellij/editor/AsciiDocSplitEditorProvider.java +++ b/src/main/java/org/asciidoc/intellij/editor/AsciiDocSplitEditorProvider.java @@ -3,20 +3,17 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.TextEditor; -import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorProvider; +import com.intellij.openapi.fileEditor.TextEditorWithPreviewProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import org.asciidoc.intellij.AsciiDocLanguage; -import org.asciidoc.intellij.ui.SplitTextEditorProvider; -import org.jetbrains.annotations.NotNull; -public class AsciiDocSplitEditorProvider extends SplitTextEditorProvider { +public class AsciiDocSplitEditorProvider extends TextEditorWithPreviewProvider { public AsciiDocSplitEditorProvider() { - super(new PsiAwareTextEditorProvider(), new AsciiDocPreviewEditorProvider()); + super(new AsciiDocPreviewEditorProvider()); // when this plugin is installed at runtime, check if the existing editors as split editors. // If not, close the editor and re-open the files @@ -58,13 +55,4 @@ public AsciiDocSplitEditorProvider() { }); } - @Override - protected FileEditor createSplitEditor(@NotNull final FileEditor firstEditor, @NotNull FileEditor secondEditor) { - if (!(firstEditor instanceof TextEditor) || !(secondEditor instanceof AsciiDocPreviewEditor asciiDocPreviewEditor)) { - throw new IllegalArgumentException("Main editor should be TextEditor"); - } - asciiDocPreviewEditor.setEditor(((TextEditor) firstEditor).getEditor()); - return new AsciiDocSplitEditor(((TextEditor) firstEditor), ((AsciiDocPreviewEditor) secondEditor)); - } - } diff --git a/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java b/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java deleted file mode 100644 index a47533229..000000000 --- a/src/main/java/org/asciidoc/intellij/ui/SplitTextEditorProvider.java +++ /dev/null @@ -1,154 +0,0 @@ -package org.asciidoc.intellij.ui; - -import com.intellij.openapi.application.ApplicationManager; -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.progress.TasksKt; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; -import org.jdom.Attribute; -import org.jdom.Element; -import org.jetbrains.annotations.NotNull; - -public abstract class SplitTextEditorProvider implements AsyncFileEditorProvider, DumbAware { - - private static final String FIRST_EDITOR = "first_editor"; - private static final String SECOND_EDITOR = "second_editor"; - private static final String SPLIT_LAYOUT = "split_layout"; - - @NotNull - private final FileEditorProvider myFirstProvider; - @NotNull - private final FileEditorProvider mySecondProvider; - - @NotNull - private final String myEditorTypeId; - - protected SplitTextEditorProvider(@NotNull FileEditorProvider firstProvider, @NotNull FileEditorProvider secondProvider) { - myFirstProvider = firstProvider; - mySecondProvider = secondProvider; - - myEditorTypeId = "split-provider[" + myFirstProvider.getEditorTypeId() + ";" + mySecondProvider.getEditorTypeId() + "]"; - } - - @Override - public boolean accept(@NotNull Project project, @NotNull VirtualFile file) { - return myFirstProvider.accept(project, file) && mySecondProvider.accept(project, file); - } - - @NotNull - @Override - public FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile file) { - // called from create file from template - FileEditor first = myFirstProvider.createEditor(project, file); - FileEditor second = mySecondProvider.createEditor(project, file); - return createSplitEditor(first, second); - } - - @NotNull - @Override - 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() { - return createSplitEditor(firstBuilder.build(), secondBuilder.build()); - } - }; - } - - @NotNull - @Override - public FileEditorState readState(@NotNull Element sourceElement, @NotNull Project project, @NotNull VirtualFile file) { - Element child = sourceElement.getChild(FIRST_EDITOR); - FileEditorState firstState = null; - if (child != null) { - firstState = myFirstProvider.readState(child, project, file); - } - child = sourceElement.getChild(SECOND_EDITOR); - FileEditorState secondState = null; - if (child != null) { - secondState = mySecondProvider.readState(child, project, file); - } - - final Attribute attribute = sourceElement.getAttribute(SPLIT_LAYOUT); - - final String layoutName; - if (attribute != null) { - layoutName = attribute.getValue(); - } else { - layoutName = null; - } - - return new SplitFileEditor.MyFileEditorState(layoutName, firstState, secondState); - } - - @Override - public void writeState(@NotNull FileEditorState state, @NotNull Project project, @NotNull Element targetElement) { - if (!(state instanceof SplitFileEditor.MyFileEditorState)) { - return; - } - final SplitFileEditor.MyFileEditorState compositeState = (SplitFileEditor.MyFileEditorState) state; - - Element child = new Element(FIRST_EDITOR); - if (compositeState.getFirstState() != null) { - myFirstProvider.writeState(compositeState.getFirstState(), project, child); - targetElement.addContent(child); - } - - child = new Element(SECOND_EDITOR); - if (compositeState.getSecondState() != null) { - mySecondProvider.writeState(compositeState.getSecondState(), project, child); - targetElement.addContent(child); - } - - if (compositeState.getSplitLayout() != null) { - targetElement.setAttribute(SPLIT_LAYOUT, compositeState.getSplitLayout()); - } - } - - protected abstract FileEditor createSplitEditor(@NotNull FileEditor firstEditor, @NotNull FileEditor secondEditor); - - @NotNull - @Override - 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) { - if (ApplicationManager.getApplication().isDispatchThread()) { - // called from a structure view builder without a write lock in 2023.3 pre-release, doesn't seem to be the case in 2023.3 final - return TasksKt.runWithModalProgressBlocking(project, "Opening " + file.getName(), (coroutineScope, continuation) -> - ((AsyncFileEditorProvider) provider).createEditorBuilder(project, file, null, continuation)); - } else { - // called from project view - return CoroutinesKt.runBlockingMaybeCancellable((coroutineScope, continuation) -> - ((AsyncFileEditorProvider) provider).createEditorBuilder(project, file, null, continuation)); - } - } else { - return new Builder() { - @Override - public @NotNull 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 0f6e5b4b7..2dd0943fa 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