KT-32366: Refactor ScratchPanelListener to ScratchFileListener

- it is done to move logical dependency from the UI element (`ScratchTopPanel`) to the model element (`ScratchFile`)
This commit is contained in:
Roman Golyshev
2019-08-17 15:41:07 +03:00
committed by Roman Golyshev
parent ea3d070c98
commit 1fc88fc47f
4 changed files with 18 additions and 10 deletions
@@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.util.messages.Topic
import org.jetbrains.kotlin.idea.scratch.ui.scratchFileOptions
abstract class ScratchFile(val project: Project, val editor: TextEditor) {
@@ -82,4 +83,15 @@ data class ScratchFileOptions(
val isRepl: Boolean = false,
val isMakeBeforeRun: Boolean = false,
val isInteractiveMode: Boolean = true
)
)
interface ScratchFileListener {
fun fileCreated(file: ScratchFile)
companion object {
val TOPIC = Topic.create(
"ScratchFileListener",
ScratchFileListener::class.java
)
}
}
@@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.scratch.actions.ScratchCompilationSupport
import org.jetbrains.kotlin.idea.scratch.output.ScratchOutputHandler
import org.jetbrains.kotlin.idea.scratch.output.ScratchOutputHandlerAdapter
import org.jetbrains.kotlin.idea.syncPublisherWithDisposeCheck
abstract class ScratchFileLanguageProvider {
fun newScratchFile(project: Project, editor: TextEditor): ScratchFile? {
@@ -36,6 +37,8 @@ abstract class ScratchFileLanguageProvider {
scratchFile.replScratchExecutor?.addOutputHandlers()
scratchFile.compilingScratchExecutor?.addOutputHandlers()
scratchFile.project.syncPublisherWithDisposeCheck(ScratchFileListener.TOPIC).fileCreated(scratchFile)
return scratchFile
}
@@ -24,8 +24,6 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
import org.jetbrains.kotlin.idea.core.script.scriptRelatedModuleName
import org.jetbrains.kotlin.idea.scratch.ui.ScratchPanelListener
import org.jetbrains.kotlin.idea.scratch.ui.ScratchTopPanel
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.idea.util.projectStructure.getModule
import org.jetbrains.kotlin.parsing.KotlinParserDefinition.Companion.STD_SCRIPT_EXT
@@ -36,10 +34,8 @@ class ScratchFileModuleInfoProvider(val project: Project) : ProjectComponent {
private val LOG = Logger.getInstance(this.javaClass)
override fun projectOpened() {
project.messageBus.connect().subscribe(ScratchPanelListener.TOPIC, object : ScratchPanelListener {
override fun panelAdded(panel: ScratchTopPanel) {
val scratchFile = panel.scratchFile
project.messageBus.connect().subscribe(ScratchFileListener.TOPIC, object : ScratchFileListener {
override fun fileCreated(scratchFile: ScratchFile) {
val ktFile = scratchFile.getPsiFile() as? KtFile ?: return
val file = ktFile.virtualFile ?: return
@@ -17,9 +17,7 @@ import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.actions.KOTLIN_WORKSHEET_EXTENSION
import org.jetbrains.kotlin.idea.scratch.ui.ScratchPanelListener
import org.jetbrains.kotlin.idea.scratch.ui.ScratchTopPanel
import org.jetbrains.kotlin.idea.syncPublisherWithDisposeCheck
import org.jetbrains.kotlin.psi.UserDataProperty
internal val LOG = Logger.getInstance("#org.jetbrains.kotlin.idea.scratch")
@@ -69,7 +67,6 @@ fun TextEditor.addScratchPanel(panel: ScratchTopPanel) {
FileEditorManager.getInstance(panel.scratchFile.project).addTopComponent(this, panel.component)
Disposer.register(this, panel)
panel.scratchFile.project.syncPublisherWithDisposeCheck(ScratchPanelListener.TOPIC).panelAdded(panel)
}
private var TextEditor.scratchTopPanel: ScratchTopPanel? by UserDataProperty<TextEditor, ScratchTopPanel>(Key.create("scratch.panel"))