mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-354490 Fixes
GitOrigin-RevId: 9df9d602e6108746d291f5a2d3d04e3f52d20347
This commit is contained in:
committed by
intellij-monorepo-bot
parent
245479dba8
commit
882595690b
+20
-3
@@ -1,13 +1,30 @@
|
||||
// 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.lang.java.logical
|
||||
|
||||
import com.intellij.ide.structureView.logical.ConvertElementsProvider
|
||||
import com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiClassOwner
|
||||
|
||||
class ClassOwnerLogicalStructureElementsProvider: LogicalStructureElementsProvider<PsiClassOwner, PsiClass> {
|
||||
override fun getElements(parent: PsiClassOwner): List<PsiClass> {
|
||||
return parent.classes.toList()
|
||||
class ClassOwnerLogicalStructureElementsProvider: LogicalStructureElementsProvider<PsiClassOwner, Any> {
|
||||
override fun getElements(parent: PsiClassOwner): List<Any> {
|
||||
val result = mutableListOf<Any>()
|
||||
var convertedAtLeastOne = false
|
||||
for (psiClass in parent.classes) {
|
||||
val convertedModels = LogicalStructureElementsProvider.getProviders(psiClass)
|
||||
.filterIsInstance<ConvertElementsProvider<PsiClass, Any>>()
|
||||
.map { it.convert(psiClass) }
|
||||
.filterNotNull()
|
||||
if (convertedModels.count() > 0) {
|
||||
convertedModels.forEach { result.add(it) }
|
||||
convertedAtLeastOne = true
|
||||
}
|
||||
else {
|
||||
result.add(psiClass)
|
||||
}
|
||||
}
|
||||
if (convertedAtLeastOne) return result
|
||||
return emptyList()
|
||||
}
|
||||
override fun forLogicalModelClass(): Class<PsiClassOwner> = PsiClassOwner::class.java
|
||||
}
|
||||
|
||||
@@ -77,12 +77,6 @@ f:com.intellij.ide.structureView.logical.impl.LogicalStructureViewService
|
||||
- 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,java.lang.String):com.intellij.ide.structureView.StructureViewTreeElement
|
||||
- bs:createViewTreeElement$default(com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel,java.lang.String,I,java.lang.Object):com.intellij.ide.structureView.StructureViewTreeElement
|
||||
f:com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
|
||||
- sf:Companion:com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel$Companion
|
||||
- f:getChildren():java.util.List
|
||||
|
||||
+18
-1
@@ -19,10 +19,14 @@
|
||||
*/
|
||||
package com.intellij.ide.highlighter;
|
||||
|
||||
import com.intellij.ide.structureView.StructureView;
|
||||
import com.intellij.ide.structureView.StructureViewBuilder;
|
||||
import com.intellij.ide.structureView.StructureViewBuilderProvider;
|
||||
import com.intellij.ide.structureView.impl.StructureViewComposite;
|
||||
import com.intellij.ide.structureView.logical.impl.LogicalStructureViewService;
|
||||
import com.intellij.lang.LanguageStructureViewBuilder;
|
||||
import com.intellij.lang.PsiStructureViewFactory;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.LanguageFileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -44,6 +48,19 @@ public class LanguageFileTypeStructureViewBuilderProvider implements StructureVi
|
||||
if (psiFile == null) return null;
|
||||
|
||||
final PsiStructureViewFactory factory = LanguageStructureViewBuilder.getInstance().forLanguage(psiFile.getLanguage());
|
||||
return factory == null ? null : factory.getStructureViewBuilder(psiFile);
|
||||
if (factory == null) return null;
|
||||
StructureViewBuilder physicalBuilder = factory.getStructureViewBuilder(psiFile);
|
||||
if (physicalBuilder == null) return null;
|
||||
StructureViewBuilder logicalBuilder = LogicalStructureViewService.Companion.getInstance(project).getLogicalStructureBuilder(psiFile);
|
||||
if (logicalBuilder == null) return physicalBuilder;
|
||||
return new StructureViewBuilder() {
|
||||
@Override
|
||||
public @NotNull StructureView createStructureView(@Nullable FileEditor fileEditor, @NotNull Project project) {
|
||||
return new StructureViewComposite(
|
||||
new StructureViewComposite.StructureViewDescriptor("Logical", logicalBuilder.createStructureView(fileEditor, project), null),
|
||||
new StructureViewComposite.StructureViewDescriptor("Physical", physicalBuilder.createStructureView(fileEditor, project), null)
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
+27
-13
@@ -2,29 +2,43 @@
|
||||
package com.intellij.ide.structureView.logical.impl
|
||||
|
||||
import com.intellij.ide.TypePresentationService
|
||||
import com.intellij.ide.structureView.StructureViewModel
|
||||
import com.intellij.ide.structureView.StructureViewModelBase
|
||||
import com.intellij.ide.structureView.StructureViewTreeElement
|
||||
import com.intellij.ide.structureView.impl.common.PsiTreeElementBase
|
||||
import com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider
|
||||
import com.intellij.ide.structureView.logical.PropertyElementProvider
|
||||
import com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
|
||||
import com.intellij.ide.util.treeView.smartTree.TreeElement
|
||||
import com.intellij.navigation.ColoredItemPresentation
|
||||
import com.intellij.navigation.ItemPresentation
|
||||
import com.intellij.openapi.editor.HighlighterColors
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey
|
||||
import com.intellij.openapi.editor.markup.TextAttributes
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiTarget
|
||||
import java.awt.Font
|
||||
import javax.swing.Icon
|
||||
|
||||
/**
|
||||
* @param parentKey is needed to distinguish similar nodes in different branches.
|
||||
* Because the logical model may be recursive or the same element can be present a few times (e.g: two controllers depend on the same service)
|
||||
* @return structure tree element basing on logical model
|
||||
* The model's children will be transformed into child tree elements
|
||||
*/
|
||||
fun <T> createViewTreeElement(assembledModel: LogicalStructureAssembledModel<T>, parentKey: String = "root"): StructureViewTreeElement {
|
||||
internal class LogicalStructureViewModel(psiFile: PsiFile, editor: Editor?, assembledModel: LogicalStructureAssembledModel<*>)
|
||||
: StructureViewModelBase(psiFile, editor, createViewTreeElement(assembledModel, "root")),
|
||||
StructureViewModel.ElementInfoProvider, StructureViewModel.ExpandInfoProvider {
|
||||
|
||||
override fun isAlwaysShowsPlus(element: StructureViewTreeElement?): Boolean {
|
||||
return element is LogicalGroupStructureElement
|
||||
}
|
||||
|
||||
override fun isAlwaysLeaf(element: StructureViewTreeElement?): Boolean {
|
||||
return element is PropertyPsiElementStructureElement<*> || element is PropertyStructureElement
|
||||
}
|
||||
|
||||
override fun isAutoExpand(element: StructureViewTreeElement): Boolean {
|
||||
return false //(element as? LogicalStructureViewTreeElement<*>)?.getLogicalAssembledModel()?.model !is BackReferenceLogicalModel
|
||||
}
|
||||
|
||||
override fun isSmartExpand(): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T> createViewTreeElement(assembledModel: LogicalStructureAssembledModel<T>, parentKey: String): StructureViewTreeElement {
|
||||
val model = assembledModel.model
|
||||
val explicitElement = LogicalStructureTreeElementProvider.getTreeElement(model)
|
||||
if (explicitElement != null) return explicitElement
|
||||
@@ -73,7 +87,7 @@ private fun getPsiElement(model: Any?): PsiElement? {
|
||||
}
|
||||
}
|
||||
|
||||
interface LogicalStructureViewTreeElement<T>: StructureViewTreeElement {
|
||||
private interface LogicalStructureViewTreeElement<T>: StructureViewTreeElement {
|
||||
|
||||
fun getLogicalAssembledModel(): LogicalStructureAssembledModel<T>
|
||||
|
||||
-26
@@ -3,7 +3,6 @@ package com.intellij.ide.structureView.logical.impl
|
||||
|
||||
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.application.ApplicationManager
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.editor.Editor
|
||||
@@ -37,29 +36,4 @@ class LogicalStructureViewService(
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class LogicalStructureViewModel(psiFile: PsiFile, editor: Editor?, assembledModel: LogicalStructureAssembledModel<*>)
|
||||
: StructureViewModelBase(psiFile, editor, createViewTreeElement(assembledModel)),
|
||||
StructureViewModel.ElementInfoProvider, StructureViewModel.ExpandInfoProvider {
|
||||
|
||||
override fun isAlwaysShowsPlus(element: StructureViewTreeElement?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun isAlwaysLeaf(element: StructureViewTreeElement?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
//override fun getGroupers(): Array<Grouper> {
|
||||
// return arrayOf(LogicalGrouper())
|
||||
//}
|
||||
|
||||
override fun isAutoExpand(element: StructureViewTreeElement): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun isSmartExpand(): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -23,8 +23,9 @@ class LogicalStructureAssembledModel<T> private constructor(
|
||||
|
||||
fun getChildren(): List<LogicalStructureAssembledModel<*>> {
|
||||
return LogicalStructureElementsProvider.getProviders(model!!)
|
||||
.filter { it !is ConvertElementsProvider }
|
||||
.flatMap { it.getElements(model) }
|
||||
.flatMap { ConvertElementsProvider.convert(it) }
|
||||
//.flatMap { ConvertElementsProvider.convert(it) }
|
||||
.map { LogicalStructureAssembledModel(project, it) }
|
||||
.toList()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user