OC-18215 Fold local PIDs if any attach host present in "Attach to Process" dialog

This commit is contained in:
Alexander Luyblinsky
2019-01-10 14:18:52 +01:00
parent 3dd6185d16
commit 38b7de7484
2 changed files with 52 additions and 9 deletions
@@ -74,7 +74,7 @@ public class AttachToProcessAction extends AnAction {
@Override
public void run(@NotNull ProgressIndicator indicator) {
List<AttachItem> allItems = getTopLevelItems(indicator, project);
List<AttachItem> 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<AttachItem> getTopLevelItems(@NotNull ProgressIndicator indicator, @NotNull Project project) {
List<AttachToProcessItem> localAttachToProcessItems = collectAttachProcessItems(
project, LocalAttachHost.INSTANCE, indicator
);
List<AttachItem> remoteAttachToProcessItems = collectAttachHostsItems(
project, indicator
);
protected List<? extends AttachItem> getTopLevelItems(@NotNull ProgressIndicator indicator, @NotNull Project project) {
List<AttachItem> 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<? extends AttachItem> items) {
@@ -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<XAttachHost> {
// 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)
}
}