diff options
Diffstat (limited to 'launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java')
-rw-r--r-- | launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java | 332 |
1 files changed, 0 insertions, 332 deletions
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java deleted file mode 100644 index 30b272f9a30..00000000000 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java +++ /dev/null @@ -1,332 +0,0 @@ -package org.eclipse.cdt.launch.internal; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.IBinary; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.debug.core.CDebugCorePlugin; -import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.cdt.debug.core.ICDebugConfiguration; -import org.eclipse.cdt.debug.ui.CDebugUIPlugin; -import org.eclipse.cdt.launch.AbstractCLaunchDelegate; -import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; -import org.eclipse.cdt.ui.CElementLabelProvider; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.debug.ui.IDebugModelPresentation; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.ILaunchShortcut; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.dialogs.ElementListSelectionDialog; - -/** - */ -public class CApplicationLaunchShortcut implements ILaunchShortcut { - - /** - * @see org.eclipse.debug.ui.ILaunchShortcut#launch(IEditorPart, String) - */ - public void launch(IEditorPart editor, String mode) { - searchAndLaunch(new Object[] { editor.getEditorInput()}, mode); - } - - /** - * @see org.eclipse.debug.ui.ILaunchShortcut#launch(ISelection, String) - */ - public void launch(ISelection selection, String mode) { - if (selection instanceof IStructuredSelection) { - searchAndLaunch(((IStructuredSelection) selection).toArray(), mode); - } - } - - public void launch(IBinary bin, String mode) { - try { - ILaunchConfiguration config = findLaunchConfiguration(bin, mode); - if (config != null) { - DebugUITools.saveAndBuildBeforeLaunch(); - config.launch(mode, null); - } - } catch (CoreException e) { - LaunchUIPlugin.errorDialog("Launch failed", e.getStatus()); //$NON-NLS-1$ - } - } - - /** - * Locate a configuration to relaunch for the given type. If one cannot be found, create one. - * - * @return a re-useable config or <code>null</code> if none - */ - protected ILaunchConfiguration findLaunchConfiguration(IBinary bin, String mode) { - ILaunchConfiguration configuration = null; - ILaunchConfigurationType configType = getCLaunchConfigType(); - List candidateConfigs = Collections.EMPTY_LIST; - try { - ILaunchConfiguration[] configs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations(configType); - candidateConfigs = new ArrayList(configs.length); - for (int i = 0; i < configs.length; i++) { - ILaunchConfiguration config = configs[i]; - String programName = AbstractCLaunchDelegate.getProgramName(config); - String projectName = AbstractCLaunchDelegate.getProjectName(config); - String name = bin.getResource().getProjectRelativePath().toString(); - if (projectName != null && programName.equals(name)) { - if (projectName != null && projectName.equals(bin.getCProject().getProject().getName())) { - candidateConfigs.add(config); - } - } - } - } catch (CoreException e) { - CDebugUIPlugin.log(e); - } - - // If there are no existing configs associated with the IBinary, create one. - // If there is exactly one config associated with the IBinary, return it. - // Otherwise, if there is more than one config associated with the IBinary, prompt the - // user to choose one. - int candidateCount = candidateConfigs.size(); - if (candidateCount < 1) { - // FIXME: should probably have more filtering here base on - // the mode, arch, CPU. For now we only support native. - // Prompt the user if more then 1 debugger. - ICDebugConfiguration debugConfig = null; - ICDebugConfiguration[] debugConfigs = CDebugCorePlugin.getDefault().getDebugConfigurations(); - List debugList = new ArrayList(debugConfigs.length); - for (int i = 0; i < debugConfigs.length; i++) { - String platform = debugConfigs[i].getPlatform(); - if (platform == null || platform.equals("native")) { - debugList.add(debugConfigs[i]); - } - } - debugConfigs = (ICDebugConfiguration[]) debugList.toArray(new ICDebugConfiguration[0]); - if (debugConfigs.length == 1) { - debugConfig = debugConfigs[0]; - } else if (debugConfigs.length > 1) { - debugConfig = chooseDebugConfig(debugConfigs, mode); - } - if (debugConfig != null) { - configuration = createConfiguration(bin, debugConfig); - } - } else if (candidateCount == 1) { - configuration = (ILaunchConfiguration) candidateConfigs.get(0); - } else { - // Prompt the user to choose a config. A null result means the user - // cancelled the dialog, in which case this method returns null, - // since cancelling the dialog should also cancel launching anything. - configuration = chooseConfiguration(candidateConfigs, mode); - } - return configuration; - } - - /** - * Method createConfiguration. - * @param bin - * @return ILaunchConfiguration - */ - private ILaunchConfiguration createConfiguration(IBinary bin, ICDebugConfiguration debugConfig) { - ILaunchConfiguration config = null; - try { - String projectName = bin.getResource().getProjectRelativePath().toString(); - ILaunchConfigurationType configType = getCLaunchConfigType(); - ILaunchConfigurationWorkingCopy wc = - configType.newInstance(null, getLaunchManager().generateUniqueLaunchConfigurationNameFrom(bin.getElementName())); - wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, projectName); - wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, bin.getCProject().getElementName()); - wc.setAttribute(IDebugUIConstants.ATTR_TARGET_DEBUG_PERSPECTIVE, IDebugUIConstants.PERSPECTIVE_DEFAULT); - wc.setAttribute(IDebugUIConstants.ATTR_TARGET_RUN_PERSPECTIVE, IDebugUIConstants.PERSPECTIVE_DEFAULT); - wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, (String) null); - wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, true); - wc.setAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); - wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, debugConfig.getID()); - config = wc.doSave(); - } catch (CoreException ce) { - CDebugUIPlugin.log(ce); - } - return config; - } - - /** - * Method getCLaunchConfigType. - * @return ILaunchConfigurationType - */ - protected ILaunchConfigurationType getCLaunchConfigType() { - return getLaunchManager().getLaunchConfigurationType(ICDTLaunchConfigurationConstants.ID_LAUNCH_C_APP); - } - - protected ILaunchManager getLaunchManager() { - return DebugPlugin.getDefault().getLaunchManager(); - } - - /** - * Convenience method to get the window that owns this action's Shell. - */ - protected Shell getShell() { - return CDebugUIPlugin.getActiveWorkbenchShell(); - } - - /** - * Method chooseDebugConfig. - * @param debugConfigs - * @param mode - * @return ICDebugConfiguration - */ - private ICDebugConfiguration chooseDebugConfig(ICDebugConfiguration[] debugConfigs, String mode) { - ILabelProvider provider = new LabelProvider() { - /** - * The <code>LabelProvider</code> implementation of this - * <code>ILabelProvider</code> method returns the element's <code>toString</code> - * string. Subclasses may override. - */ - public String getText(Object element) { - if (element == null) { - return ""; - } else if (element instanceof ICDebugConfiguration) { - return ((ICDebugConfiguration) element).getName(); - } - return element.toString(); - } - }; - ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), provider); - dialog.setElements(debugConfigs); - dialog.setTitle("Launch Debug Configuration Selection"); //$NON-NLS-1$ - if (mode.equals(ILaunchManager.DEBUG_MODE)) { - dialog.setMessage("Choose a debug configuration to debug"); //$NON-NLS-1$ - } else { - dialog.setMessage("Choose a configuration to run"); //$NON-NLS-1$ - } - dialog.setMultipleSelection(false); - int result = dialog.open(); - provider.dispose(); - if (result == ElementListSelectionDialog.OK) { - return (ICDebugConfiguration) dialog.getFirstResult(); - } - return null; - } - - /** - * Show a selection dialog that allows the user to choose one of the specified - * launch configurations. Return the chosen config, or <code>null</code> if the - * user cancelled the dialog. - */ - protected ILaunchConfiguration chooseConfiguration(List configList, String mode) { - IDebugModelPresentation labelProvider = DebugUITools.newDebugModelPresentation(); - ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), labelProvider); - dialog.setElements(configList.toArray()); - dialog.setTitle("Launch Configuration Selection"); //$NON-NLS-1$ - if (mode.equals(ILaunchManager.DEBUG_MODE)) { - dialog.setMessage("Choose a launch configuration to debug"); //$NON-NLS-1$ - } else { - dialog.setMessage("Choose a launch configuration to run"); //$NON-NLS-1$ - } - dialog.setMultipleSelection(false); - int result = dialog.open(); - labelProvider.dispose(); - if (result == ElementListSelectionDialog.OK) { - return (ILaunchConfiguration) dialog.getFirstResult(); - } - return null; - } - - /** - * Prompts the user to select a binary - * - * @return the selected binary or <code>null</code> if none. - */ - protected IBinary chooseBinary(List binList, String mode) { - ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new CElementLabelProvider()); - dialog.setElements(binList.toArray()); - dialog.setTitle("C Local Application"); //$NON-NLS-1$ - if (mode.equals(ILaunchManager.DEBUG_MODE)) { - dialog.setMessage("Choose a local application to debug"); //$NON-NLS-1$ - } else { - dialog.setMessage("Choose a local application to run"); //$NON-NLS-1$ - } - dialog.setMultipleSelection(false); - if (dialog.open() == ElementListSelectionDialog.OK) { - return (IBinary) dialog.getFirstResult(); - } - return null; - } - - /** - * Method searchAndLaunch. - * @param objects - * @param mode - */ - private void searchAndLaunch(final Object[] elements, String mode) { - final List results = new ArrayList(); - if (elements != null && elements.length > 0) { - try { - ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell()); - IRunnableWithProgress runnable = new IRunnableWithProgress() { - public void run(IProgressMonitor pm) throws InterruptedException { - int nElements = elements.length; - pm.beginTask("Looking for executables", nElements); //$NON-NLS-1$ - try { - IProgressMonitor sub = new SubProgressMonitor(pm, 1); - for (int i = 0; i < nElements; i++) { - if (elements[i] instanceof IAdaptable) { - IResource r = (IResource) ((IAdaptable) elements[i]).getAdapter(IResource.class); - ICProject cproject = CoreModel.getDefault().create(r.getProject()); - if (cproject != null) { - IBinary[] bins = cproject.getBinaryContainer().getBinaries(); - - for (int j = 0; j < bins.length; j++) { - if (bins[j].isExecutable()) { - results.add(bins[j]); - } - } - } - } - if (pm.isCanceled()) { - throw new InterruptedException(); - } - sub.done(); - } - } finally { - pm.done(); - } - } - }; - dialog.run(true, true, runnable); - } catch (InterruptedException e) { - return; - } catch (InvocationTargetException e) { - MessageDialog.openError(getShell(), "C Local Application Launcher", e.getMessage()); - return; - } - if (results.size() == 0) { - MessageDialog.openError(getShell(), "C Local Application Launcher", "Launch failed no binaries"); - } else { - IBinary bin = chooseBinary(results, mode); - if (bin != null) { - launch(bin, mode); - } - } - } else { - MessageDialog.openError(getShell(), "C Local Application Launcher", "Launch failed no project selected"); - } - } - -} |