Bug 577581 - Launch configuration View: No Context Menu for container

Clicking on parent node in Launch configuration view did start all
launch groups

Change-Id: I7a3753dda86621a8f512590554bc332985d2f3f5
Signed-off-by: Joerg Kubitz <jkubitz-eclipse@gmx.de>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.debug/+/188461
Tested-by: Platform Bot <platform-bot@eclipse.org>
diff --git a/org.eclipse.debug.ui.launchview/META-INF/MANIFEST.MF b/org.eclipse.debug.ui.launchview/META-INF/MANIFEST.MF
index f68dd69..ebd63af 100644
--- a/org.eclipse.debug.ui.launchview/META-INF/MANIFEST.MF
+++ b/org.eclipse.debug.ui.launchview/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.ui.launchview;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui,
diff --git a/org.eclipse.debug.ui.launchview/pom.xml b/org.eclipse.debug.ui.launchview/pom.xml
index b1d8775..77a0242 100644
--- a/org.eclipse.debug.ui.launchview/pom.xml
+++ b/org.eclipse.debug.ui.launchview/pom.xml
@@ -24,6 +24,6 @@
   
   <groupId>org.eclipse.debug</groupId>
   <artifactId>org.eclipse.debug.ui.launchview</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
+  <version>1.0.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreProvider.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreProvider.java
index 84fef7d..4f341f9 100644
--- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreProvider.java
+++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/impl/DebugCoreProvider.java
@@ -131,7 +131,8 @@
 
 			@CanExecute
 			public boolean isEnabled() {
-				return selected.get().stream().allMatch(e -> e instanceof DebugCoreLaunchObject && findLaunchConfiguration(e.getType(), e.getId()) != null);
+				Set<ILaunchObject> elements = selected.get();
+				return !elements.isEmpty() && elements.stream().allMatch(e -> e instanceof DebugCoreLaunchObject && findLaunchConfiguration(e.getType(), e.getId()) != null);
 			}
 		});
 
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchAction.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchAction.java
index df876f7..df92b38 100644
--- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchAction.java
+++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchAction.java
@@ -64,7 +64,8 @@
 
 	@CanExecute
 	public boolean isEnabled() {
-		return view.get().stream().allMatch((m) -> {
+		Set<ILaunchObject> elements = view.get();
+		return !elements.isEmpty() && elements.stream().allMatch((m) -> {
 			try {
 				return m.getType().getDelegates(Collections.singleton(mode.getIdentifier())).length > 0;
 			} catch (CoreException e) {
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchViewImpl.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchViewImpl.java
index 3a76ffb..522bba6 100644
--- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchViewImpl.java
+++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/LaunchViewImpl.java
@@ -254,7 +254,7 @@
 		// expand selection if containers are selected
 		for (Object selected : structuredSelection.toList()) {
 			if (selected instanceof LaunchObjectContainerModel) {
-				elements.addAll(((LaunchObjectContainerModel) selected).getChildren());
+				// skip container nodes (Bug 577581)
 			} else if (selected instanceof LaunchObjectModel) {
 				elements.add((LaunchObjectModel) selected);
 			}
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/RelaunchAction.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/RelaunchAction.java
index 8268ae1..210397a 100644
--- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/RelaunchAction.java
+++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/RelaunchAction.java
@@ -13,8 +13,11 @@
  *******************************************************************************/
 package org.eclipse.debug.ui.launchview.internal.view;
 
+import java.util.Set;
+
 import org.eclipse.debug.ui.launchview.internal.LaunchViewBundleInfo;
 import org.eclipse.debug.ui.launchview.internal.LaunchViewMessages;
+import org.eclipse.debug.ui.launchview.services.ILaunchObject;
 import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.core.di.annotations.Execute;
 import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
@@ -42,7 +45,8 @@
 
 	@CanExecute
 	public boolean isEnabled() {
-		return view.get().stream().allMatch(m -> m.canTerminate());
+		Set<ILaunchObject> elements = view.get();
+		return !elements.isEmpty() && elements.stream().allMatch(m -> m.canTerminate());
 	}
 
 	@Execute
diff --git a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/TerminateAction.java b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/TerminateAction.java
index 50cb02f..5544e27 100644
--- a/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/TerminateAction.java
+++ b/org.eclipse.debug.ui.launchview/src/org/eclipse/debug/ui/launchview/internal/view/TerminateAction.java
@@ -13,8 +13,11 @@
  *******************************************************************************/

 package org.eclipse.debug.ui.launchview.internal.view;

 

+import java.util.Set;

+

 import org.eclipse.debug.ui.launchview.internal.LaunchViewBundleInfo;

 import org.eclipse.debug.ui.launchview.internal.LaunchViewMessages;

+import org.eclipse.debug.ui.launchview.services.ILaunchObject;

 import org.eclipse.e4.core.di.annotations.CanExecute;

 import org.eclipse.e4.core.di.annotations.Execute;

 import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;

@@ -42,7 +45,8 @@
 

 	@CanExecute

 	public boolean isEnabled() {

-		return view.get().stream().allMatch(m -> m.canTerminate());

+		Set<ILaunchObject> elements = view.get();

+		return !elements.isEmpty() && elements.stream().allMatch(m -> m.canTerminate());

 	}

 

 	@Execute