migrate to DataSink.lazy: project view

GitOrigin-RevId: 4a0fa6589c3cb8839d18014c92cf12592f682af5
This commit is contained in:
Gregory.Shrago
2024-08-14 21:11:30 +04:00
committed by intellij-monorepo-bot
parent 874ddac709
commit c747b110fc
3 changed files with 42 additions and 52 deletions

View File

@@ -17,10 +17,7 @@ import com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode;
import com.intellij.ide.util.DeleteHandler;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformCoreDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.registry.Registry;
@@ -92,26 +89,25 @@ public class PackageViewPane extends AbstractProjectViewPaneWithAsyncSupport {
}
@Override
protected @Nullable Object getSlowDataFromSelection(@Nullable Object @NotNull [] selectedUserObjects,
@Nullable Object @Nullable [] singleSelectedPathUserObjects,
@NotNull String dataId) {
if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) {
protected void uiDataSnapshotForSelection(@NotNull DataSink sink,
@Nullable Object @NotNull [] selectedUserObjects,
@Nullable Object @Nullable [] singleSelectedPathUserObjects) {
super.uiDataSnapshotForSelection(sink, selectedUserObjects, singleSelectedPathUserObjects);
sink.lazy(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, () -> {
Object o = selectedUserObjects.length != 1 ? null : getValueFromNode(selectedUserObjects[0]);
if (o instanceof PackageElement) {
return myDeletePSIElementProvider;
}
}
if (PackageElement.DATA_KEY.is(dataId)) {
Object o = selectedUserObjects.length != 1 ? null : getValueFromNode(selectedUserObjects[0]);
return o instanceof PackageElement ? o : null;
}
if (PlatformCoreDataKeys.MODULE.is(dataId)) {
Object o = selectedUserObjects.length != 1 ? null : getValueFromNode(selectedUserObjects[0]);
if (o instanceof PackageElement) {
return ((PackageElement)o).getModule();
}
}
return super.getSlowDataFromSelection(selectedUserObjects, singleSelectedPathUserObjects, dataId);
return null;
});
sink.lazy(PackageElement.DATA_KEY, () -> {
Object value = selectedUserObjects.length != 1 ? null : getValueFromNode(selectedUserObjects[0]);
return value instanceof PackageElement o ? o : null;
});
sink.lazy(PlatformCoreDataKeys.MODULE, () -> {
Object value = selectedUserObjects.length != 1 ? null : getValueFromNode(selectedUserObjects[0]);
return value instanceof PackageElement o ? o.getModule() : null;
});
}
@RequiresBackgroundThread(generateAssertion = false)

View File

@@ -15938,7 +15938,6 @@ a:com.intellij.ide.projectView.impl.AbstractProjectViewPane
- f:getSelectedValues(java.lang.Object[]):java.lang.Object[]
- getSelectionPaths():javax.swing.tree.TreePath[]
- f:getSingleSelectedPathUserObjects():java.lang.Object[]
- p:getSlowDataFromSelection(java.lang.Object[],java.lang.Object[],java.lang.String):java.lang.Object
- f:getSubId():java.lang.String
- getSubIds():java.lang.String[]
- a:getTitle():java.lang.String
@@ -15966,6 +15965,7 @@ a:com.intellij.ide.projectView.impl.AbstractProjectViewPane
- f:setSubId(java.lang.String):V
- supportsManualOrder():Z
- uiDataSnapshot(com.intellij.openapi.actionSystem.DataSink):V
- p:uiDataSnapshotForSelection(com.intellij.openapi.actionSystem.DataSink,java.lang.Object[],java.lang.Object[]):V
- updateFrom(java.lang.Object,Z,Z):V
- a:updateFromRoot(Z):com.intellij.openapi.util.ActionCallback
- writeExternal(org.jdom.Element):V

View File

@@ -314,10 +314,6 @@ public abstract class AbstractProjectViewPane implements UiCompatibleDataProvide
paths == null || paths.length != 1 ? null :
ArrayUtil.toObjectArray(ContainerUtil.map(paths[0].getPath(), TreeUtil::getUserObject));
sink.set(PlatformCoreDataKeys.BGT_DATA_PROVIDER,
dataId -> getSlowDataFromSelection(
selectedUserObjects, singleSelectedPathUserObjects, dataId));
if (paths != null) {
ArrayList<Navigatable> navigatables = new ArrayList<>();
for (TreePath path : paths) {
@@ -336,6 +332,8 @@ public abstract class AbstractProjectViewPane implements UiCompatibleDataProvide
sink.set(CommonDataKeys.NAVIGATABLE_ARRAY,
navigatables.isEmpty() ? null : navigatables.toArray(Navigatable.EMPTY_NAVIGATABLE_ARRAY));
}
uiDataSnapshotForSelection(sink, selectedUserObjects, singleSelectedPathUserObjects);
if (myTreeStructure instanceof AbstractTreeStructureBase treeStructure) {
List<TreeStructureProvider> providers = treeStructure.getProviders();
if (providers != null && !providers.isEmpty()) {
@@ -396,34 +394,31 @@ public abstract class AbstractProjectViewPane implements UiCompatibleDataProvide
return PsiUtilCore.toPsiElementArray(result);
}
@RequiresReadLock(generateAssertion = false)
@RequiresBackgroundThread(generateAssertion = false)
protected @Nullable Object getSlowDataFromSelection(@Nullable Object @NotNull [] selectedUserObjects,
@Nullable Object @Nullable [] singleSelectedPathUserObjects,
@NotNull String dataId) {
if (CommonDataKeys.PSI_ELEMENT.is(dataId)) {
protected void uiDataSnapshotForSelection(@NotNull DataSink sink, @Nullable Object @NotNull [] selectedUserObjects,
@Nullable Object @Nullable [] singleSelectedPathUserObjects) {
sink.lazy(CommonDataKeys.PSI_ELEMENT, () -> {
final PsiElement[] elements = getPsiElements(selectedUserObjects);
return elements.length == 1 ? elements[0] : null;
}
if (PlatformCoreDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) {
});
sink.lazy(PlatformCoreDataKeys.PSI_ELEMENT_ARRAY, () -> {
PsiElement[] elements = getPsiElements(selectedUserObjects);
return elements.length > 0 ? elements : null;
}
if (PlatformCoreDataKeys.PROJECT_CONTEXT.is(dataId)) {
});
sink.lazy(PlatformCoreDataKeys.PROJECT_CONTEXT, () -> {
Object selected = getSingleNodeElement(selectedUserObjects);
return selected instanceof Project ? selected : null;
}
if (LangDataKeys.MODULE_CONTEXT.is(dataId)) {
return selected instanceof Project o ? o : null;
});
sink.lazy(LangDataKeys.MODULE_CONTEXT, () -> {
Object selected = getSingleNodeElement(selectedUserObjects);
return moduleContext(myProject, selected);
}
if (LangDataKeys.MODULE_CONTEXT_ARRAY.is(dataId)) {
});
sink.lazy(LangDataKeys.MODULE_CONTEXT_ARRAY, () -> {
return getSelectedModules(selectedUserObjects);
}
if (ProjectView.UNLOADED_MODULES_CONTEXT_KEY.is(dataId)) {
});
sink.lazy(ProjectView.UNLOADED_MODULES_CONTEXT_KEY, () -> {
return Collections.unmodifiableList(getSelectedUnloadedModules(selectedUserObjects));
}
if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) {
});
sink.lazy(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, () -> {
Module[] modules = getSelectedModules(selectedUserObjects);
if (modules != null || !getSelectedUnloadedModules(selectedUserObjects).isEmpty()) {
return ModuleDeleteProvider.getInstance();
@@ -433,20 +428,19 @@ public abstract class AbstractProjectViewPane implements UiCompatibleDataProvide
return new DetachLibraryDeleteProvider(myProject, orderEntry);
}
return myDeletePSIElementProvider;
}
if (ModuleGroup.ARRAY_DATA_KEY.is(dataId)) {
});
sink.lazy(ModuleGroup.ARRAY_DATA_KEY, () -> {
final List<ModuleGroup> selectedElements = getSelectedValues(selectedUserObjects, ModuleGroup.class);
return selectedElements.isEmpty() ? null : selectedElements.toArray(new ModuleGroup[0]);
}
if (LibraryGroupElement.ARRAY_DATA_KEY.is(dataId)) {
});
sink.lazy(LibraryGroupElement.ARRAY_DATA_KEY, () -> {
final List<LibraryGroupElement> selectedElements = getSelectedValues(selectedUserObjects, LibraryGroupElement.class);
return selectedElements.isEmpty() ? null : selectedElements.toArray(new LibraryGroupElement[0]);
}
if (NamedLibraryElement.ARRAY_DATA_KEY.is(dataId)) {
});
sink.lazy(NamedLibraryElement.ARRAY_DATA_KEY, () -> {
final List<NamedLibraryElement> selectedElements = getSelectedValues(selectedUserObjects, NamedLibraryElement.class);
return selectedElements.isEmpty() ? null : selectedElements.toArray(new NamedLibraryElement[0]);
}
return null;
});
}
@RequiresReadLock(generateAssertion = false)