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
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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<Pair<TextEditor, Scrat
|
||||
if (panel != null) it to panel else null
|
||||
}
|
||||
|
||||
fun getScratchPanelFromSelectedEditor(project: Project): ScratchTopPanel? {
|
||||
val editor = FileEditorManager.getInstance(project).selectedTextEditor ?: return null
|
||||
return TextEditorProvider.getInstance().getTextEditor(editor).getScratchPanel()
|
||||
}
|
||||
|
||||
fun TextEditor.getScratchPanel(): ScratchTopPanel? {
|
||||
return scratchTopPanel
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user