mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[project view] compute tree structure data from selection in slow provider
``` ... at com.intellij.ide.projectView.impl.nodes.PsiTreeAnchorizer.retrieveElement(PsiTreeAnchorizer.java:48) at com.intellij.ide.util.treeView.AbstractTreeNode.getValue(AbstractTreeNode.java:150) at com.intellij.lang.properties.projectView.ResourceBundleGrouper.getData(ResourceBundleGrouper.java:105) at com.intellij.ide.util.treeView.AbstractTreeStructureBase.getDataFromProviders(AbstractTreeStructureBase.java:93) at com.intellij.ide.projectView.impl.AbstractProjectViewPane.getData(AbstractProjectViewPane.java:376) ... ``` GitOrigin-RevId: 6189cc40b386ac7e469c6558a357058ff45a092d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bf70f87bf1
commit
edc62cbf0f
+17
-9
@@ -371,15 +371,6 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
public Object getData(@NotNull String dataId) {
|
||||
if (PlatformDataKeys.TREE_EXPANDER.is(dataId)) return getTreeExpander();
|
||||
|
||||
if (myTreeStructure instanceof AbstractTreeStructureBase) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<AbstractTreeNode<?>> nodes = (List)getSelectedNodes(AbstractTreeNode.class);
|
||||
Object data = ((AbstractTreeStructureBase)myTreeStructure).getDataFromProviders(nodes, dataId);
|
||||
if (data != null) {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
if (CommonDataKeys.NAVIGATABLE_ARRAY.is(dataId)) {
|
||||
TreePath[] paths = getSelectionPaths();
|
||||
if (paths == null) return null;
|
||||
@@ -454,6 +445,10 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
@RequiresReadLock(generateAssertion = false)
|
||||
@RequiresBackgroundThread(generateAssertion = false)
|
||||
private @Nullable Object getDataFromSelection(@Nullable Object @NotNull [] selectedUserObjects, @NotNull String dataId) {
|
||||
Object treeStructureData = getFromTreeStructure(selectedUserObjects, dataId);
|
||||
if (treeStructureData != null) {
|
||||
return treeStructureData;
|
||||
}
|
||||
if (CommonDataKeys.PSI_ELEMENT.is(dataId)) {
|
||||
final PsiElement[] elements = getPsiElements(selectedUserObjects);
|
||||
return elements.length == 1 ? elements[0] : null;
|
||||
@@ -473,6 +468,19 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
return null;
|
||||
}
|
||||
|
||||
private @Nullable Object getFromTreeStructure(@Nullable Object @NotNull [] selectedUserObjects, @NotNull String dataId) {
|
||||
if (!(myTreeStructure instanceof AbstractTreeStructureBase)) {
|
||||
return null;
|
||||
}
|
||||
List<AbstractTreeNode<?>> nodes = new ArrayList<>(selectedUserObjects.length);
|
||||
for (Object userObject : selectedUserObjects) {
|
||||
if (userObject instanceof AbstractTreeNode) {
|
||||
nodes.add((AbstractTreeNode<?>)userObject);
|
||||
}
|
||||
}
|
||||
return ((AbstractTreeStructureBase)myTreeStructure).getDataFromProviders(nodes, dataId);
|
||||
}
|
||||
|
||||
@RequiresReadLock(generateAssertion = false)
|
||||
@RequiresBackgroundThread(generateAssertion = false)
|
||||
private @NotNull PsiElement @NotNull [] getPsiElements(@Nullable Object @NotNull [] selectedUserObjects) {
|
||||
|
||||
Reference in New Issue
Block a user