From 7ee7b84af12a25f10db526407864414029129afd Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Mon, 10 Jun 2019 22:54:28 +0300 Subject: [PATCH] [service-view] reselect items after update only if selected paths changed GitOrigin-RevId: 9a6696a3359236414f49a8c19654b04b094efeb5 --- .../execution/services/ServiceTreeView.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/services/ServiceTreeView.java b/platform/lang-impl/src/com/intellij/execution/services/ServiceTreeView.java index 73f9a9501bb0..1076f09c17d7 100644 --- a/platform/lang-impl/src/com/intellij/execution/services/ServiceTreeView.java +++ b/platform/lang-impl/src/com/intellij/execution/services/ServiceTreeView.java @@ -177,15 +177,20 @@ class ServiceTreeView extends ServiceView { @Override public void rootsChanged() { AppUIUtil.invokeOnEdt(() -> { - List selectedItems = getSelectedItems(); + TreePath[] currentPaths = myTree.getSelectionPaths(); + List selectedPaths = + currentPaths == null || currentPaths.length == 0 ? Collections.emptyList() : Arrays.asList(currentPaths); myTreeModel.rootsChanged(); - if (selectedItems.isEmpty()) return; + if (selectedPaths.isEmpty()) return; myTreeModel.getInvoker().invokeLater(() -> { List> pathPromises = - ContainerUtil.map(selectedItems, item -> myTreeModel.findPath(item.getValue(), item.getRootContributor().getClass())); + ContainerUtil.mapNotNull(selectedPaths, path -> { + ServiceViewItem item = ObjectUtils.tryCast(path.getLastPathComponent(), ServiceViewItem.class); + return item == null ? null : myTreeModel.findPath(item.getValue(), item.getRootContributor().getClass()); + }); Promises.collectResults(pathPromises, true).onProcessed(paths -> { - if (paths != null) { + if (paths != null && !paths.isEmpty() && !paths.equals(selectedPaths)) { TreeUtil.promiseSelect(myTree, paths.stream().map(PathSelectionVisitor::new)); } });