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:
committed by
Roman Golyshev
parent
ea3d070c98
commit
1fc88fc47f
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+2
-6
@@ -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"))
|
||||
|
||||
Reference in New Issue
Block a user