Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java961
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();
- }
-
-}
-

Back to the top