diff --git a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt index cfbbe4721230..1b2a22d03c90 100644 --- a/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt +++ b/platform/jewel/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt @@ -6,7 +6,7 @@ import java.nio.file.Path fun buildTree(builder: TreeBuilder.() -> Unit): Tree = TreeBuilder().apply(builder).build() -class TreeBuilder { +class TreeBuilder : TreeGeneratorScope { sealed class Element { abstract val id: Any @@ -14,7 +14,6 @@ class TreeBuilder { data class Leaf(val data: T, override val id: Any) : Element() data class Node( val data: T, - val isOpen: Boolean, override val id: Any, val childrenGenerator: ChildrenGeneratorScope.() -> Unit ) : Element() @@ -22,21 +21,19 @@ class TreeBuilder { private val heads = mutableListOf>() - @Suppress("unused") - fun addLeaf(data: T, id: Any = data.hashCode()) { + override fun addLeaf(data: T, id: Any) { heads.add(Element.Leaf(data, id)) } - fun addNode( + override fun addNode( data: T, - isOpen: Boolean, - id: Any = data.hashCode(), + id: Any, childrenGenerator: ChildrenGeneratorScope.() -> Unit ) { - heads.add(Element.Node(data, isOpen, id, childrenGenerator)) + heads.add(Element.Node(data, id, childrenGenerator)) } - fun add(element: Element) { + override fun add(element: Element) { heads.add(element) } @@ -118,7 +115,19 @@ private fun evaluatePrevious(element: Tree.Element): Tree.Element = wh } } -class ChildrenGeneratorScope(private val parentNode: Tree.Element.Node) { +interface TreeGeneratorScope { + fun addNode( + data: T, + id: Any = data.hashCode(), + childrenGenerator: ChildrenGeneratorScope.() -> Unit = { } + ) + + fun addLeaf(data: T, id: Any = data.hashCode()) + + fun add(element: TreeBuilder.Element) +} + +class ChildrenGeneratorScope(private val parentNode: Tree.Element.Node) : TreeGeneratorScope { data class ParentInfo(val data: T, val depth: Int, val index: Int) @@ -126,20 +135,19 @@ class ChildrenGeneratorScope(private val parentNode: Tree.Element.Node) { internal val elements = mutableListOf>() - fun addLeaf(data: T, id: Any = data.hashCode()) { + override fun addLeaf(data: T, id: Any) { elements.add(TreeBuilder.Element.Leaf(data, id)) } - fun addNode( + override fun addNode( data: T, - id: Any = data.hashCode(), - isOpen: Boolean = false, - childrenGenerator: ChildrenGeneratorScope.() -> Unit = { } + id: Any, + childrenGenerator: ChildrenGeneratorScope.() -> Unit ) { - elements.add(TreeBuilder.Element.Node(data, isOpen, id, childrenGenerator)) + elements.add(TreeBuilder.Element.Node(data, id, childrenGenerator)) } - fun add(element: TreeBuilder.Element) { + override fun add(element: TreeBuilder.Element) { elements.add(element) } } @@ -158,7 +166,7 @@ private fun ChildrenGeneratorScope.generateFileNodes(isOpen: (File) -> Boo .forEach { file -> when { file.isFile -> addLeaf(file) - else -> addNode(file, file.absolutePath, isOpen(file)) { generateFileNodes(isOpen) } + else -> addNode(file, file.absolutePath) { generateFileNodes(isOpen) } } } }