From 8db2418c25ddfffe8f7eebf5f1fb512e7cb4daf1 Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Fri, 14 Jun 2019 18:00:26 +0300 Subject: [PATCH] [service-view] accept service object as a parent in added event GitOrigin-RevId: b1d4ca94f5c209b3153a3960b503806e110fef34 --- .../services/ServiceEventListener.java | 38 +++++++++++-------- .../dashboard/RunDashboardManagerImpl.java | 4 +- .../execution/services/ServiceModel.java | 12 ++++-- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/services/ServiceEventListener.java b/platform/lang-api/src/com/intellij/execution/services/ServiceEventListener.java index 15542abbe6cb..7889099d8be2 100644 --- a/platform/lang-api/src/com/intellij/execution/services/ServiceEventListener.java +++ b/platform/lang-api/src/com/intellij/execution/services/ServiceEventListener.java @@ -18,30 +18,19 @@ public interface ServiceEventListener { public final Object target; public final Class contributorClass; - public final ServiceViewContributor parent; + public final Object parent; public final int index; - public ServiceEvent(@NotNull Class rootContributorClass) { - this(EventType.RESET, rootContributorClass, rootContributorClass); - } - - public ServiceEvent(@NotNull EventType type, - @NotNull Object target, - @NotNull Class contributorClass) { + private ServiceEvent(@NotNull EventType type, + @NotNull Object target, + @NotNull Class contributorClass) { this(type, target, contributorClass, null, -1); } - public ServiceEvent(@NotNull Object target, - @NotNull Class contributorClass, - @Nullable ServiceViewContributor parent, - int index) { - this(EventType.SERVICE_ADDED, target, contributorClass, parent, index); - } - private ServiceEvent(@NotNull EventType type, @NotNull Object target, @NotNull Class contributorClass, - @Nullable ServiceViewContributor parent, + @Nullable Object parent, int index) { this.type = type; this.target = target; @@ -49,6 +38,23 @@ public interface ServiceEventListener { this.parent = parent; this.index = index; } + + public static ServiceEvent createEvent(@NotNull EventType type, + @NotNull Object target, + @NotNull Class rootContributorClass) { + return new ServiceEvent(type, target, rootContributorClass); + } + + public static ServiceEvent createResetEvent(@NotNull Class rootContributorClass) { + return new ServiceEvent(EventType.RESET, rootContributorClass, rootContributorClass); + } + + public static ServiceEvent createServiceAddedEvent(@NotNull Object target, + @NotNull Class contributorClass, + @Nullable Object parent, + int index) { + return new ServiceEvent(EventType.SERVICE_ADDED, target, contributorClass, parent, index); + } } enum EventType { diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java index c67c8cf6ad32..2ccd3684524f 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/RunDashboardManagerImpl.java @@ -384,9 +384,7 @@ public class RunDashboardManagerImpl implements RunDashboardManager, PersistentS @Override public void updateDashboard(boolean withStructure) { myProject.getMessageBus().syncPublisher(ServiceEventListener.TOPIC).handle( - new ServiceEventListener.ServiceEvent( - RunConfigurationsServiceViewContributor.class - )); + ServiceEventListener.ServiceEvent.createResetEvent(RunConfigurationsServiceViewContributor.class)); if (Registry.is("ide.service.view")) return; diff --git a/platform/lang-impl/src/com/intellij/execution/services/ServiceModel.java b/platform/lang-impl/src/com/intellij/execution/services/ServiceModel.java index d2cc7e9f3701..db9882625334 100644 --- a/platform/lang-impl/src/com/intellij/execution/services/ServiceModel.java +++ b/platform/lang-impl/src/com/intellij/execution/services/ServiceModel.java @@ -196,9 +196,10 @@ class ServiceModel implements Disposable, InvokerSupplier { if (e.parent != null) { ServiceViewItem parent = findItem(e.parent, e.contributorClass); - if (parent == null) return; + ServiceViewContributor parentContributor = parent instanceof ServiceNode ? ((ServiceNode)parent).getProvidingContributor() : null; + if (parentContributor == null) return; - addService(e.target, parent.getChildren(), myProject, parent, (ServiceViewContributor)e.parent, e.index); + addService(e.target, parent.getChildren(), myProject, parent, parentContributor, e.index); return; } @@ -296,7 +297,7 @@ class ServiceModel implements Disposable, InvokerSupplier { parent.getChildren().remove(item); } - addService(e.target, parent.getChildren(), myProject, parent, (ServiceViewContributor)parent.getContributor(), index); + addService(e.target, parent.getChildren(), myProject, parent, (ServiceViewContributor)item.getContributor(), index); if (group != null && group.getChildren().isEmpty()) { parent.getChildren().remove(group); } @@ -543,6 +544,11 @@ class ServiceModel implements Disposable, InvokerSupplier { protected List doGetChildren() { return myProvidingContributor == null ? Collections.emptyList() : getContributorChildren(myProject, this, myProvidingContributor); } + + @Nullable + private ServiceViewContributor getProvidingContributor() { + return myProvidingContributor; + } } static class ServiceGroupNode extends ServiceViewItem {