diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml
index 5eacc7b52126..9034110c3f4a 100644
--- a/java/java-impl/src/META-INF/JavaPlugin.xml
+++ b/java/java-impl/src/META-INF/JavaPlugin.xml
@@ -782,10 +782,10 @@
-
+
+ implementation="com.intellij.lang.java.logical.JavaPsiClassLogicalStructureTreeElementProvider"/>
diff --git a/java/java-structure-view/src/com/intellij/ide/structureView/logical/ClassOwnerLogicalStructureElementsProvider.kt b/java/java-structure-view/src/com/intellij/lang/java/logical/ClassOwnerLogicalStructureElementsProvider.kt
similarity index 80%
rename from java/java-structure-view/src/com/intellij/ide/structureView/logical/ClassOwnerLogicalStructureElementsProvider.kt
rename to java/java-structure-view/src/com/intellij/lang/java/logical/ClassOwnerLogicalStructureElementsProvider.kt
index 857e945245e7..43be1457c0da 100644
--- a/java/java-structure-view/src/com/intellij/ide/structureView/logical/ClassOwnerLogicalStructureElementsProvider.kt
+++ b/java/java-structure-view/src/com/intellij/lang/java/logical/ClassOwnerLogicalStructureElementsProvider.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.structureView.logical
+package com.intellij.lang.java.logical
-import com.intellij.ide.logical.LogicalStructureElementsProvider
+import com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiClassOwner
diff --git a/java/java-structure-view/src/com/intellij/ide/structureView/logical/JavaPsiClassLogicalStructureTreeElementProvider.kt b/java/java-structure-view/src/com/intellij/lang/java/logical/JavaPsiClassLogicalStructureTreeElementProvider.kt
similarity index 83%
rename from java/java-structure-view/src/com/intellij/ide/structureView/logical/JavaPsiClassLogicalStructureTreeElementProvider.kt
rename to java/java-structure-view/src/com/intellij/lang/java/logical/JavaPsiClassLogicalStructureTreeElementProvider.kt
index 0c0e223f6d24..aafdcf391488 100644
--- a/java/java-structure-view/src/com/intellij/ide/structureView/logical/JavaPsiClassLogicalStructureTreeElementProvider.kt
+++ b/java/java-structure-view/src/com/intellij/lang/java/logical/JavaPsiClassLogicalStructureTreeElementProvider.kt
@@ -1,9 +1,9 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.structureView.logical
+package com.intellij.lang.java.logical
-import com.intellij.ide.logical.LogicalStructureTreeElementProvider
import com.intellij.ide.structureView.StructureViewTreeElement
import com.intellij.ide.structureView.impl.java.JavaClassTreeElement
+import com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider
import com.intellij.psi.PsiClass
class JavaPsiClassLogicalStructureTreeElementProvider: LogicalStructureTreeElementProvider {
diff --git a/java/java-structure-view/src/com/intellij/ide/structureView/logical/PsiClassLogicalElementProvider.kt b/java/java-structure-view/src/com/intellij/lang/java/logical/PsiClassLogicalElementProvider.kt
similarity index 75%
rename from java/java-structure-view/src/com/intellij/ide/structureView/logical/PsiClassLogicalElementProvider.kt
rename to java/java-structure-view/src/com/intellij/lang/java/logical/PsiClassLogicalElementProvider.kt
index d3c5da334560..498df306710d 100644
--- a/java/java-structure-view/src/com/intellij/ide/structureView/logical/PsiClassLogicalElementProvider.kt
+++ b/java/java-structure-view/src/com/intellij/lang/java/logical/PsiClassLogicalElementProvider.kt
@@ -1,7 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package com.intellij.ide.structureView.logical
+package com.intellij.lang.java.logical
-import com.intellij.ide.logical.ConvertElementsProvider
+import com.intellij.ide.structureView.logical.ConvertElementsProvider
import com.intellij.psi.PsiClass
abstract class PsiClassLogicalElementProvider : ConvertElementsProvider() {
diff --git a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/ShowLogicalStructureAction.kt b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/ShowLogicalStructureAction.kt
new file mode 100644
index 000000000000..6dc476af8d60
--- /dev/null
+++ b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/ShowLogicalStructureAction.kt
@@ -0,0 +1,28 @@
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.ide.structureView.newStructureView
+
+import com.intellij.ide.impl.StructureViewWrapperImpl
+import com.intellij.ide.structureView.StructureViewBundle
+import com.intellij.ide.structureView.StructureViewState
+import com.intellij.openapi.actionSystem.ActionUpdateThread
+import com.intellij.openapi.actionSystem.AnActionEvent
+import com.intellij.openapi.actionSystem.ToggleAction
+import com.intellij.openapi.application.ApplicationManager
+
+internal class ShowLogicalStructureAction : ToggleAction(StructureViewBundle.message("structureview.action.show.logical")) {
+
+ override fun getActionUpdateThread(): ActionUpdateThread {
+ return ActionUpdateThread.EDT
+ }
+
+ override fun isSelected(e: AnActionEvent): Boolean {
+ val project = e.project ?: return false
+ return StructureViewState.getInstance(project).showLogicalStructure
+ }
+
+ override fun setSelected(e: AnActionEvent, state: Boolean) {
+ val project = e.project ?: return
+ StructureViewState.getInstance(project).showLogicalStructure = state
+ ApplicationManager.getApplication().messageBus.syncPublisher(StructureViewWrapperImpl.STRUCTURE_CHANGED).run()
+ }
+}
\ No newline at end of file
diff --git a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
index 5617fde004de..14756bc07046 100644
--- a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
+++ b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
@@ -324,6 +324,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
protected @NotNull ActionGroup createActionGroup() {
DefaultActionGroup result = new DefaultActionGroup();
+ result.add(new ShowLogicalStructureAction());
List sorters = getSortActions();
if (!sorters.isEmpty()) {
result.addAll(sorters);
@@ -357,6 +358,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
public final DefaultActionGroup getViewActions() {
DefaultActionGroup result = new DefaultActionGroup(IdeBundle.message("group.view.options"), null, AllIcons.Actions.GroupBy);
result.setPopup(true);
+ result.add(new ShowLogicalStructureAction());
result.addSeparator(StructureViewBundle.message("structureview.subgroup.sort"));
result.addAll(sortActionsByName(getSortActions()));
result.addSeparator(StructureViewBundle.message("structureview.subgroup.filter"));
diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml
index 01da5dbe1895..f5f49bb90c48 100644
--- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml
+++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml
@@ -120,8 +120,8 @@
-
-
+
+
diff --git a/platform/platform-resources/src/idea/LangActions.xml b/platform/platform-resources/src/idea/LangActions.xml
index 081547243526..f73f4bbc5909 100644
--- a/platform/platform-resources/src/idea/LangActions.xml
+++ b/platform/platform-resources/src/idea/LangActions.xml
@@ -1034,6 +1034,8 @@
+
+