diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/MultiLaunchConfigurationDelegate.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/MultiLaunchConfigurationDelegate.java index 87a7522d15c..e57cce938d0 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/MultiLaunchConfigurationDelegate.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/MultiLaunchConfigurationDelegate.java @@ -44,6 +44,7 @@ import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.activities.WorkbenchActivityHelper; /** * Group Launch delegate. Launches each configuration in the user selected mode @@ -571,4 +572,13 @@ public class MultiLaunchConfigurationDelegate extends LaunchConfigurationDelegat public static String getProp(int index, String string) { return MultiLaunchConfigurationDelegate.MULTI_LAUNCH_CONSTANTS_PREFIX + "." + index + "." + string; //$NON-NLS-1$ //$NON-NLS-2$ } + + /** + * Test if a launch configuration is a valid reference. + * @param config configuration reference + * @return true if it is a valid reference, false if launch configuration should be filtered + */ + public static boolean isValidLaunchReference(ILaunchConfiguration config) { + return DebugUIPlugin.doLaunchConfigurationFiltering( config) && !WorkbenchActivityHelper.filterItem(config); + } } diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties index 1b1e7cb8177..c9b1b62b423 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties @@ -194,5 +194,8 @@ MultiLaunchConfigurationTabGroup.10=Launches MultiLaunchConfigurationTabGroup.11=seconds MultiLaunchConfigurationTabGroup.12=Action MultiLaunchConfigurationTabGroup.13=Delay {0} seconds +MultiLaunchConfigurationTabGroup.14=Launch {0} does not exist. +MultiLaunchConfigurationTabGroup.15=Launch {0} is filtered. +MultiLaunchConfigurationTabGroup.16=Must have at least one valid enabled launch. ProjectRenameChange.name=Update launch configuration "{0}" ProjectRenameChange.saveFailed=Failed to save updated launch configuration "{0}" diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationSelectionDialog.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationSelectionDialog.java index 8934df80acf..0d82bac1287 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationSelectionDialog.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationSelectionDialog.java @@ -97,6 +97,8 @@ public class MultiLaunchConfigurationSelectionDialog extends TitleAreaDialog imp } catch (CoreException e) { return false; } + } else if (element instanceof ILaunchConfiguration) { + return MultiLaunchConfigurationDelegate.isValidLaunchReference((ILaunchConfiguration) element); } return true; } diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationTabGroup.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationTabGroup.java index 73377c55743..9538bae8ac1 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationTabGroup.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/MultiLaunchConfigurationTabGroup.java @@ -11,6 +11,7 @@ *******************************************************************************/ package org.eclipse.cdt.launch.internal.ui; +import java.text.MessageFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -94,7 +95,7 @@ public class MultiLaunchConfigurationTabGroup extends AbstractLaunchConfiguratio return null; if (columnIndex == 0) { MultiLaunchConfigurationDelegate.LaunchElement el = (MultiLaunchConfigurationDelegate.LaunchElement) element; - if (el.data == null) { + if (el.data == null || !MultiLaunchConfigurationDelegate.isValidLaunchReference(el.data)) { Image errorImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK); return errorImage; } @@ -314,7 +315,9 @@ public class MultiLaunchConfigurationTabGroup extends AbstractLaunchConfiguratio MultiLaunchConfigurationSelectionDialog dialog = MultiLaunchConfigurationSelectionDialog.createDialog( treeViewer.getControl().getShell(), el.mode, true); - dialog.setInitialSelection(el); + if (MultiLaunchConfigurationDelegate.isValidLaunchReference(el.data)) { + dialog.setInitialSelection(el); + } if (dialog.open() == Dialog.OK) { ILaunchConfiguration[] confs = dialog.getSelectedLaunchConfigurations(); if (confs.length < 0) @@ -457,6 +460,39 @@ public class MultiLaunchConfigurationTabGroup extends AbstractLaunchConfiguratio public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { // defaults is empty list } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration) + */ + @Override + public boolean isValid(ILaunchConfiguration launchConfig) { + setMessage(null); + setErrorMessage(null); + int validLaunches = 0; + // test if each launch is valid + for (LaunchElement element : input) { + if (element.enabled) { + if ( element.data == null) { + // error referencing invalid launch + setErrorMessage(MessageFormat.format(LaunchMessages.getString("MultiLaunchConfigurationTabGroup.14"), //$NON-NLS-1$ + element.name)); + return false; + } else if (!MultiLaunchConfigurationDelegate.isValidLaunchReference(element.data)) { + // error referencing invalid launch + setErrorMessage(MessageFormat.format(LaunchMessages.getString("MultiLaunchConfigurationTabGroup.15"), //$NON-NLS-1$ + element.name)); + return false; + } + validLaunches++; + } + } + if (validLaunches < 1) { + // must have at least one valid and enabled launch + setErrorMessage(LaunchMessages.getString("MultiLaunchConfigurationTabGroup.16")); //$NON-NLS-1$ + return false; + } + return true; + } } public MultiLaunchConfigurationTabGroup() {