diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFile.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFile.kt index edfb3f0354d..ce2983c956e 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFile.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFile.kt @@ -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 -) \ No newline at end of file +) + +interface ScratchFileListener { + fun fileCreated(file: ScratchFile) + + companion object { + val TOPIC = Topic.create( + "ScratchFileListener", + ScratchFileListener::class.java + ) + } +} \ No newline at end of file diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileLanguageProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileLanguageProvider.kt index 1d144aa38e6..10535cee72f 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileLanguageProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileLanguageProvider.kt @@ -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 } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt index 4a3395e071a..e67ce9d1950 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt @@ -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 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 e2566d6c1fe..da3ea853d42 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 @@ -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(Key.create("scratch.panel"))