From 38b7de7484affea56a91bde16f0405a074998c96 Mon Sep 17 00:00:00 2001 From: Alexander Luyblinsky Date: Thu, 10 Jan 2019 14:18:52 +0100 Subject: [PATCH] OC-18215 Fold local PIDs if any attach host present in "Attach to Process" dialog --- .../impl/actions/AttachToProcessAction.java | 21 +++++----- .../LocalAttachHostPresentationGroup.kt | 40 +++++++++++++++++++ 2 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/LocalAttachHostPresentationGroup.kt diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AttachToProcessAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AttachToProcessAction.java index d0407dbb600d..3b56bd636af0 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AttachToProcessAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AttachToProcessAction.java @@ -74,7 +74,7 @@ public class AttachToProcessAction extends AnAction { @Override public void run(@NotNull ProgressIndicator indicator) { - List allItems = getTopLevelItems(indicator, project); + List allItems = ContainerUtil.immutableList(getTopLevelItems(indicator, project)); ApplicationManager.getApplication().invokeLater(() -> { AttachListStep step = new AttachListStep(allItems, XDebuggerBundle.message("xdebugger.attach.popup.title.default"), project); @@ -119,15 +119,18 @@ public class AttachToProcessAction extends AnAction { } @NotNull - protected List getTopLevelItems(@NotNull ProgressIndicator indicator, @NotNull Project project) { - List localAttachToProcessItems = collectAttachProcessItems( - project, LocalAttachHost.INSTANCE, indicator - ); - List remoteAttachToProcessItems = collectAttachHostsItems( - project, indicator - ); + protected List getTopLevelItems(@NotNull ProgressIndicator indicator, @NotNull Project project) { + List attachHostItems = collectAttachHostsItems(project, indicator); - return ContainerUtil.concat(remoteAttachToProcessItems, localAttachToProcessItems); + // If any of hosts available, fold local PIDs into "Local Host" subgroup + if (!attachHostItems.isEmpty()) { + AttachItem localHostGroupItem = new AttachHostItem( + LocalAttachHostPresentationGroup.INSTANCE, false, LocalAttachHost.INSTANCE, project, new UserDataHolderBase()); + attachHostItems.add(localHostGroupItem); + doUpdateFirstInGroup(attachHostItems); + return attachHostItems; + } + return collectAttachProcessItems(project, LocalAttachHost.INSTANCE, indicator); } private static void doUpdateFirstInGroup(@NotNull List items) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/LocalAttachHostPresentationGroup.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/LocalAttachHostPresentationGroup.kt new file mode 100644 index 000000000000..991f63170b15 --- /dev/null +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/LocalAttachHostPresentationGroup.kt @@ -0,0 +1,40 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.xdebugger.impl.actions + +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.UserDataHolder +import com.intellij.util.ui.EmptyIcon +import com.intellij.xdebugger.attach.XAttachHost +import com.intellij.xdebugger.attach.XAttachPresentationGroup +import javax.swing.Icon + +object LocalAttachHostPresentationGroup: XAttachPresentationGroup { + // Should be at the bottom of the list + override fun getOrder(): Int { + return Int.MAX_VALUE + } + + override fun getGroupName(): String { + return "" + } + + override fun getProcessIcon(project: Project, info: XAttachHost, dataHolder: UserDataHolder): Icon { + TODO("deprecated method should not be invoked") + } + + override fun getItemIcon(project: Project, info: XAttachHost, dataHolder: UserDataHolder): Icon { + return EmptyIcon.ICON_16 + } + + override fun getProcessDisplayText(project: Project, info: XAttachHost, dataHolder: UserDataHolder): String { + TODO("deprecated method should not be invoked") + } + + override fun getItemDisplayText(project: Project, info: XAttachHost, dataHolder: UserDataHolder): String { + return "Local Host" + } + + override fun compare(o1: XAttachHost?, o2: XAttachHost?): Int { + return compareValuesBy(o1, o2, Any?::hashCode) + } +} \ No newline at end of file