Bug 577258 - Launch Configuration View "Terminate all" did only terminate a single random process of each kind. Change-Id: I150713ae6f7d1a7203155a96d914aaf6d2696919 Signed-off-by: Joerg Kubitz <jkubitz-eclipse@gmx.de> Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.debug/+/187731 Reviewed-by: Markus Duft <markus.duft@ssi-schaefer.com> Reviewed-by: Mickael Istria <mistria@redhat.com>
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreLaunchObject.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreLaunchObject.java index de8ebd4..5c02a25 100644 --- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreLaunchObject.java +++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreLaunchObject.java
@@ -14,6 +14,8 @@ *******************************************************************************/ package org.eclipse.debug.ui.launchview.internal.impl; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import org.eclipse.core.runtime.CoreException; @@ -74,11 +76,7 @@ @Override public boolean canTerminate() { - ILaunch launch = findLaunch(config.getName()); - if (launch != null && launch.canTerminate()) { - return true; - } - return false; + return !findTerminateableLaunches(config.getName()).isEmpty(); } @Override @@ -87,8 +85,8 @@ // the processes takes longer than a few seconds. // Instead we start a job that tries to terminate processes. If the job // itself is stopped, we give up like Eclipse does. - ILaunch launch = findLaunch(config.getName()); - if (launch != null && launch.canTerminate()) { + Collection<ILaunch> launches = findTerminateableLaunches(config.getName()); + for (ILaunch launch: launches) { Job terminateJob = new Job(NLS.bind(LaunchViewMessages.DebugCoreLaunchObject_Terminate, config.getName())) { @Override @@ -135,6 +133,19 @@ return null; } + private static Collection<ILaunch> findTerminateableLaunches(String name) { + Collection<ILaunch> result = new ArrayList<>(); + for (ILaunch l : DebugPlugin.getDefault().getLaunchManager().getLaunches()) { + if (l.getLaunchConfiguration() == null || l.isTerminated()) { + continue; + } + if (l.getLaunchConfiguration().getName().equals(name) && l.canTerminate()) { + result.add(l); + } + } + return result; + } + @Override public void edit() { // This prefers "debug" mode as the Eclipse infrastructure
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/services/ILaunchObject.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/services/ILaunchObject.java index 7dc8153..9bfc2f9 100644 --- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/services/ILaunchObject.java +++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/services/ILaunchObject.java
@@ -68,7 +68,7 @@ public boolean canTerminate(); /** - * Terminates any running instance of this {@link ILaunchObject}. + * Terminates all running instances of this {@link ILaunchObject}. */ public void terminate();