From d403514cee0ba60aa7d4b19777b7799838475eaa Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Tue, 11 Dec 2018 10:14:16 +0300 Subject: [PATCH] Scratch: get scratch panel from selected editor CommonDataKeys.EDITOR key isn't present for some events (for example when user click on isRepl checkbox on scratch panel or there isn't any file open in the editor) ^KT-28045 Fixed --- .../scratch/actions/ClearScratchAction.kt | 6 +++--- .../idea/scratch/actions/RunScratchAction.kt | 5 ++--- .../idea/scratch/actions/ScratchAction.kt | 19 +++---------------- .../kotlin/idea/scratch/scratchUtils.kt | 6 ++++++ 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ClearScratchAction.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ClearScratchAction.kt index f564f3ea11c..4e4b4c0bb8a 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ClearScratchAction.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ClearScratchAction.kt @@ -18,17 +18,17 @@ package org.jetbrains.kotlin.idea.scratch.actions import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.scratch.ScratchFileLanguageProvider +import org.jetbrains.kotlin.idea.scratch.getScratchPanelFromSelectedEditor class ClearScratchAction : ScratchAction( KotlinBundle.message("scratch.clear.button"), AllIcons.Actions.GC ) { override fun actionPerformed(e: AnActionEvent) { - val editor = e.getData(CommonDataKeys.EDITOR) ?: return - val scratchFile = getScratchPanel(editor)?.scratchFile ?: return + val project = e.project ?: return + val scratchFile = getScratchPanelFromSelectedEditor(project)?.scratchFile ?: return val psiFile = scratchFile.getPsiFile() ?: return ScratchFileLanguageProvider.get(psiFile.language)?.getOutputHandler()?.clear(scratchFile) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/RunScratchAction.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/RunScratchAction.kt index 42d391c4904..c71db5eecdb 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/RunScratchAction.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/RunScratchAction.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.scratch.actions import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.keymap.KeymapManager import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.project.DumbService @@ -26,6 +25,7 @@ import com.intellij.task.ProjectTaskManager import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.scratch.ScratchFile import org.jetbrains.kotlin.idea.scratch.ScratchFileLanguageProvider +import org.jetbrains.kotlin.idea.scratch.getScratchPanelFromSelectedEditor import org.jetbrains.kotlin.idea.scratch.output.ScratchOutputHandlerAdapter import org.jetbrains.kotlin.idea.scratch.printDebugMessage import org.jetbrains.kotlin.idea.scratch.LOG as log @@ -43,8 +43,7 @@ class RunScratchAction : ScratchAction( override fun actionPerformed(e: AnActionEvent) { val project = e.project ?: return - val editor = e.getData(CommonDataKeys.EDITOR) ?: return - val scratchPanel = getScratchPanel(editor) ?: return + val scratchPanel = getScratchPanelFromSelectedEditor(project) ?: return val scratchFile = scratchPanel.scratchFile val psiFile = scratchFile.getPsiFile() ?: return diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ScratchAction.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ScratchAction.kt index f6542bc05e6..cc0be7679ce 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ScratchAction.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/actions/ScratchAction.kt @@ -7,25 +7,12 @@ package org.jetbrains.kotlin.idea.scratch.actions import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.editor.Editor -import com.intellij.openapi.fileEditor.FileEditorManager -import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider -import org.jetbrains.kotlin.idea.scratch.getScratchPanel -import org.jetbrains.kotlin.idea.scratch.ui.ScratchTopPanel +import org.jetbrains.kotlin.idea.scratch.getScratchPanelFromSelectedEditor import javax.swing.Icon abstract class ScratchAction(message: String, icon: Icon) : AnAction(message, message, icon) { override fun update(e: AnActionEvent) { - val presentation = e.presentation - - val project = e.project ?: return - val editor = FileEditorManager.getInstance(project).selectedTextEditor ?: return - val scratchPanel = getScratchPanel(editor) - - presentation.isVisible = scratchPanel != null - } - - protected fun getScratchPanel(editor: Editor): ScratchTopPanel? { - return TextEditorProvider.getInstance().getTextEditor(editor).getScratchPanel() + val scratchPanel = e.project?.let { getScratchPanelFromSelectedEditor(it) } + e.presentation.isVisible = scratchPanel != null } } \ No newline at end of file diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/scratchUtils.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/scratchUtils.kt index 5d40851e1d4..0b08a6da958 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/scratchUtils.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/scratchUtils.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.scratch import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.TextEditor +import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Key @@ -38,6 +39,11 @@ fun getAllEditorsWithScratchPanel(project: Project): List