IDEA-354490 Added the switcher

GitOrigin-RevId: bf34c8ca3aabb56ef02bcc80d935ff055682329d
This commit is contained in:
Anton Kozub
2024-08-26 12:57:03 +00:00
committed by intellij-monorepo-bot
parent f8acffcc57
commit f208071b61
22 changed files with 155 additions and 35 deletions
+2 -2
View File
@@ -782,10 +782,10 @@
<codeInsight.linkHandler prefix="#javaClass/" handlerClass="com.intellij.codeInsight.daemon.impl.JavaClassTooltipLinkHandler"/>
<lang.psiStructureViewFactory language="JAVA" implementationClass="com.intellij.lang.java.JavaStructureViewBuilderFactory"/>
<lang.logicalStructureElementsProvider implementation="com.intellij.ide.structureView.logical.ClassOwnerLogicalStructureElementsProvider"/>
<lang.logicalStructureElementsProvider implementation="com.intellij.lang.java.logical.ClassOwnerLogicalStructureElementsProvider"/>
<lang.logicalStructureTreeElementProvider
id="javaPsiClassLogicalStructureTreeElementProvider"
implementation="com.intellij.ide.structureView.logical.JavaPsiClassLogicalStructureTreeElementProvider"/>
implementation="com.intellij.lang.java.logical.JavaPsiClassLogicalStructureTreeElementProvider"/>
<lang.smartEnterProcessor language="JSPX" implementationClass="com.intellij.codeInsight.completion.XmlSmartEnterProcessor"/>
@@ -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
@@ -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<PsiClass> {
@@ -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<T> : ConvertElementsProvider<PsiClass, T>() {
@@ -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()
}
}
@@ -324,6 +324,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
protected @NotNull ActionGroup createActionGroup() {
DefaultActionGroup result = new DefaultActionGroup();
result.add(new ShowLogicalStructureAction());
List<AnAction> 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"));
@@ -120,8 +120,8 @@
<extensionPoint name="lang.structureViewExtension" interface="com.intellij.ide.structureView.StructureViewExtension" dynamic="true"/>
<extensionPoint name="lang.logicalStructureElementsProvider" interface="com.intellij.ide.logical.LogicalStructureElementsProvider" dynamic="true"/>
<extensionPoint name="lang.logicalStructureTreeElementProvider" interface="com.intellij.ide.logical.LogicalStructureTreeElementProvider" dynamic="true"/>
<extensionPoint name="lang.logicalStructureElementsProvider" interface="com.intellij.ide.structureView.logical.LogicalStructureElementsProvider" dynamic="true"/>
<extensionPoint name="lang.logicalStructureTreeElementProvider" interface="com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider" dynamic="true"/>
<extensionPoint name="lang.surroundDescriptor" beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass" implements="com.intellij.lang.surroundWith.SurroundDescriptor"/>
@@ -1034,6 +1034,8 @@
<add-to-group group-id="Other.KeymapGroup"/>
</group>
<group id="StructureViewToolbar"/>
<group id="StructureViewPopupMenu">
<reference ref="EditSource"/>
<separator/>
+64
View File
@@ -15,6 +15,17 @@ a:com.intellij.ide.structureView.StructureViewFactoryEx
- a:isActionActive(java.lang.String):Z
- a:runWhenInitialized(java.lang.Runnable):V
- a:setActiveAction(java.lang.String,Z):V
f:com.intellij.ide.structureView.StructureViewState
- com.intellij.openapi.components.PersistentStateComponent
- sf:Companion:com.intellij.ide.structureView.StructureViewState$Companion
- <init>():V
- sf:getInstance(com.intellij.openapi.project.Project):com.intellij.ide.structureView.StructureViewState
- f:getShowLogicalStructure():Z
- getState():com.intellij.ide.structureView.StructureViewState
- loadState(com.intellij.ide.structureView.StructureViewState):V
- f:setShowLogicalStructure(Z):V
f:com.intellij.ide.structureView.StructureViewState$Companion
- f:getInstance(com.intellij.openapi.project.Project):com.intellij.ide.structureView.StructureViewState
com.intellij.ide.structureView.StructureViewWrapper
- a:selectCurrentElement(com.intellij.openapi.fileEditor.FileEditor,com.intellij.openapi.vfs.VirtualFile,Z):Z
c:com.intellij.ide.structureView.customRegions.CustomRegionTreeElement
@@ -45,6 +56,59 @@ a:com.intellij.ide.structureView.impl.common.PsiTreeElementBase
- isSearchInLocationString():Z
- isValid():Z
- navigate(Z):V
com.intellij.ide.structureView.logical.ContainerElementsProvider
- com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
- a:getContainerName():java.lang.String
a:com.intellij.ide.structureView.logical.ConvertElementsProvider
- com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
- sf:Companion:com.intellij.ide.structureView.logical.ConvertElementsProvider$Companion
- <init>():V
- a:convert(java.lang.Object):java.lang.Object
- getElements(java.lang.Object):java.util.List
f:com.intellij.ide.structureView.logical.ConvertElementsProvider$Companion
- f:convert(java.lang.Object):kotlin.sequences.Sequence
com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
- sf:Companion:com.intellij.ide.structureView.logical.LogicalStructureElementsProvider$Companion
- a:forLogicalModelClass():java.lang.Class
- a:getElements(java.lang.Object):java.util.List
f:com.intellij.ide.structureView.logical.LogicalStructureElementsProvider$Companion
- f:getEP_NAME():com.intellij.openapi.extensions.ExtensionPointName
- f:getProviders(java.lang.Object):kotlin.sequences.Sequence
com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider
- sf:Companion:com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider$Companion
- a:getModelClass():java.lang.Class
- a:getTreeElement(java.lang.Object):com.intellij.ide.structureView.StructureViewTreeElement
f:com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider$Companion
- f:getEP_NAME():com.intellij.openapi.extensions.ExtensionPointName
- f:getTreeElement(java.lang.Object):com.intellij.ide.structureView.StructureViewTreeElement
f:com.intellij.ide.structureView.logical.impl.LogicalGrouper
- com.intellij.ide.util.treeView.smartTree.Grouper
- <init>():V
- getName():java.lang.String
- getPresentation():com.intellij.ide.util.treeView.smartTree.ActionPresentation
- group(com.intellij.ide.util.treeView.AbstractTreeNode,java.util.Collection):java.util.Collection
f:com.intellij.ide.structureView.logical.impl.LogicalStructureViewService
- sf:Companion:com.intellij.ide.structureView.logical.impl.LogicalStructureViewService$Companion
- <init>(com.intellij.openapi.project.Project):V
- f:getLogicalStructureBuilder(com.intellij.psi.PsiFile):com.intellij.ide.structureView.StructureViewBuilder
f:com.intellij.ide.structureView.logical.impl.LogicalStructureViewService$Companion
- f:getInstance(com.intellij.openapi.project.Project):com.intellij.ide.structureView.logical.impl.LogicalStructureViewService
com.intellij.ide.structureView.logical.impl.LogicalStructureViewTreeElement
- com.intellij.ide.structureView.StructureViewTreeElement
- a:getLogicalAssembledModel():com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
f:com.intellij.ide.structureView.logical.impl.LogicalStructureViewTreeElementsKt
- sf:createViewTreeElement(com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel):com.intellij.ide.structureView.StructureViewTreeElement
f:com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
- <init>(com.intellij.openapi.project.Project,java.lang.Object):V
- f:getChildren():java.util.List
- f:getChildrenGrouped():java.util.List
- f:getModel():java.lang.Object
- f:getProject():com.intellij.openapi.project.Project
com.intellij.ide.structureView.logical.model.LogicalStructureModel
- a:getName():java.lang.String
com.intellij.ide.structureView.logical.model.PsiRepresentingLogicalStructureModel
- com.intellij.ide.structureView.logical.model.LogicalStructureModel
- a:getPsiElement():com.intellij.psi.PsiElement
a:com.intellij.ide.util.InheritedMembersNodeProvider
- com.intellij.ide.util.ActionShortcutProvider
- com.intellij.ide.util.FileStructureNodeProvider
@@ -8,3 +8,4 @@ node.structureview.invalid=<invalid>
structureview.subgroup.sort=Sort
structureview.subgroup.filter=Show
structureview.subgroup.group=Group
structureview.action.show.logical=Logical Structure
@@ -19,9 +19,10 @@
*/
package com.intellij.ide.highlighter;
import com.intellij.ide.logical.impl.LogicalStructureViewService;
import com.intellij.ide.structureView.logical.impl.LogicalStructureViewService;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.ide.structureView.StructureViewBuilderProvider;
import com.intellij.ide.structureView.StructureViewState;
import com.intellij.lang.LanguageStructureViewBuilder;
import com.intellij.lang.PsiStructureViewFactory;
import com.intellij.openapi.fileTypes.FileType;
@@ -44,11 +45,10 @@ public class LanguageFileTypeStructureViewBuilderProvider implements StructureVi
final PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if (psiFile == null) return null;
//boolean isLogicalViewAvailable = true; // TODO StructureTW: add logic
//if (isLogicalViewAvailable) {
if (StructureViewState.getInstance(project).getState().getShowLogicalStructure()) {
StructureViewBuilder logicalViewBuilder = LogicalStructureViewService.Companion.getInstance(project).getLogicalStructureBuilder(psiFile);
if (logicalViewBuilder != null) return logicalViewBuilder;
//}
}
final PsiStructureViewFactory factory = LanguageStructureViewBuilder.getInstance().forLanguage(psiFile.getLanguage());
return factory == null ? null : factory.getStructureViewBuilder(psiFile);
@@ -0,0 +1,26 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.structureView
import com.intellij.openapi.components.*
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectManager
import com.intellij.util.xmlb.XmlSerializerUtil
@Service(Service.Level.PROJECT)
@State(name = "StructureViewState", storages = [(Storage(value = StoragePathMacros.WORKSPACE_FILE))])
class StructureViewState : PersistentStateComponent<StructureViewState> {
companion object {
@JvmStatic
fun getInstance(project: Project): StructureViewState = project.service()
}
var showLogicalStructure: Boolean = false
override fun loadState(state: StructureViewState) {
XmlSerializerUtil.copyBean(state, this)
}
override fun getState(): StructureViewState {
return this
}
}
@@ -1,5 +1,5 @@
// 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.logical
package com.intellij.ide.structureView.logical
abstract class ConvertElementsProvider<P, C> : LogicalStructureElementsProvider<P, C> {
abstract fun convert(p: P): C?
@@ -1,5 +1,5 @@
// 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.logical
package com.intellij.ide.structureView.logical
import com.intellij.openapi.extensions.ExtensionPointName
@@ -1,5 +1,5 @@
// 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.logical
package com.intellij.ide.structureView.logical
import com.intellij.ide.structureView.StructureViewTreeElement
import com.intellij.openapi.extensions.ExtensionPointName
@@ -1,5 +1,5 @@
// 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.logical.impl
package com.intellij.ide.structureView.logical.impl
import com.intellij.ide.TypePresentationService
import com.intellij.ide.projectView.PresentationData
@@ -17,7 +17,7 @@ class LogicalGrouper: Grouper {
override fun getPresentation(): ActionPresentation {
return object : ActionPresentation {
override fun getText(): String = "Logical"
override fun getText(): String = name
override fun getDescription(): String = ""
@@ -25,7 +25,7 @@ class LogicalGrouper: Grouper {
}
}
override fun getName(): String = "Logical"
override fun getName(): String = "Logical Type"
override fun group(parent: AbstractTreeNode<*>, children: MutableCollection<TreeElement>): Collection<Group> {
val structureElement = parent.value as? LogicalStructureViewTreeElement<*> ?: return emptyList()
@@ -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.logical.impl
package com.intellij.ide.structureView.logical.impl
import com.intellij.ide.logical.model.LogicalStructureAssembledModel
import com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
import com.intellij.ide.structureView.*
import com.intellij.ide.util.treeView.smartTree.Grouper
import com.intellij.openapi.components.Service
@@ -1,12 +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.logical.impl
package com.intellij.ide.structureView.logical.impl
import com.intellij.ide.TypePresentationService
import com.intellij.ide.logical.LogicalStructureTreeElementProvider
import com.intellij.ide.logical.model.LogicalStructureAssembledModel
import com.intellij.ide.logical.model.LogicalStructureModel
import com.intellij.ide.logical.model.PsiRepresentingLogicalStructureModel
import com.intellij.ide.projectView.PresentationData
import com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider
import com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
import com.intellij.ide.structureView.StructureViewTreeElement
import com.intellij.ide.structureView.impl.common.PsiTreeElementBase
import com.intellij.ide.util.treeView.smartTree.TreeElement
@@ -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.logical.model
package com.intellij.ide.structureView.logical.model
import com.intellij.ide.logical.ContainerElementsProvider
import com.intellij.ide.logical.ConvertElementsProvider
import com.intellij.ide.logical.LogicalStructureElementsProvider
import com.intellij.ide.structureView.logical.ContainerElementsProvider
import com.intellij.ide.structureView.logical.ConvertElementsProvider
import com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
import com.intellij.openapi.project.Project
class LogicalStructureAssembledModel<T>(
@@ -1,5 +1,5 @@
// 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.logical.model
package com.intellij.ide.structureView.logical.model
interface LogicalStructureModel {
@@ -1,5 +1,5 @@
// 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.logical.model
package com.intellij.ide.structureView.logical.model
import com.intellij.psi.PsiElement
@@ -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 org.jetbrains.kotlin.idea.structureView
import com.intellij.ide.logical.LogicalStructureTreeElementProvider
import com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider
import com.intellij.ide.structureView.StructureViewTreeElement
import org.jetbrains.kotlin.asJava.classes.KtLightClass