From 90af13819d8b904f8d3d2b2e01359ed9ae1a910f Mon Sep 17 00:00:00 2001 From: Anton Kozub Date: Sun, 29 Jun 2025 15:33:33 +0200 Subject: [PATCH] IDEA-375192 Structure View: Show empty node for lazy groups GitOrigin-RevId: 3ec96a6ad7fa9b3416c299e31499f42c0a41436e --- .../messages/StructureViewBundle.properties | 1 + .../logical/impl/LogicalStructureViewModel.kt | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/platform/structure-view-impl/resources/messages/StructureViewBundle.properties b/platform/structure-view-impl/resources/messages/StructureViewBundle.properties index 5d490f90065e..ad1b3fdfb3fe 100644 --- a/platform/structure-view-impl/resources/messages/StructureViewBundle.properties +++ b/platform/structure-view-impl/resources/messages/StructureViewBundle.properties @@ -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= +node.structureview.empty= structureview.subgroup.sort=Sort structureview.subgroup.filter=Show structureview.subgroup.group=Group diff --git a/platform/structure-view-impl/src/com/intellij/ide/structureView/logical/impl/LogicalStructureViewModel.kt b/platform/structure-view-impl/src/com/intellij/ide/structureView/logical/impl/LogicalStructureViewModel.kt index 9239c333913f..47b3cd9e78b1 100644 --- a/platform/structure-view-impl/src/com/intellij/ide/structureView/logical/impl/LogicalStructureViewModel.kt +++ b/platform/structure-view-impl/src/com/intellij/ide/structureView/logical/impl/LogicalStructureViewModel.kt @@ -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 { private val cashedChildren: Array 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 = emptyArray() + override fun getValue(): Any? = Any() + } } \ No newline at end of file