IJPL-796 refactor TextEditorWithPreview (part 2)

GitOrigin-RevId: 6accb42e148d3ea40a01c13af9d0bce54f3faadc
This commit is contained in:
Vladimir Krivosheev
2024-06-13 18:18:50 +02:00
committed by intellij-monorepo-bot
parent 2c8d3eb46d
commit faafc33646
6 changed files with 25 additions and 29 deletions

View File

@@ -218,7 +218,7 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase(),
val scratchFileEditor = getScratchEditorForSelectedFile(manager!!, myFixture.file.virtualFile)
?: error("Couldn't find scratch panel")
val previewEditor = scratchFileEditor.getPreviewEditor() as TextEditor
val previewEditor = scratchFileEditor.previewEditor as TextEditor
return getFoldingData(previewEditor.editor, withCollapseStatus = false)
}

View File

@@ -16,9 +16,9 @@ internal object MarkdownFileEditorUtils {
@JvmStatic
fun findMarkdownPreviewEditor(editor: FileEditor): MarkdownPreviewFileEditor? {
return when (editor) {
is MarkdownEditorWithPreview -> editor.getPreviewEditor() as? MarkdownPreviewFileEditor
is MarkdownEditorWithPreview -> editor.previewEditor as? MarkdownPreviewFileEditor
is MarkdownPreviewFileEditor -> editor
else -> TextEditorWithPreview.getParentSplitEditor(editor)?.getPreviewEditor() as? MarkdownPreviewFileEditor
else -> TextEditorWithPreview.getParentSplitEditor(editor)?.previewEditor as? MarkdownPreviewFileEditor
}
}

View File

@@ -45,7 +45,7 @@ object MarkdownActionUtil {
@JvmStatic
fun findMarkdownPreviewEditor(event: AnActionEvent): MarkdownPreviewFileEditor? {
val splitEditor = findSplitEditor(event) ?: return null
val editor = splitEditor.getPreviewEditor()
val editor = splitEditor.previewEditor
return when {
editor !is MarkdownPreviewFileEditor || !editor.getComponent().isVisible -> null
else -> editor

View File

@@ -9,7 +9,7 @@ import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.fileEditor.TextEditorWithPreview;
import com.intellij.openapi.project.ProjectUtil;
import com.intellij.openapi.project.Project;
import org.intellij.plugins.markdown.MarkdownBundle;
import org.intellij.plugins.markdown.settings.MarkdownSettings;
import org.jetbrains.annotations.NotNull;
@@ -20,13 +20,13 @@ import org.jetbrains.annotations.NotNull;
public final class MarkdownEditorWithPreview extends TextEditorWithPreview {
private boolean autoScrollPreview;
public MarkdownEditorWithPreview(@NotNull TextEditor editor, @NotNull MarkdownPreviewFileEditor preview) {
public MarkdownEditorWithPreview(@NotNull TextEditor editor, @NotNull MarkdownPreviewFileEditor preview, @NotNull Project project) {
super(
editor,
preview,
MarkdownBundle.message("markdown.editor.name"),
Layout.SHOW_EDITOR_AND_PREVIEW,
!MarkdownSettings.getInstance(ProjectUtil.currentOrDefaultProject(editor.getEditor().getProject())).isVerticalSplit()
!MarkdownSettings.getInstance(project).isVerticalSplit()
);
// allow launching actions while in preview mode;
@@ -34,28 +34,26 @@ public final class MarkdownEditorWithPreview extends TextEditorWithPreview {
editor.getEditor().getContentComponent().putClientProperty(ActionUtil.ALLOW_ACTION_PERFORM_WHEN_HIDDEN, true);
preview.setMainEditor(editor.getEditor());
final var project = ProjectUtil.currentOrDefaultProject(editor.getEditor().getProject());
final var settings = MarkdownSettings.getInstance(project);
MarkdownSettings settings = MarkdownSettings.getInstance(project);
autoScrollPreview = settings.isAutoScrollEnabled();
final var settingsChangedListener = new MarkdownSettings.ChangeListener() {
project.getMessageBus().connect(this).subscribe(MarkdownSettings.ChangeListener.TOPIC, new MarkdownSettings.ChangeListener() {
private boolean wasVerticalSplitBefore = settings.isVerticalSplit();
@Override
public void beforeSettingsChanged(@NotNull MarkdownSettings settings) {
wasVerticalSplitBefore = settings.isVerticalSplit();
public void beforeSettingsChanged(@NotNull MarkdownSettings settings1) {
wasVerticalSplitBefore = settings1.isVerticalSplit();
}
@Override
public void settingsChanged(@NotNull MarkdownSettings settings) {
setAutoScrollPreview(settings.isAutoScrollEnabled());
if (wasVerticalSplitBefore != settings.isVerticalSplit()) {
handleLayoutChange(!settings.isVerticalSplit());
public void settingsChanged(@NotNull MarkdownSettings settings1) {
setAutoScrollPreview(settings1.isAutoScrollEnabled());
if (wasVerticalSplitBefore != settings1.isVerticalSplit()) {
handleLayoutChange(!settings1.isVerticalSplit());
}
}
};
project.getMessageBus().connect(this).subscribe(MarkdownSettings.ChangeListener.TOPIC, settingsChangedListener);
getTextEditor().getEditor().getScrollingModel().addVisibleAreaListener(new MyVisibleAreaListener(), this);
});
editor.getEditor().getScrollingModel().addVisibleAreaListener(new MyVisibleAreaListener(), this);
}
@Override
@@ -85,11 +83,6 @@ public final class MarkdownEditorWithPreview extends TextEditorWithPreview {
this.autoScrollPreview = autoScrollPreview;
}
@Override
public void setLayout(@NotNull Layout layout) {
super.setLayout(layout);
}
private final class MyVisibleAreaListener implements VisibleAreaListener {
private int previousLine = 0;

View File

@@ -1,14 +1,16 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.intellij.plugins.markdown.ui.preview
import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.fileEditor.TextEditor
import com.intellij.openapi.fileEditor.TextEditorWithPreviewProvider
import com.intellij.openapi.project.currentOrDefaultProject
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
class MarkdownSplitEditorProvider : TextEditorWithPreviewProvider(MarkdownPreviewFileEditorProvider()) {
override fun createSplitEditor(firstEditor: TextEditor, secondEditor: FileEditor): FileEditor {
require(secondEditor is MarkdownPreviewFileEditor) { "Secondary editor should be MarkdownPreviewFileEditor" }
return MarkdownEditorWithPreview(firstEditor, secondEditor)
return MarkdownEditorWithPreview(firstEditor, secondEditor, currentOrDefaultProject(firstEditor.getEditor().getProject()))
}
}

View File

@@ -37,14 +37,15 @@ private val FileEditor.description: String
get() = "${hashCode()} ${javaClass} ${toString()}"
// See DaemonFusReporter. Reality in DaemonCodeAnalyzerImpl is a bit more complicated, probably including other editors if the file has Psi
private fun Collection<FileEditor>.getWorthy(): List<TextEditor> =
mapNotNull {
private fun Collection<FileEditor>.getWorthy(): List<TextEditor> {
return mapNotNull {
if (it !is TextEditor || it.editor.editorKind != EditorKind.MAIN_EDITOR) null
else if (it is TextEditorWithPreview) it.getTextEditor()
else if (it is TextEditorWithPreview) it.textEditor
else it
}
}
class WaitForFinishedCodeAnalysis(text: String, line: Int) : PerformanceCommandCoroutineAdapter(text, line) {
internal class WaitForFinishedCodeAnalysis(text: String, line: Int) : PerformanceCommandCoroutineAdapter(text, line) {
companion object {
const val PREFIX = CMD_PREFIX + "waitForFinishedCodeAnalysis"
}