IDEA-375192 Structure View: Show empty node for lazy groups

GitOrigin-RevId: 3ec96a6ad7fa9b3416c299e31499f42c0a41436e
This commit is contained in:
Anton Kozub
2025-06-30 00:11:41 +00:00
committed by intellij-monorepo-bot
parent 7441aaf87d
commit 90af13819d
2 changed files with 17 additions and 2 deletions
@@ -5,6 +5,7 @@ action.structureview.show.inherited=Inherited
action.structureview.sort.by.visibility=By Visibility
file.structure.toggle.show.inherited=Inherited members
node.structureview.invalid=<invalid>
node.structureview.empty=<empty>
structureview.subgroup.sort=Sort
structureview.subgroup.filter=Show
structureview.subgroup.group=Group
@@ -4,6 +4,7 @@ package com.intellij.ide.structureView.logical.impl
import com.intellij.ide.TypePresentationService
import com.intellij.ide.projectView.PresentationData
import com.intellij.ide.structureView.*
import com.intellij.ide.structureView.StructureViewBundle
import com.intellij.ide.structureView.impl.common.PsiTreeElementBase
import com.intellij.ide.structureView.logical.ContainerElementsProvider
import com.intellij.ide.structureView.logical.ExternalElementsProvider
@@ -37,7 +38,7 @@ class LogicalStructureViewModel private constructor(psiFile: PsiFile, editor: Ed
}
override fun isAlwaysLeaf(element: StructureViewTreeElement?): Boolean {
return element is ElementsBuilder.PropertyStructureElement
return element is ElementsBuilder.PropertyStructureElement || element is ElementsBuilder.EmptyChildrenElement
}
override fun isAutoExpand(element: StructureViewTreeElement): Boolean {
@@ -289,7 +290,9 @@ private class ElementsBuilder {
) : LogicalStructureViewTreeElement<T> {
private val cashedChildren: Array<TreeElement> by lazy {
calculateChildren()
val result = calculateChildren()
if (result.isEmpty()) return@lazy arrayOf(EmptyChildrenElement())
result
}
override fun getValue(): Any = grouper
@@ -388,4 +391,15 @@ private class ElementsBuilder {
return assembledModel.hashCode()
}
}
class EmptyChildrenElement: StructureViewTreeElement {
override fun getPresentation(): ItemPresentation {
return PresentationData(null, null, null, null).apply {
this.addText(StructureViewBundle.message("node.structureview.empty"), SimpleTextAttributes.GRAY_SMALL_ATTRIBUTES)
}
}
override fun getChildren(): Array<out TreeElement?> = emptyArray()
override fun getValue(): Any? = Any()
}
}