From 1751d7e81ad26eb9f9b78ae58ea7ec978f1ec978 Mon Sep 17 00:00:00 2001 From: Nikita Pavlenko Date: Wed, 18 Sep 2024 10:03:33 +0200 Subject: [PATCH] [PyCharm] PY-74366 Jupyter/RemoteDev (feat): First version of notebook output synchronization in RD. Console, image and some other outputs will be properly updated. GitOrigin-RevId: 283aa5b0699bad1c493cf9ef6847d025028087d5 --- .../intellij.notebooks.visualization.iml | 23 +++++++++++++++++++ .../visualization/NotebookCellLines.kt | 2 -- .../outputs/NotebookOutputDataKeyExtractor.kt | 5 ++-- .../visualization/ui/EditorCellOutputs.kt | 4 ++-- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/notebooks/visualization/intellij.notebooks.visualization.iml b/notebooks/visualization/intellij.notebooks.visualization.iml index 0d48fc58191e..7a828690cbf3 100644 --- a/notebooks/visualization/intellij.notebooks.visualization.iml +++ b/notebooks/visualization/intellij.notebooks.visualization.iml @@ -1,5 +1,27 @@ + + + + + + + + + + + + + + $KOTLIN_BUNDLED$/lib/kotlinx-serialization-compiler-plugin.jar + + + + + + + @@ -20,5 +42,6 @@ + \ No newline at end of file diff --git a/notebooks/visualization/src/com/intellij/notebooks/visualization/NotebookCellLines.kt b/notebooks/visualization/src/com/intellij/notebooks/visualization/NotebookCellLines.kt index d7d7e2418933..7a8dab0d1eb0 100644 --- a/notebooks/visualization/src/com/intellij/notebooks/visualization/NotebookCellLines.kt +++ b/notebooks/visualization/src/com/intellij/notebooks/visualization/NotebookCellLines.kt @@ -54,7 +54,6 @@ interface NotebookCellLines { val contentLines: IntRange get() = firstContentLine..lastContentLine - operator fun get(key: Key): V? = data.get(key) override fun compareTo(other: Interval): Int = lines.first - other.lines.first @@ -87,7 +86,6 @@ interface NotebookCellLines { return document.getText(range) } - fun getTopMarker(document: Document): String? = if (markers.hasTopLine) document.getLineText(lines.first) else null diff --git a/notebooks/visualization/src/com/intellij/notebooks/visualization/outputs/NotebookOutputDataKeyExtractor.kt b/notebooks/visualization/src/com/intellij/notebooks/visualization/outputs/NotebookOutputDataKeyExtractor.kt index a72bdec608fa..62f339a72a17 100644 --- a/notebooks/visualization/src/com/intellij/notebooks/visualization/outputs/NotebookOutputDataKeyExtractor.kt +++ b/notebooks/visualization/src/com/intellij/notebooks/visualization/outputs/NotebookOutputDataKeyExtractor.kt @@ -4,16 +4,17 @@ import com.intellij.openapi.editor.impl.EditorImpl import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.notebooks.visualization.NotebookCellLines import com.intellij.notebooks.visualization.outputs.statistic.NotebookOutputKeyType +import kotlinx.serialization.Polymorphic /** Merely a marker for data that can be represented via some Swing component. */ +@Polymorphic interface NotebookOutputDataKey { /** Get content that can be used for building diff for outputs. */ fun getContentForDiffing(): Any - val statisticKey: NotebookOutputKeyType - get() = NotebookOutputKeyType.UNKNOWN + fun getStatisticKey() = NotebookOutputKeyType.UNKNOWN } interface NotebookOutputDataKeyExtractor { diff --git a/notebooks/visualization/src/com/intellij/notebooks/visualization/ui/EditorCellOutputs.kt b/notebooks/visualization/src/com/intellij/notebooks/visualization/ui/EditorCellOutputs.kt index 4c5d27b30824..34352493b5bd 100644 --- a/notebooks/visualization/src/com/intellij/notebooks/visualization/ui/EditorCellOutputs.kt +++ b/notebooks/visualization/src/com/intellij/notebooks/visualization/ui/EditorCellOutputs.kt @@ -97,7 +97,7 @@ class EditorCellOutputs( onViewportChange() } - private fun updateView(newDataKeys: List) = runInEdt { + fun updateView(newDataKeys: Collection) = runInEdt { updateData(newDataKeys) recreateInlayIfNecessary() } @@ -125,7 +125,7 @@ class EditorCellOutputs( } @RequiresEdt - private fun updateData(newDataKeys: List): Boolean { + private fun updateData(newDataKeys: Collection): Boolean { val newDataKeyIterator = newDataKeys.iterator() val oldComponentsWithFactories = getComponentsWithFactories().iterator() var isFilled = false