From 00479b49549ac9bd60953566a5207a1dca042a89 Mon Sep 17 00:00:00 2001 From: Emil Kantis Date: Sat, 22 Jun 2024 23:39:39 +0200 Subject: [PATCH] Updating naming slightly --- .../toolwindow/KotestModelListener.kt | 8 ----- ...ervice.kt => KotestTestExplorerService.kt} | 23 ++++++++++---- .../TestExplorerTreeSelectionListener.kt | 4 +-- .../intellij/toolwindow/TestExplorerWindow.kt | 12 ++++---- .../intellij/toolwindow/TestFileTree.kt | 6 ++-- .../kotest/plugin/intellij/toolwindow/tags.kt | 4 +-- .../plugin/intellij/toolwindow/toolbar.kt | 30 +++++++++---------- .../plugin/intellij/toolwindow/treeModel.kt | 12 ++++---- 8 files changed, 51 insertions(+), 48 deletions(-) delete mode 100644 src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestModelListener.kt rename src/main/kotlin/io/kotest/plugin/intellij/toolwindow/{KotestService.kt => KotestTestExplorerService.kt} (87%) diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestModelListener.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestModelListener.kt deleted file mode 100644 index f5214e0..0000000 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestModelListener.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.kotest.plugin.intellij.toolwindow - -import javax.swing.tree.TreeModel - -interface KotestModelListener { - fun setModel(treeModel: TreeModel) -} - diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestService.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestTestExplorerService.kt similarity index 87% rename from src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestService.kt rename to src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestTestExplorerService.kt index 5ec4862..b15b91b 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestService.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/KotestTestExplorerService.kt @@ -26,13 +26,20 @@ import javax.swing.tree.DefaultTreeModel import javax.swing.tree.TreeModel import kotlin.properties.Delegates.observable +/** + * Manages state related to the test explorer tool window, including: + * - Currently selected options in the UI + * - The current file being displayed + * - The tags found in the project + */ @Service(Service.Level.PROJECT) -class KotestService( +class KotestTestExplorerService( private val project: Project, private val scope: CoroutineScope, ) { - @Suppress("unused") // Will be used on IC-223 + // TODO: Remove when dropping IC-223 support. + @Suppress("unused") constructor(project: Project) : this(project, CoroutineScope(Dispatchers.Default)) var showCallbacks by observable(true) { _, _, _ -> reloadModelInBackgroundThread() } @@ -44,12 +51,16 @@ class KotestService( var tags: List by observable(emptyList()) { _, _, _ -> reloadModelInBackgroundThread() } var currentFile: VirtualFile? by observable(null) { _, _, _ -> reloadModelInBackgroundThread() } - private val modelListeners = mutableListOf() - - fun registerModelListener(kotestModelListener: KotestModelListener) { - modelListeners.add(kotestModelListener) + /** + * Interface used by dependent components to receive updates to the tree model. + */ + interface ModelListener { + fun setModel(treeModel: TreeModel) } + private val modelListeners = mutableListOf() + fun registerModelListener(modelListener: ModelListener) { modelListeners.add(modelListener) } + private fun reloadModelInBackgroundThread() { scope.launch { withContext(Dispatchers.Default) { diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerTreeSelectionListener.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerTreeSelectionListener.kt index 1d664c4..7efe725 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerTreeSelectionListener.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerTreeSelectionListener.kt @@ -12,12 +12,12 @@ import javax.swing.event.TreeSelectionListener class TestExplorerTreeSelectionListener( val project: Project, ) : TreeSelectionListener { - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) override fun valueChanged(e: TreeSelectionEvent) { // this event is also fired when the path is "unselected" by clicking inside the editor // and isAddedPath will return false for that scenario (which we don't want to react to) - if (e.isAddedPath && kotestService.autoscrollToSource) { + if (e.isAddedPath && kotestTestExplorerService.autoscrollToSource) { val psi = when (val node = e.path.nodeDescriptor()) { is SpecNodeDescriptor -> node.psi is CallbackNodeDescriptor -> node.psi diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerWindow.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerWindow.kt index 4098fee..3ee136a 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerWindow.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestExplorerWindow.kt @@ -21,7 +21,7 @@ import java.awt.event.MouseEvent * The main panel for the test explorer 'tool window'. */ class TestExplorerWindow(private val project: Project) : SimpleToolWindowPanel(true, false) { - val kotestService: KotestService = project.getService(KotestService::class.java) + val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) private val fileEditorManager = FileEditorManager.getInstance(project) private val tree = TestFileTree(project) @@ -56,7 +56,7 @@ class TestExplorerWindow(private val project: Project) : SimpleToolWindowPanel(t val files = events.mapNotNull { it.file } val modified = files.firstOrNull { it.name == selectedFile.name } if (modified != null) - kotestService.currentFile = modified + kotestTestExplorerService.currentFile = modified } } } @@ -74,7 +74,7 @@ class TestExplorerWindow(private val project: Project) : SimpleToolWindowPanel(t override fun selectionChanged(event: FileEditorManagerEvent) { val file = fileEditorManager.selectedEditor?.file if (file != null) { - kotestService.currentFile = file + kotestTestExplorerService.currentFile = file } } } @@ -88,7 +88,7 @@ class TestExplorerWindow(private val project: Project) : SimpleToolWindowPanel(t val selectedFile = fileEditorManager.selectedEditor?.file if (selectedFile != null) { if (file.virtualFile.name == selectedFile.name) { - kotestService.currentFile = file.virtualFile + kotestTestExplorerService.currentFile = file.virtualFile } } } @@ -102,9 +102,9 @@ class TestExplorerWindow(private val project: Project) : SimpleToolWindowPanel(t } private fun refreshContent() { - kotestService.scanTags() + kotestTestExplorerService.scanTags() fileEditorManager.selectedEditor?.file?.let { - kotestService.currentFile = it + kotestTestExplorerService.currentFile = it } } } diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestFileTree.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestFileTree.kt index 91c4027..b8d4f8b 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestFileTree.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/TestFileTree.kt @@ -8,9 +8,9 @@ import javax.swing.tree.TreeSelectionModel class TestFileTree( project: Project, ) : com.intellij.ui.treeStructure.Tree(), - KotestModelListener { + KotestTestExplorerService.ModelListener { private val testExplorerTreeSelectionListener = TestExplorerTreeSelectionListener(project) - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) init { selectionModel.selectionMode = TreeSelectionModel.SINGLE_TREE_SELECTION @@ -19,7 +19,7 @@ class TestFileTree( cellRenderer = NodeRenderer() // listens to changes in the selections addTreeSelectionListener(testExplorerTreeSelectionListener) - kotestService.registerModelListener(this) + kotestTestExplorerService.registerModelListener(this) } override fun setModel(treeModel: TreeModel) { diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/tags.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/tags.kt index d4e03cb..d0238bb 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/tags.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/tags.kt @@ -17,12 +17,12 @@ class KotestTagFileListener( private val tree: TestFileTree, project: Project, ) : PsiTreeAnyChangeAbstractAdapter() { - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) override fun onChange(file: PsiFile?) { if (file == null) return if (file.name == TagsFilename) { - kotestService.scanTags() + kotestTestExplorerService.scanTags() } } } diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/toolbar.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/toolbar.kt index 8da30a2..0352797 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/toolbar.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/toolbar.kt @@ -68,34 +68,34 @@ class ExpandAllAction( class FilterCallbacksAction( project: Project, ) : ToggleAction("Filter Callbacks", null, AllIcons.Nodes.Controller) { - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) override fun getActionUpdateThread() = ActionUpdateThread.EDT - override fun isSelected(e: AnActionEvent): Boolean = kotestService.showCallbacks + override fun isSelected(e: AnActionEvent): Boolean = kotestTestExplorerService.showCallbacks override fun setSelected( e: AnActionEvent, state: Boolean, ) { - kotestService.showCallbacks = state + kotestTestExplorerService.showCallbacks = state } } class FilterModulesAction( project: Project, ) : ToggleAction("Filter Modules", null, AllIcons.Nodes.ModuleGroup) { - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) override fun getActionUpdateThread() = ActionUpdateThread.EDT - override fun isSelected(e: AnActionEvent): Boolean = kotestService.showModules + override fun isSelected(e: AnActionEvent): Boolean = kotestTestExplorerService.showModules override fun setSelected( e: AnActionEvent, state: Boolean, ) { - kotestService.showModules = state + kotestTestExplorerService.showModules = state } } @@ -104,48 +104,48 @@ class FilterTagsAction( ) : ToggleAction("Filter Tags", null, AllIcons.Nodes.Tag) { override fun getActionUpdateThread() = ActionUpdateThread.EDT - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) - override fun isSelected(e: AnActionEvent): Boolean = kotestService.showTags + override fun isSelected(e: AnActionEvent): Boolean = kotestTestExplorerService.showTags override fun setSelected( e: AnActionEvent, state: Boolean, ) { - kotestService.showTags = state + kotestTestExplorerService.showTags = state } } class FilterIncludesAction( project: Project, ) : ToggleAction("Filter Includes", null, AllIcons.Nodes.Tag) { - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) override fun getActionUpdateThread() = ActionUpdateThread.EDT - override fun isSelected(e: AnActionEvent): Boolean = kotestService.showIncludes + override fun isSelected(e: AnActionEvent): Boolean = kotestTestExplorerService.showIncludes override fun setSelected( e: AnActionEvent, state: Boolean, ) { - kotestService.showIncludes = state + kotestTestExplorerService.showIncludes = state } } class NavigateToNodeAction( project: Project, ) : ToggleAction("Autoscroll To Source", null, AllIcons.General.AutoscrollToSource) { - private val kotestService: KotestService = project.getService(KotestService::class.java) + private val kotestTestExplorerService: KotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) override fun getActionUpdateThread() = ActionUpdateThread.EDT - override fun isSelected(e: AnActionEvent): Boolean = kotestService.autoscrollToSource + override fun isSelected(e: AnActionEvent): Boolean = kotestTestExplorerService.autoscrollToSource override fun setSelected( e: AnActionEvent, state: Boolean, ) { - kotestService.autoscrollToSource = state + kotestTestExplorerService.autoscrollToSource = state } } diff --git a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/treeModel.kt b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/treeModel.kt index 3e3de56..1ce2e3b 100644 --- a/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/treeModel.kt +++ b/src/main/kotlin/io/kotest/plugin/intellij/toolwindow/treeModel.kt @@ -27,7 +27,7 @@ fun createTreeModel( module: Module ): TreeModel { - val kotestService = project.getService(KotestService::class.java) + val kotestTestExplorerService = project.getService(KotestTestExplorerService::class.java) val kotest = KotestRootNodeDescriptor(project) val root = DefaultMutableTreeNode(kotest) @@ -49,7 +49,7 @@ fun createTreeModel( } } - if (kotestService.showModules) { + if (kotestTestExplorerService.showModules) { val allModulesDescriptor = ModulesNodeDescriptor(project) val allModulesNode = DefaultMutableTreeNode(allModulesDescriptor) @@ -65,13 +65,13 @@ fun createTreeModel( } } - if (kotestService.showTags) { + if (kotestTestExplorerService.showTags) { val descriptor = TagsNodeDescriptor(project) val node = DefaultMutableTreeNode(descriptor) root.add(node) - kotestService.tags.forEach { + kotestTestExplorerService.tags.forEach { val tagDescriptor = TagNodeDescriptor(it, project, descriptor) val tagNode = DefaultMutableTreeNode(tagDescriptor) node.add(tagNode) @@ -92,7 +92,7 @@ fun createTreeModel( val specNode = DefaultMutableTreeNode(specDescriptor) fileNode.add(specNode) - if (kotestService.showCallbacks) { + if (kotestTestExplorerService.showCallbacks) { val callbacks = spec.callbacks() callbacks.forEach { val callbackDescriptor = CallbackNodeDescriptor(project, specDescriptor, it.psi, it) @@ -101,7 +101,7 @@ fun createTreeModel( } } - if (kotestService.showIncludes) { + if (kotestTestExplorerService.showIncludes) { val includes = spec.includes() includes.forEach { val includeDescriptor = IncludeNodeDescriptor(project, specDescriptor, it.psi, it)