mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
IDEA-354490 Fixes
GitOrigin-RevId: fb38dc1163ab0d75f19e0dc5a9ab91c594f18beb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e2d7d259e9
commit
d2863574f6
@@ -5,7 +5,9 @@ import com.intellij.ide.structureView.logical.ConvertElementsProvider
|
||||
import com.intellij.ide.structureView.logical.LogicalStructureElementsProvider
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiClassOwner
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@ApiStatus.Internal
|
||||
class ClassOwnerLogicalStructureElementsProvider: LogicalStructureElementsProvider<PsiClassOwner, Any> {
|
||||
override fun getElements(parent: PsiClassOwner): List<Any> {
|
||||
val result = mutableListOf<Any>()
|
||||
|
||||
@@ -1004,7 +1004,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
|
||||
.map(path -> getPathBounds(path))
|
||||
.ifPresent(pathBounds -> {
|
||||
floatingToolbar.hideImmediately();
|
||||
floatingToolbar.setBounds(getBounds().width - 70, pathBounds.y - 5, 60, pathBounds.height + 5);
|
||||
floatingToolbar.setBounds(getParent().getBounds().width - 70, pathBounds.y - 5, 60, pathBounds.height + 5);
|
||||
floatingToolbar.scheduleShow();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -81,7 +81,12 @@ public abstract class PsiTreeElementBase <T extends PsiElement> implements Struc
|
||||
|
||||
private @NotNull List<StructureViewTreeElement> doGetChildren(boolean withCustomRegions) {
|
||||
T element = getElement();
|
||||
return element == null ? Collections.emptyList() : mergeWithExtensions(element, getChildrenBase(), withCustomRegions);
|
||||
if (element == null) return Collections.emptyList();
|
||||
Collection<StructureViewTreeElement> baseChildren = getChildrenBase();
|
||||
if (!isAllowExtensions()) {
|
||||
return (baseChildren instanceof List<StructureViewTreeElement> list) ? list : new ArrayList<>(baseChildren);
|
||||
}
|
||||
return mergeWithExtensions(element, baseChildren, withCustomRegions);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -105,6 +110,11 @@ public abstract class PsiTreeElementBase <T extends PsiElement> implements Struc
|
||||
|
||||
public abstract @NotNull Collection<StructureViewTreeElement> getChildrenBase();
|
||||
|
||||
@ApiStatus.Internal
|
||||
public boolean isAllowExtensions() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
@@ -7,9 +7,11 @@ 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.ContainerElementsProvider
|
||||
import com.intellij.ide.structureView.logical.ExternalElementsProvider
|
||||
import com.intellij.ide.structureView.logical.LogicalStructureTreeElementProvider
|
||||
import com.intellij.ide.structureView.logical.PropertyElementProvider
|
||||
import com.intellij.ide.structureView.logical.model.LogicalContainerPresentationProvider
|
||||
import com.intellij.ide.structureView.logical.model.LogicalModelPresentationProvider
|
||||
import com.intellij.ide.structureView.logical.model.LogicalStructureAssembledModel
|
||||
import com.intellij.ide.util.treeView.smartTree.TreeElement
|
||||
@@ -19,9 +21,7 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiTarget
|
||||
import com.intellij.ui.SimpleTextAttributes
|
||||
import java.awt.Component
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.function.Supplier
|
||||
import javax.swing.Icon
|
||||
|
||||
internal class LogicalStructureViewModel private constructor(psiFile: PsiFile, editor: Editor?, assembledModel: LogicalStructureAssembledModel<*>, elementBuilder: ElementsBuilder)
|
||||
@@ -107,6 +107,12 @@ private class ElementsBuilder {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (groupingObject is ContainerElementsProvider<*, *>
|
||||
&& LogicalContainerPresentationProvider.getForObject(groupingObject)?.isFlatElements() == true) {
|
||||
for (child in childrenProvider()) {
|
||||
result.add(createViewTreeElement(child))
|
||||
}
|
||||
}
|
||||
else if (groupingObject is ExternalElementsProvider<*, *>) {
|
||||
val groupElement = groupElements.getOrPut(assembledModel) {
|
||||
ConcurrentHashMap(mapOf(groupingObject to LogicalGroupStructureElement (assembledModel, groupingObject, childrenProvider)))
|
||||
@@ -188,6 +194,8 @@ private class ElementsBuilder {
|
||||
return getChildrenNodes(assembledModel)
|
||||
}
|
||||
|
||||
override fun isAllowExtensions(): Boolean = false
|
||||
|
||||
override fun getLogicalAssembledModel() = assembledModel
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
@@ -275,6 +283,8 @@ private class ElementsBuilder {
|
||||
return emptyList() // getChildrenNodes (assembledModel, parentKey + "." + assembledModel.model.hashCode())
|
||||
}
|
||||
|
||||
override fun isAllowExtensions(): Boolean = false
|
||||
|
||||
override fun getLogicalAssembledModel() = assembledModel
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
// 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.model
|
||||
|
||||
import com.intellij.ide.presentation.PresentationProvider
|
||||
import com.intellij.ide.structureView.logical.ContainerElementsProvider
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.util.ClassExtension
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@ApiStatus.Internal
|
||||
abstract class LogicalContainerPresentationProvider<T: ContainerElementsProvider<*, *>>: PresentationProvider<T>() {
|
||||
|
||||
companion object {
|
||||
private val PROVIDER_EP = ExtensionPointName<PresentationProvider<*>>("com.intellij.presentationProvider")
|
||||
private val PROVIDERS = ClassExtension<PresentationProvider<*>>(PROVIDER_EP.name)
|
||||
|
||||
fun <T: ContainerElementsProvider<*, *>> getForObject(obj: T): LogicalContainerPresentationProvider<T>? {
|
||||
return PROVIDERS.findSingle(obj::class.java) as? LogicalContainerPresentationProvider<T>
|
||||
}
|
||||
}
|
||||
|
||||
open fun isFlatElements(): Boolean = false
|
||||
|
||||
override fun getTypeName(t: T?): String = ""
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user