diff options
Diffstat (limited to 'org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java')
-rw-r--r-- | org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java | 961 |
1 files changed, 0 insertions, 961 deletions
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java deleted file mode 100644 index 3f6e6ae38..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java +++ /dev/null @@ -1,961 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2010 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Sascha Radike - bug 56642 - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.File; -import java.io.IOException; -import java.io.StringReader; -import java.net.URI; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.IncrementalProjectBuilder; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchDelegate; -import org.eclipse.debug.core.IStatusHandler; -import org.eclipse.debug.core.Launch; -import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; -import org.eclipse.debug.core.model.ILaunchConfigurationDelegate2; -import org.eclipse.debug.core.model.IPersistableSourceLocator; -import org.eclipse.debug.core.sourcelookup.IPersistableSourceLocator2; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -import com.ibm.icu.text.MessageFormat; - -/** - * Launch configuration handle. - * - * @see ILaunchConfiguration - */ -public class LaunchConfiguration extends PlatformObject implements ILaunchConfiguration { - - /** - * Launch configuration attribute that specifies the resources paths mapped to it. - * Not all launch configurations will have a mapped resource unless migrated. - * Value is a list of resource paths stored as portable strings, or <code>null</code> - * if none. - * - * @since 3.2 - */ - public static final String ATTR_MAPPED_RESOURCE_PATHS = DebugPlugin.getUniqueIdentifier() + ".MAPPED_RESOURCE_PATHS"; //$NON-NLS-1$ - - /** - * Launch configuration attribute that specifies the resources types mapped to it. - * Not all launch configurations will have a mapped resource unless migrated. - * Value is a list of resource type integers, or <code>null</code> if none. - * - * @since 3.2 - */ - public static final String ATTR_MAPPED_RESOURCE_TYPES = DebugPlugin.getUniqueIdentifier() + ".MAPPED_RESOURCE_TYPES"; //$NON-NLS-1$ - - /** - * The launch modes set on this configuration. - * - * @since 3.3 - */ - public static final String ATTR_LAUNCH_MODES = DebugPlugin.getUniqueIdentifier() + ".LAUNCH_MODES"; //$NON-NLS-1$ - - /** - * Launch configuration attribute storing a list - * of preferred launchers for associated mode sets. - * This attribute is a list of launchers stored by mode set - * and relating to the id of the preferred launcher, which happens to be an <code>ILaunchDelegate</code> - * - * @since 3.3 - */ - public static final String ATTR_PREFERRED_LAUNCHERS = DebugPlugin.getUniqueIdentifier() + ".preferred_launchers"; //$NON-NLS-1$ - - /** - * Status handler to prompt in the UI thread - * - * @since 3.3 - */ - protected static final IStatus promptStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 200, "", null); //$NON-NLS-1$//$NON-NLS-2$ - - /** - * Status handler to prompt the user to resolve the missing launch delegate issue - * @since 3.3 - */ - protected static final IStatus delegateNotAvailable = new Status(IStatus.INFO, "org.eclipse.debug.core", 226, "", null); //$NON-NLS-1$ //$NON-NLS-2$ - - /** - * Status handle to prompt the user to resolve duplicate launch delegates being detected - * - * @since 3.3 - */ - protected static final IStatus duplicateDelegates = new Status(IStatus.INFO, "org.eclipse.debug.core", 227, "", null); //$NON-NLS-1$//$NON-NLS-2$ - - /** - * This configuration's name - * @since 3.5 - */ - private String fName; - - /** - * The container this configuration is stored in or <code>null</code> if stored locally - * with workspace metadata. - * @since 3.5 - */ - private IContainer fContainer; - - /** - * Constructs a launch configuration with the given name. The configuration - * is stored in the given container or locally with workspace metadata if - * the specified container is <code>null</code>. - * - * @param name launch configuration name - * @param container parent container or <code>null</code> - * @since 3.5 - */ - protected LaunchConfiguration(String name, IContainer container) { - initialize(); - setName(name); - setContainer(container); - } - - /** - * Initialize any state variables - called first in the constructor. - * Subclasses must override as appropriate. - */ - protected void initialize() { - } - - /** - * Constructs a launch configuration on the given workspace file. - * - * @param file workspace .launch file - * @since 3.5 - */ - protected LaunchConfiguration(IFile file) { - this(getSimpleName(file.getName()), file.getParent()); - } - - /** - * Given a name that ends with .launch, return the simple name of the configuration. - * - * @param fileName - * @return simple name - * @since 3.5 - */ - protected static String getSimpleName(String fileName) { - if (fileName.endsWith(ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION)) { - return fileName.substring(0, fileName.length() - ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION.length() - 1); - } - return fileName; - } - - /** - * Constructs a launch configuration from the given - * memento. - * - * @param memento launch configuration memento - * @exception CoreException if the memento is invalid or - * an exception occurs reading the memento - */ - protected LaunchConfiguration(String memento) throws CoreException { - Exception ex = null; - try { - Element root = null; - DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - parser.setErrorHandler(new DefaultHandler()); - StringReader reader = new StringReader(memento); - InputSource source = new InputSource(reader); - root = parser.parse(source).getDocumentElement(); - - String localString = root.getAttribute(IConfigurationElementConstants.LOCAL); - String path = root.getAttribute(IConfigurationElementConstants.PATH); - - String message = null; - if (path == null || IInternalDebugCoreConstants.EMPTY_STRING.equals(path)) { - message = DebugCoreMessages.LaunchConfiguration_18; - } else if (localString == null || IInternalDebugCoreConstants.EMPTY_STRING.equals(localString)) { - message = DebugCoreMessages.LaunchConfiguration_19; - } - if (message != null) { - throw new CoreException(newStatus(message, DebugException.INTERNAL_ERROR, null)); - } - - - boolean local = (Boolean.valueOf(localString)).booleanValue(); - IPath iPath = new Path(path); - String name = getSimpleName(iPath.lastSegment()); - IContainer container = null; - if (!local) { - container = ResourcesPlugin.getWorkspace().getRoot().getFile(iPath).getParent(); - } - setName(name); - setContainer(container); - return; - } catch (ParserConfigurationException e) { - ex = e; - } catch (SAXException e) { - ex = e; - } catch (IOException e) { - ex = e; - } - IStatus s = newStatus(DebugCoreMessages.LaunchConfiguration_17, DebugException.INTERNAL_ERROR, ex); - throw new CoreException(s); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#contentsEqual(org.eclipse.debug.core.ILaunchConfiguration) - */ - public boolean contentsEqual(ILaunchConfiguration object) { - try { - if (object instanceof LaunchConfiguration) { - LaunchConfiguration otherConfig = (LaunchConfiguration) object; - return getName().equals(otherConfig.getName()) - && getType().equals(otherConfig.getType()) - && equalOrNull(getContainer(), otherConfig.getContainer()) - && getInfo().equals(otherConfig.getInfo()); - } - return false; - } catch (CoreException ce) { - return false; - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#copy(java.lang.String) - */ - public ILaunchConfigurationWorkingCopy copy(String name) throws CoreException { - ILaunchConfigurationWorkingCopy copy = new LaunchConfigurationWorkingCopy(this, name); - return copy; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#delete() - */ - public void delete() throws CoreException { - if (exists()) { - IFile file = getFile(); - if (file == null) { - IFileStore store = getFileStore(); - if (store != null) { - store.delete(EFS.NONE, null); - if ((store.fetchInfo().exists())) { - throw new DebugException( - new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.LaunchConfiguration_Failed_to_delete_launch_configuration__1, null) - ); - } - } - } else { - // Delete the resource using IFile API such that - // resource deltas are fired. - // First do validate edit to ensure the resource is local - if (file.isReadOnly()) { - IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] {file}, null); - if (!status.isOK()) { - throw new CoreException(status); - } - } - file.delete(true, null); - } - // update the launch manager cache synchronously - getLaunchManager().launchConfigurationDeleted(this); - } - } - - /** - * Returns whether this configuration is equal to the - * given configuration. Two configurations are equal if - * they are stored in the same location (and neither one - * is a working copy). - * - * @return whether this configuration is equal to the - * given configuration - * @see Object#equals(Object) - */ - public boolean equals(Object object) { - if (object instanceof ILaunchConfiguration) { - if (isWorkingCopy()) { - return this == object; - } - LaunchConfiguration config = (LaunchConfiguration) object; - if (!config.isWorkingCopy()) { - return getName().equals(config.getName()) && - equalOrNull(getContainer(), config.getContainer()); - } - } - return false; - } - - /** - * Returns whether the given objects are equal or both <code>null</code>. - * - * @param o1 - * @param o2 - * @return whether the given objects are equal or both <code>null</code> - * @since 3.5 - */ - protected boolean equalOrNull(Object o1, Object o2) { - if (o1 == null) { - return o2 == null; - } else if (o2 != null) { - return o1.equals(o2); - } - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#exists() - */ - public boolean exists() { - IFile file = getFile(); - if (file != null) { - return file.exists(); - } - try { - IFileStore store = getFileStore(); - if (store != null) { - return store.fetchInfo().exists(); - } - } catch (CoreException e) { - } - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttribute(java.lang.String, boolean) - */ - public boolean getAttribute(String attributeName, boolean defaultValue) throws CoreException { - return getInfo().getBooleanAttribute(attributeName, defaultValue); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttribute(java.lang.String, int) - */ - public int getAttribute(String attributeName, int defaultValue) throws CoreException { - return getInfo().getIntAttribute(attributeName, defaultValue); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttribute(java.lang.String, java.util.List) - */ - public List getAttribute(String attributeName, List defaultValue) throws CoreException { - return getInfo().getListAttribute(attributeName, defaultValue); - } - - /** - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttribute(java.lang.String, java.util.Set) - */ - public Set getAttribute(String attributeName, Set defaultValue) throws CoreException { - return getInfo().getSetAttribute(attributeName, defaultValue); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttribute(java.lang.String, java.util.Map) - */ - public Map getAttribute(String attributeName, Map defaultValue) throws CoreException { - return getInfo().getMapAttribute(attributeName, defaultValue); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttribute(java.lang.String, java.lang.String) - */ - public String getAttribute(String attributeName, String defaultValue) throws CoreException { - return getInfo().getStringAttribute(attributeName, defaultValue); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getAttributes() - */ - public Map getAttributes() throws CoreException { - LaunchConfigurationInfo info = getInfo(); - return info.getAttributes(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getCategory() - */ - public String getCategory() throws CoreException { - return getType().getCategory(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getFile() - */ - public IFile getFile() { - IContainer container = getContainer(); - if (container != null) { - return container.getFile(new Path(getFileName())); - } - return null; - } - - /** - * Returns the simple file name of this launch configuration. - * - * @return the simple file name of this launch configuration - for example - * "Abc.launch" - */ - protected String getFileName() { - StringBuffer buf = new StringBuffer(getName()); - buf.append('.'); - buf.append(ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION); - return buf.toString(); - } - - /** - * Returns the info object containing the attributes - * of this configuration - * - * @return info for this handle - * @exception CoreException if unable to retrieve the - * info object - */ - protected LaunchConfigurationInfo getInfo() throws CoreException { - return getLaunchManager().getInfo(this); - } - - /** - * Returns the launch manager - * - * @return launch manager - */ - protected LaunchManager getLaunchManager() { - return (LaunchManager)DebugPlugin.getDefault().getLaunchManager(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getLocation() - */ - public IPath getLocation() { - try { - IFileStore store = getFileStore(); - if (store != null) { - File localFile = store.toLocalFile(EFS.NONE, null); - if (localFile != null) { - return new Path(localFile.getAbsolutePath()); - } - } - } catch (CoreException e) { - } - return null; - } - - /** - * Returns the file store this configuration is persisted in or <code>null</code> if - * a file store cannot be derived. The file may or may not exist. If this configuration - * is in a project that is closed or does not exist, <code>null</code> is returned. - * - * @return file store this configuration is persisted in or <code>null</code> - * @throws CoreException - * @since 3.5 - */ - public IFileStore getFileStore() throws CoreException { - if (isLocal()) { - return EFS.getLocalFileSystem().fromLocalFile( - LaunchManager.LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH.append(getFileName()).toFile()); - } - URI uri = getFile().getLocationURI(); - if (uri != null) { - return EFS.getStore(uri); - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getResource() - */ - public IResource[] getMappedResources() throws CoreException { - List paths = getAttribute(ATTR_MAPPED_RESOURCE_PATHS, (List)null); - if (paths == null || paths.size() == 0) { - return null; - } - List types = getAttribute(ATTR_MAPPED_RESOURCE_TYPES, (List)null); - if (types == null || types.size() != paths.size()) { - throw new CoreException(newStatus(DebugCoreMessages.LaunchConfiguration_0, DebugPlugin.ERROR, null)); - } - ArrayList list = new ArrayList(); - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - for(int i = 0; i < paths.size(); i++) { - String pathStr = (String) paths.get(i); - String typeStr= (String) types.get(i); - int type = -1; - try { - type = Integer.decode(typeStr).intValue(); - } catch (NumberFormatException e) { - throw new CoreException(newStatus(DebugCoreMessages.LaunchConfiguration_0, DebugPlugin.ERROR, e)); - } - IPath path = Path.fromPortableString(pathStr); - IResource res = null; - switch (type) { - case IResource.FILE: - res = root.getFile(path); - break; - case IResource.PROJECT: - res = root.getProject(pathStr); - break; - case IResource.FOLDER: - res = root.getFolder(path); - break; - case IResource.ROOT: - res = root; - break; - default: - throw new CoreException(newStatus(DebugCoreMessages.LaunchConfiguration_0, DebugPlugin.ERROR, null)); - } - if(res != null) { - list.add(res); - } - } - if (list.isEmpty()) { - return null; - } - return (IResource[])list.toArray(new IResource[list.size()]); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getMemento() - */ - public String getMemento() throws CoreException { - IPath relativePath = null; - IFile file = getFile(); - boolean local = true; - if (file == null) { - relativePath = new Path(getName()); - } else { - local = false; - relativePath = file.getFullPath(); - } - Exception e= null; - try { - Document doc = LaunchManager.getDocument(); - Element node = doc.createElement(IConfigurationElementConstants.LAUNCH_CONFIGURATION); - doc.appendChild(node); - node.setAttribute(IConfigurationElementConstants.LOCAL, (Boolean.valueOf(local)).toString()); - node.setAttribute(IConfigurationElementConstants.PATH, relativePath.toString()); - return LaunchManager.serializeDocument(doc); - } catch (IOException ioe) { - e= ioe; - } catch (ParserConfigurationException pce) { - e= pce; - } catch (TransformerException te) { - e= te; - } - IStatus status = newStatus(DebugCoreMessages.LaunchConfiguration_16, DebugException.INTERNAL_ERROR, e); - throw new CoreException(status); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getName() - */ - public String getName() { - return fName; - } - - /** - * Returns the container this configuration is stored in, or <code>null</code> - * if this configuration is local. - * - * @return the container this configuration is stored in, or <code>null</code> - * if this configuration is local - * @since 3.5 - */ - protected IContainer getContainer() { - return fContainer; - } - - public Set getModes() throws CoreException { - Set options = getAttribute(ATTR_LAUNCH_MODES, (Set)null); - return (options != null ? new HashSet(options) : new HashSet(0)); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getType() - */ - public ILaunchConfigurationType getType() throws CoreException { - return getInfo().getType(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#getWorkingCopy() - */ - public ILaunchConfigurationWorkingCopy getWorkingCopy() throws CoreException { - return new LaunchConfigurationWorkingCopy(this); - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - IContainer container = getContainer(); - if (container == null) { - return getName().hashCode(); - } else { - return getName().hashCode() + container.hashCode(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#hasAttribute(java.lang.String) - */ - public boolean hasAttribute(String attributeName) throws CoreException { - return getInfo().hasAttribute(attributeName); - } - - /** - * Set the source locator to use with the launch, if specified - * by this configuration. - * - * @param launch the launch on which to set the source locator - */ - protected void initializeSourceLocator(ILaunch launch) throws CoreException { - if (launch.getSourceLocator() == null) { - String type = getAttribute(ATTR_SOURCE_LOCATOR_ID, (String)null); - if (type == null) { - type = getType().getSourceLocatorId(); - } - if (type != null) { - IPersistableSourceLocator locator = getLaunchManager().newSourceLocator(type); - String memento = getAttribute(ATTR_SOURCE_LOCATOR_MEMENTO, (String)null); - if (memento == null) { - locator.initializeDefaults(this); - } else { - if(locator instanceof IPersistableSourceLocator2) - ((IPersistableSourceLocator2)locator).initializeFromMemento(memento, this); - else - locator.initializeFromMemento(memento); - } - launch.setSourceLocator(locator); - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#isLocal() - */ - public boolean isLocal() { - return getContainer() == null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#isMigrationCandidate() - */ - public boolean isMigrationCandidate() throws CoreException { - return ((LaunchConfigurationType)getType()).isMigrationCandidate(this); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#isWorkingCopy() - */ - public boolean isWorkingCopy() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#launch(java.lang.String, org.eclipse.core.runtime.IProgressMonitor) - */ - public ILaunch launch(String mode, IProgressMonitor monitor) throws CoreException { - return launch(mode, monitor, false); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#launch(java.lang.String, org.eclipse.core.runtime.IProgressMonitor, boolean) - */ - public ILaunch launch(String mode, IProgressMonitor monitor, boolean build) throws CoreException { - return launch(mode, monitor, build, true); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#launch(java.lang.String, org.eclipse.core.runtime.IProgressMonitor, boolean, boolean) - */ - public ILaunch launch(String mode, IProgressMonitor monitor, boolean build, boolean register) throws CoreException { - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - /* Setup progress monitor - * - Prepare delegate (0) - * - Pre-launch check (1) - * - [Build before launch (7)] if build - * - [Incremental build before launch (3)] if build - * - Final launch validation (1) - * - Initialize source locator (1) - * - Launch delegate (10) */ - if (build) { - monitor.beginTask("", 23); //$NON-NLS-1$ - } - else { - monitor.beginTask("", 13); //$NON-NLS-1$ - } - monitor.subTask(DebugCoreMessages.LaunchConfiguration_9); - try { - // bug 28245 - force the delegate to load in case it is interested in launch notifications - Set modes = getModes(); - modes.add(mode); - ILaunchDelegate[] delegates = getType().getDelegates(modes); - ILaunchConfigurationDelegate delegate = null; - if (delegates.length == 1) { - delegate = delegates[0].getDelegate(); - } else if (delegates.length == 0) { - IStatusHandler handler = DebugPlugin.getDefault().getStatusHandler(promptStatus); - if (handler != null) { - handler.handleStatus(delegateNotAvailable, new Object[] {this, mode}); - } - IStatus status = new Status(IStatus.CANCEL, DebugPlugin.getUniqueIdentifier(), DebugPlugin.ERROR, DebugCoreMessages.LaunchConfiguration_11, null); - throw new CoreException(status); - } else { - ILaunchDelegate del = getPreferredDelegate(modes); - if(del == null) { - del = getType().getPreferredDelegate(modes); - } - if(del == null) { - IStatusHandler handler = DebugPlugin.getDefault().getStatusHandler(promptStatus); - IStatus status = null; - if (handler != null) { - status = (IStatus) handler.handleStatus(duplicateDelegates, new Object[] {this, mode}); - } - if(status != null && status.isOK()) { - del = getPreferredDelegate(modes); - if(del == null) { - del = getType().getPreferredDelegate(modes); - } - if(del != null) { - delegate = del.getDelegate(); - } - else { - status = new Status(IStatus.CANCEL, DebugPlugin.getUniqueIdentifier(), DebugPlugin.ERROR, DebugCoreMessages.LaunchConfiguration_13, null); - throw new CoreException(status); - } - } - else { - status = new Status(IStatus.CANCEL, DebugPlugin.getUniqueIdentifier(), DebugPlugin.ERROR, DebugCoreMessages.LaunchConfiguration_13, null); - throw new CoreException(status); - } - } - else { - delegate = del.getDelegate(); - } - } - - ILaunchConfigurationDelegate2 delegate2 = null; - if (delegate instanceof ILaunchConfigurationDelegate2) { - delegate2 = (ILaunchConfigurationDelegate2) delegate; - } - // allow the delegate to provide a launch implementation - ILaunch launch = null; - if (delegate2 != null) { - launch = delegate2.getLaunch(this, mode); - } - if (launch == null) { - launch = new Launch(this, mode, null); - } else { - // ensure the launch mode is valid - if (!mode.equals(launch.getLaunchMode())) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.ERROR, - MessageFormat.format(DebugCoreMessages.LaunchConfiguration_14, new String[]{mode, launch.getLaunchMode()}), null); - throw new CoreException(status); - } - } - launch.setAttribute(DebugPlugin.ATTR_LAUNCH_TIMESTAMP, Long.toString(System.currentTimeMillis())); - boolean captureOutput = getAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, true); - if(!captureOutput) { - launch.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, "false"); //$NON-NLS-1$ - } else { - launch.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, null); - } - launch.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, getLaunchManager().getEncoding(this)); - - // perform initial pre-launch sanity checks - monitor.subTask(DebugCoreMessages.LaunchConfiguration_8); - - if (delegate2 != null) { - if (!(delegate2.preLaunchCheck(this, mode, new SubProgressMonitor(monitor, 1)))) { - return launch; - } - } - else { - monitor.worked(1); /* No pre-launch-check */ - } - // perform pre-launch build - if (build) { - IProgressMonitor buildMonitor = new SubProgressMonitor(monitor, 10, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); - buildMonitor.beginTask(DebugCoreMessages.LaunchConfiguration_7, 10); - buildMonitor.subTask(DebugCoreMessages.LaunchConfiguration_6); - if (delegate2 != null) { - build = delegate2.buildForLaunch(this, mode, new SubProgressMonitor(buildMonitor, 7)); - } - if (build) { - buildMonitor.subTask(DebugCoreMessages.LaunchConfiguration_5); - ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, new SubProgressMonitor(buildMonitor, 3)); - } - else { - buildMonitor.worked(3); /* No incremental build required */ - } - } - // final validation - monitor.subTask(DebugCoreMessages.LaunchConfiguration_4); - if (delegate2 != null) { - if (!(delegate2.finalLaunchCheck(this, mode, new SubProgressMonitor(monitor, 1)))) { - return launch; - } - } - else { - monitor.worked(1); /* No validation */ - } - if (register) { - getLaunchManager().addLaunch(launch); - } - - try { - //initialize the source locator - monitor.subTask(DebugCoreMessages.LaunchConfiguration_3); - initializeSourceLocator(launch); - monitor.worked(1); - - /* Launch the delegate */ - monitor.subTask(DebugCoreMessages.LaunchConfiguration_2); - delegate.launch(this, mode, launch, new SubProgressMonitor(monitor, 10)); - } catch (CoreException e) { - // if there was an exception, and the launch is empty, remove it - if (!launch.hasChildren()) { - getLaunchManager().removeLaunch(launch); - } - throw e; - } catch (RuntimeException e) { - // if there was a runtime exception, and the launch is empty, remove it - if (!launch.hasChildren()) { - getLaunchManager().removeLaunch(launch); - } - throw e; - } - if (monitor.isCanceled()) { - getLaunchManager().removeLaunch(launch); - } - return launch; - } - finally { - monitor.done(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#migrate() - */ - public void migrate() throws CoreException { - ((LaunchConfigurationType)getType()).migrate(this); - } - - /** - * Creates and returns a new error status based on - * the given message, code, and exception. - * - * @param message error message - * @param code error code - * @param e exception or <code>null</code> - * @return status - */ - protected IStatus newStatus(String message, int code, Throwable e) { - return new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), code, message, e); - } - - /** - * Sets the new name for this configuration. - * - * @param name the new name for this configuration - * @since 3.5 - */ - protected void setName(String name) { - fName = name; - } - - /** - * Sets this configurations container or <code>null</code> if stored in the - * local metadata. - * - * @param container or <code>null</code> - * @since 3.5 - */ - protected void setContainer(IContainer container) { - fContainer = container; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#supportsMode(java.lang.String) - */ - public boolean supportsMode(String mode) throws CoreException { - return getType().supportsMode(mode); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfiguration#isReadOnly() - */ - public boolean isReadOnly() { - try { - IFileStore fileStore = getFileStore(); - if (fileStore != null) { - return fileStore.fetchInfo().getAttribute(EFS.ATTRIBUTE_READ_ONLY); - } - } catch (CoreException e) { - } - return true; - } - - /** - * @see org.eclipse.debug.core.ILaunchConfiguration#getPreferredDelegate(java.util.Set) - */ - public ILaunchDelegate getPreferredDelegate(Set modes) throws CoreException { - Map delegates = getAttribute(LaunchConfiguration.ATTR_PREFERRED_LAUNCHERS, (Map)null); - if(delegates != null) { - String id = (String) delegates.get(modes.toString()); - if(id != null) { - return getLaunchManager().getLaunchDelegate(id); - } - } - return null; - } - - /** - * @see java.lang.Object#toString() - */ - public String toString() { - return getName(); - } - -} - |