mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[service-view] IJPL-163793 migrate ServiceViewDescriptor.getDataProvider to uiDataSnapshot
GitOrigin-RevId: ffeb11360315bc8694b64e82031c01808200d266
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1a4efc920b
commit
0cab552af4
@@ -12,6 +12,7 @@ import com.intellij.pom.Navigatable;
|
||||
import com.intellij.ui.AutoScrollToSourceHandler;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.concurrency.Promise;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -123,18 +124,20 @@ abstract class ServiceView extends JPanel implements UiDataProvider, Disposable
|
||||
sink.set(ServiceViewActionProvider.SERVICES_SELECTED_ITEMS, selection);
|
||||
|
||||
ServiceViewContributor<?> contributor = ServiceViewDragHelper.getTheOnlyRootContributor(selection);
|
||||
DataProvider delegate = contributor == null ? null : contributor.getViewDescriptor(myProject).getDataProvider();
|
||||
DeleteProvider deleteProvider = delegate == null ? null : PlatformDataKeys.DELETE_ELEMENT_PROVIDER.getData(delegate);
|
||||
ServiceViewDeleteProvider viewDeleteProvider = new ServiceViewDeleteProvider(this);
|
||||
if (deleteProvider == null) {
|
||||
sink.set(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, viewDeleteProvider);
|
||||
}
|
||||
else {
|
||||
if (deleteProvider instanceof ServiceViewContributorDeleteProvider o) {
|
||||
o.setFallbackProvider(viewDeleteProvider);
|
||||
sink.lazy(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, () -> {
|
||||
DeleteProvider deleteProvider = getDeleteProvider(contributor);
|
||||
ServiceViewDeleteProvider viewDeleteProvider = new ServiceViewDeleteProvider(this);
|
||||
if (deleteProvider == null) {
|
||||
return viewDeleteProvider;
|
||||
}
|
||||
sink.set(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, deleteProvider);
|
||||
}
|
||||
else {
|
||||
if (deleteProvider instanceof ServiceViewContributorDeleteProvider o) {
|
||||
o.setFallbackProvider(viewDeleteProvider);
|
||||
}
|
||||
return deleteProvider;
|
||||
}
|
||||
});
|
||||
|
||||
sink.set(PlatformDataKeys.COPY_PROVIDER, new ServiceViewCopyProvider(this));
|
||||
sink.set(ServiceViewActionUtils.CONTRIBUTORS_KEY,
|
||||
getModel().getRoots().stream().map(item -> item.getRootContributor()).collect(Collectors.toSet()));
|
||||
@@ -145,14 +148,34 @@ abstract class ServiceView extends JPanel implements UiDataProvider, Disposable
|
||||
navigatables.toArray(Navigatable.EMPTY_NAVIGATABLE_ARRAY));
|
||||
|
||||
ServiceViewDescriptor descriptor = onlyItem == null || onlyItem.isRemoved() ? null : onlyItem.getViewDescriptor();
|
||||
DataProvider dataProvider = descriptor == null ? null : descriptor.getDataProvider();
|
||||
if (dataProvider != null) {
|
||||
RecursionManager.doPreventingRecursion(
|
||||
this, false, () -> {
|
||||
DataSink.uiDataSnapshot(sink, dataProvider);
|
||||
return null;
|
||||
});
|
||||
if (descriptor instanceof UiDataProvider dp) {
|
||||
sink.uiDataSnapshot(dp);
|
||||
}
|
||||
else {
|
||||
DataProvider dataProvider = descriptor == null ? null : descriptor.getDataProvider();
|
||||
if (dataProvider != null) {
|
||||
RecursionManager.doPreventingRecursion(
|
||||
this, false, () -> {
|
||||
DataSink.uiDataSnapshot(sink, dataProvider);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private @Nullable DeleteProvider getDeleteProvider(@Nullable ServiceViewContributor<?> contributor) {
|
||||
if (contributor == null) return null;
|
||||
ServiceViewDescriptor viewDescriptor = contributor.getViewDescriptor(myProject);
|
||||
if (viewDescriptor instanceof UiDataProvider dataProvider) {
|
||||
DataContext context = CustomizedDataContext.withSnapshot(DataContext.EMPTY_CONTEXT, sink -> {
|
||||
sink.uiDataSnapshot(dataProvider);
|
||||
});
|
||||
DeleteProvider deleteProvider = PlatformDataKeys.DELETE_ELEMENT_PROVIDER.getData(context);
|
||||
if (deleteProvider != null) return deleteProvider;
|
||||
}
|
||||
|
||||
DataProvider delegate = viewDescriptor.getDataProvider();
|
||||
return delegate == null ? null : PlatformDataKeys.DELETE_ELEMENT_PROVIDER.getData(delegate);
|
||||
}
|
||||
|
||||
private static void setViewModelState(@NotNull ServiceViewModel viewModel, @NotNull ServiceViewState viewState) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.pom.Navigatable;
|
||||
import com.intellij.util.OpenSourceUtil;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -14,6 +15,8 @@ import javax.swing.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.List;
|
||||
|
||||
/// Subclasses could also implement the [UiDataProvider] to provide the [DataContext]
|
||||
/// for the actions returned by [#getToolbarActions()] and [#getPopupActions()]
|
||||
public interface ServiceViewDescriptor {
|
||||
Key<Boolean> ACTION_HOLDER_KEY = Key.create("ServiceViewActionHolderContentComponent");
|
||||
|
||||
@@ -48,6 +51,8 @@ public interface ServiceViewDescriptor {
|
||||
return getToolbarActions();
|
||||
}
|
||||
|
||||
/// Obsolete, implement [UiDataProvider] instead
|
||||
@ApiStatus.Obsolete
|
||||
default @Nullable DataProvider getDataProvider() {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user