diff options
Diffstat (limited to 'org.eclipse.debug.core/core/org/eclipse/debug')
138 files changed, 0 insertions, 21580 deletions
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugEvent.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugEvent.java deleted file mode 100644 index 42c74b39b..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugEvent.java +++ /dev/null @@ -1,454 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import java.util.EventObject; - -import org.eclipse.debug.internal.core.DebugCoreMessages; - -/** - * A debug event describes an event in a program being debugged or - * in a running process. Debug models and process implementations - * are required to generate debug events as specified by this class. - * <p> - * The following list defines the events generated for each debug - * model element. - * The <code>getSource()</code> method of a debug event - * returns the element associated with the event. - * Creation events are guaranteed to occur in a top - * down order - that is, parents are created before children. - * Termination events are guaranteed to occur in a bottom up order - - * that is, children before parents. However, termination events are not guaranteed - * for all elements that are created. That is, terminate events can be coalesced - a - * terminate event for a parent signals that all children have been terminated. - * </p> - * <p> - * A debug model may define model specific events by specifying a debug event - * kind of <code>MODEL_SPECIFIC</code>. A model specific event is identified by the - * event source (i.e. by the debug model that generated the event). The detail of - * a model specific event is client defined. Note that model specific events are - * not understood by the debug platform, and are thus ignored. - * </p> - * <p> - * The generic <code>CHANGE</code> event can be fired at any time by any element. - * Generally, a client of a debug model, such as as a UI, can get sufficient - * information to update by listening/responding to the other event kinds. However, - * if a debug model needs to inform clients of a change that is not specified - * by create/terminate/suspend/resume, the <code>CHANGE</code> event may be used. - * For example, generally, the only way a thread or any of its children can change - * state between a suspend and resume operation, is if the thread or owning debug - * target is terminated. However, if a debug model supports some other operation - * that would allow a debug element to change state while suspended, the debug model - * would fire a change event for that element. The valid detail codes for a - * change event are:<ul> - * <li><code>STATE</code> - indicates the state of an element has changed, but its - * children are not affected. A client would use a state change event to update - * a label of the affected element, but would not update any children.</li> - * <li><code>CONTENT</code> - indicates that a debug element's value or contents have - * changed in some way. For example, when the value of a variable is changed - * explicitly, the variable should fire a content change event.</li> - * </ul> - * </p> - * <ul> - * <li><code>IProcess</code> - * <ul> - * <li><code>CREATE</code> - a process has been created and is executing.</li> - * <li><code>TERMINATE</code> - a process has terminated.</li> - * </ul> - * <li><code>IDebugTarget</code> - * <ul> - * <li><code>CREATE</code> - a debug target has been created and is ready - * to begin a debug session.</li> - * <li><code>TERMINATE</code> - a debug target has terminated and the debug - * session has ended.</li> - * <li><code>SUSPEND</code> - a debug target has suspended. Event detail provides - * the reason for the suspension:<ul> - * <li><code>STEP_END</code> - a request to step has completed</li> - * <li><code>BREAKPOINT</code> - a breakpoint has been hit</li> - * <li><code>CLIENT_REQUEST</code> - a client request has caused the target to suspend - * (i.e. an explicit call to <code>suspend()</code>)</li> - * <li><code>UNSPECIFIED</code> - the reason for the suspend is not specified</li> - * </ul> - * </li> - * <li><code>RESUME</code> - a debug target has resumed. Event detail provides - * the reason for the resume:<ul> - * <li><code>STEP_INTO</code> - a target is being resumed because of a request to step into</li> - * <li><code>STEP_OVER</code> - a target is being resumed because of a request to step over</li> - * <li><code>STEP_RETURN</code> - a target is being resumed because of a request to step return</li> - * <li><code>CLIENT_REQUEST</code> - a client request has caused the target to be resumed - * (i.e. an explicit call to <code>resume()</code>)</li> - * <li><code>UNSPECIFIED</code> - The reason for the resume is not specified</li> - * </ul> - * </li> - * </ul> - * </li> - * <li><code>IThread</code> - * <ul> - * <li><code>CREATE</code> - a thread has been created in a debug target.</li> - * <li><code>TERMINATE</code> - a thread has terminated.</li> - * <li><code>SUSPEND</code> - a thread has suspended execution. Event detail provides - * the reason for the suspension:<ul> - * <li><code>STEP_END</code> - a request to step has completed</li> - * <li><code>BREAKPOINT</code> - a breakpoint has been hit</li> - * <li><code>CLIENT_REQUEST</code> - a client request has caused the thread to suspend - * (i.e. an explicit call to <code>suspend()</code>)</li> - * <li><code>EVALUATION</code> - an expression evaluation has ended that may - * have had side effects in the debug target.</li> - * <li><code>EVALUATION_IMPLICIT</code> - an expression evaluation has ended that - * had no side effects in the debug target.</li> - * <li><code>UNSPECIFIED</code> - the reason for the suspend is not specified</li> - * </ul> - * </li> - * <li><code>RESUME</code> - a thread has resumed execution. Event detail provides - * the reason for the resume:<ul> - * <li><code>STEP_INTO</code> - a thread is being resumed because of a request to step into</li> - * <li><code>STEP_OVER</code> - a thread is being resumed because of a request to step over</li> - * <li><code>STEP_RETURN</code> - a thread is being resumed because of a request to step return</li> - * <li><code>CLIENT_REQUEST</code> - a client request has caused the thread to be resumed - * (i.e. an explicit call to <code>resume()</code>)</li> - * <li><code>EVALUATION</code> - an expression evaluation has started that may - * have side effects in the debug target.</li> - * <li><code>EVALUATION_IMPLICIT</code> - an expression evaluation has started that - * will have no side effects in the debug target.</li> - * <li><code>UNSPECIFIED</code> - The reason for the resume is not specified</li> - * </ul> - * </li> - * </ul> - * </li> - * <li><code>IStackFrame</code> - no events are specified for stack frames. - * When a thread is suspended, it has stack frames. When a thread resumes, - * stack frames are unavailable. - * </li> - * <li><code>IVariable</code> - no events are specified for variables. - * When a thread is suspended, stack frames have variables. When a thread resumes, - * variables are unavailable. - * </li> - * <li><code>IValue</code> - no events are specified for values. - * </li> - * </ul> - * <p> - * Clients may instantiate this class. Clients are not intended to subclass this class. - * </p> - */ -public final class DebugEvent extends EventObject { - - /** - * Resume event kind. - */ - public static final int RESUME= 0x0001; - - /** - * Suspend event kind. - */ - public static final int SUSPEND= 0x0002; - - /** - * Create event kind. - */ - public static final int CREATE= 0x0004; - - /** - * Terminate event kind. - */ - public static final int TERMINATE= 0x0008; - - /** - * Change event kind. - */ - public static final int CHANGE= 0x0010; - - /** - * Model specific event kind. The detail codes - * for a model specific event are client defined. - * - * @since 2.1.2 - */ - public static final int MODEL_SPECIFIC= 0x0020; - - /** - * Step start detail. Indicates a thread was resumed by a step - * into action. - * @since 2.0 - */ - public static final int STEP_INTO= 0x0001; - - /** - * Step start detail. Indicates a thread was resumed by a step - * over action. - * @since 2.0 - */ - public static final int STEP_OVER= 0x0002; - - /** - * Step start detail. Indicates a thread was resumed by a step - * return action. - * @since 2.0 - */ - public static final int STEP_RETURN= 0x0004; - - /** - * Step end detail. Indicates a thread was suspended due - * to the completion of a step action. - */ - public static final int STEP_END= 0x0008; - - /** - * Breakpoint detail. Indicates a thread was suspended by - * a breakpoint. - */ - public static final int BREAKPOINT= 0x0010; - - /** - * Client request detail. Indicates a thread was suspended due - * to a client request. - */ - public static final int CLIENT_REQUEST= 0x0020; - - /** - * Evaluation detail. Indicates that a thread was resumed or - * suspended to perform an expression evaluation. - * - * @since 2.0 - */ - public static final int EVALUATION = 0x0040; - - /** - * Evaluation detail. Indicates that a thread was resumed or - * suspended to perform an implicit expression evaluation. - * An implicit evaluation is an evaluation that is performed - * as an indirect result of a user action. - * Clients may use this detail event to decide whether or not - * to alert the user that an evaluation is taking place.. - * - * @since 2.0 - */ - public static final int EVALUATION_IMPLICIT = 0x0080; - - /** - * State change detail. Indicates the state of a single - * debug element has changed. Only valid for <code>CHANGE</code> - * events. - * - * @since 2.0 - */ - public static final int STATE = 0x0100; - - /** - * Content change detail. Indicates the content of a debug element - * (and potentially its children) has changed. Only valid for - * <code>CHANGE</code> events. - * - * @since 2.0 - */ - public static final int CONTENT = 0x0200; - - /** - * Constant indicating that the kind or detail of a debug - * event is unspecified. - */ - public static final int UNSPECIFIED = 0; - - /** - * The kind of event - one of the kind constants defined by - * this class. - */ - private int fKind= UNSPECIFIED; - - /** - * The detail of the event - one of the detail constants defined by - * this class. - */ - private int fDetail= UNSPECIFIED; - - /** - * Client defined data field. - * - * @since 2.1.2 - */ - private Object fData = null; - - /** - * Constructs a new debug event of the given kind with a detail code of - * <code>UNSPECIFIED</code>. - * - * @param eventSource the object associated with the event - * @param kind the kind of debug event (one of the - * kind constants defined by this class) - */ - public DebugEvent(Object eventSource, int kind) { - this(eventSource, kind, UNSPECIFIED); - } - - /** - * Constructs a new debug event of the given kind with the given detail. - * - * @param eventSource the object associated with the event - * @param kind the kind of debug event (one of the - * kind constants defined by this class) - * @param detail extra information about the event (one of the - * detail constants defined by this class or a client defined detail if this is a model specific event) - */ - public DebugEvent(Object eventSource, int kind, int detail) { - super(eventSource); - if ((kind & (RESUME | SUSPEND | CREATE | TERMINATE | CHANGE | MODEL_SPECIFIC)) == 0) - throw new IllegalArgumentException(DebugCoreMessages.getString("DebugEvent.illegal_kind")); //$NON-NLS-1$ - if (kind != MODEL_SPECIFIC && detail != UNSPECIFIED && (detail & (STEP_END | STEP_INTO | STEP_OVER | STEP_RETURN | BREAKPOINT | CLIENT_REQUEST |EVALUATION | EVALUATION_IMPLICIT | STATE | CONTENT)) == 0) - throw new IllegalArgumentException(DebugCoreMessages.getString("DebugEvent.illegal_detail")); //$NON-NLS-1$ - fKind= kind; - fDetail= detail; - } - - /** - * Returns a constant describing extra detail about the event - either one - * of the detail constants defined by this class, possibly - * <code>UNSPECIFIED</code>, or a client defined detail if this is a model specific event. - * - * @return the detail code - */ - public int getDetail() { - return fDetail; - } - - /** - * Returns this event's kind - one of the kind constants defined by this class. - * - * @return the kind code - */ - public int getKind() { - return fKind; - } - - /** - * Returns whether this event's detail indicates the - * beginning of a step event. This event's detail is one - * of <code>STEP_INTO</code>, <code>STEP_OVER</code>, or - * <code>STEP_RETURN</code>. - * - * @return whether this event's detail indicates the beginning - * of a step event. - * @since 2.0 - */ - public boolean isStepStart() { - return (getDetail() & (STEP_INTO | STEP_OVER | STEP_RETURN)) > 0; - } - - /** - * Returns whether this event's detail indicates an - * evaluation. This event's detail is one - * of <code>EVALUATION</code>, or <code>EVALUATION_IMPLICIT</code>. - * - * @return whether this event's detail indicates an evaluation. - * @since 2.0 - */ - public boolean isEvaluation() { - return (getDetail() & (EVALUATION | EVALUATION_IMPLICIT)) > 0; - } - - /** - * Sets this event's application defined data. - * - * @param data application defined data - * @since 2.1.2 - */ - public void setData(Object data) { - fData = data; - } - - /** - * Returns this event's application defined data, or <code>null</code> if none - * - * @return application defined data, or <code>null</code> if none - * @since 2.1.2 - */ - public Object getData() { - return fData; - } - - /** - * @see java.lang.Object#toString() - */ - public String toString() { - StringBuffer buf = new StringBuffer("DebugEvent["); //$NON-NLS-1$ - if (getSource() != null) { - buf.append(getSource().toString()); - } else { - buf.append("null"); //$NON-NLS-1$ - } - buf.append(", "); //$NON-NLS-1$ - switch (getKind()) { - case CREATE: - buf.append("CREATE"); //$NON-NLS-1$ - break; - case TERMINATE: - buf.append("TERMINATE"); //$NON-NLS-1$ - break; - case RESUME: - buf.append("RESUME"); //$NON-NLS-1$ - break; - case SUSPEND: - buf.append("SUSPEND"); //$NON-NLS-1$ - break; - case CHANGE: - buf.append("CHANGE"); //$NON-NLS-1$ - break; - case UNSPECIFIED: - buf.append("UNSPECIFIED"); //$NON-NLS-1$ - break; - case MODEL_SPECIFIC: - buf.append("MODEL_SPECIFIC"); //$NON-NLS-1$ - break; - } - buf.append(", "); //$NON-NLS-1$ - switch (getDetail()) { - case BREAKPOINT: - buf.append("BREAKPOINT"); //$NON-NLS-1$ - break; - case CLIENT_REQUEST: - buf.append("CLIENT_REQUEST"); //$NON-NLS-1$ - break; - case STEP_END: - buf.append("STEP_END"); //$NON-NLS-1$ - break; - case STEP_INTO: - buf.append("STEP_INTO"); //$NON-NLS-1$ - break; - case STEP_OVER: - buf.append("STEP_OVER"); //$NON-NLS-1$ - break; - case STEP_RETURN: - buf.append("STEP_RETURN"); //$NON-NLS-1$ - break; - case EVALUATION: - buf.append("EVALUATION"); //$NON-NLS-1$ - break; - case EVALUATION_IMPLICIT: - buf.append("EVALUATION_IMPLICIT"); //$NON-NLS-1$ - break; - case STATE: - buf.append("STATE"); //$NON-NLS-1$ - break; - case CONTENT: - buf.append("CONTENT"); //$NON-NLS-1$ - break; - case UNSPECIFIED: - buf.append("UNSPECIFIED"); //$NON-NLS-1$ - break; - default: - // model specific - buf.append(getDetail()); - break; - } - buf.append("]"); //$NON-NLS-1$ - return buf.toString(); - } -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugException.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugException.java deleted file mode 100644 index 4c6b74bda..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugException.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; - - -/** - * A checked exception representing a failure. - * <p> - * Defines status codes relevant to the debug plug-in. When a - * debug exception is thrown, it contains a status object describing - * the cause of the exception. The status objects originating from the - * debug plug-in use the codes defined in this class. - * </p> - * <p> - * Clients may instantiate this class. Clients are not intended to subclass this class. - * </p> - * @see IStatus - */ -public class DebugException extends CoreException { - /** - * Indicates a request made of a debug element has failed - * on the target side. - */ - public static final int TARGET_REQUEST_FAILED = 5010; - - /** - * Indicates a request is not supported by the capabilities of a debug element. - * For example, a request was made to terminate an element that does not - * support termination. - */ - public static final int NOT_SUPPORTED = 5011; - - /** - * Indicates that a request made of manager has failed, or a request made of a - * debug element has failed on the client side (that is, before the request was - * sent to the debug target). - */ - public static final int REQUEST_FAILED = 5012; - - /** - * Indicates an internal error. This is an unexpected state. - */ - public static final int INTERNAL_ERROR = 5013; - - /** - * Indicates an improperly configured breakpoint. Breakpoints have a minimal - * set of required attributes as defined by the breakpoint manager. - * - * @see IBreakpointManager - */ - public static final int CONFIGURATION_INVALID = 5014; - - /** - * Indicates a launch configuration could not be restored because its - * launch configuration type definition is missing. - * - * @since 3.0 - */ - public static final int MISSING_LAUNCH_CONFIGURATION_TYPE = 5020; - - /** - * Constructs a new debug exception with the given status object. - * - * @param status the status object describing this exception - * @see IStatus - */ - public DebugException(IStatus status) { - super(status); - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java deleted file mode 100644 index 9bf9d4eb9..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java +++ /dev/null @@ -1,1234 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.FactoryConfigurationError; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Plugin; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.core.model.IValue; -import org.eclipse.debug.core.model.RuntimeProcess; -import org.eclipse.debug.internal.core.BreakpointManager; -import org.eclipse.debug.internal.core.DebugCoreMessages; -import org.eclipse.debug.internal.core.ExpressionManager; -import org.eclipse.debug.internal.core.LaunchManager; -import org.eclipse.debug.internal.core.ListenerList; -import org.eclipse.debug.internal.core.LogicalStructureManager; -import org.eclipse.debug.internal.core.MemoryBlockManager; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupUtils; -import org.eclipse.osgi.service.environment.Constants; -import org.osgi.framework.BundleContext; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.SAXException; - -/** - * There is one instance of the debug plug-in available from - * <code>DebugPlugin.getDefault()</code>. The debug plug-in provides: - * <ul> - * <li>access to the breakpoint manager</li> - * <li>access to the launch manager</li> - * <li>access to the expression manager</li> - * <li>access to the registered launcher extensions</li> - * <li>access to the memory block manager</li> - * <li>debug event notification</li> - * <li>status handlers</li> - * </ul> - * <p> - * Clients may not instantiate or subclass this class. - * </p> - */ -public class DebugPlugin extends Plugin { - - /** - * Unique identifier constant (value <code>"org.eclipse.debug.core"</code>) - * for the Debug Core plug-in. - */ - private static final String PI_DEBUG_CORE = "org.eclipse.debug.core"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"launchConfigurationTypes"</code>) - * for the launch configuration types extension point. - * - * @since 2.0 - */ - public static final String EXTENSION_POINT_LAUNCH_CONFIGURATION_TYPES= "launchConfigurationTypes"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"launchConfigurationComparators"</code>) - * for the launch configuration comparators extension point. - * - * @since 2.0 - */ - public static final String EXTENSION_POINT_LAUNCH_CONFIGURATION_COMPARATORS= "launchConfigurationComparators"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"breakpoints"</code>) for the - * breakpoints extension point. - * - * @since 2.0 - */ - public static final String EXTENSION_POINT_BREAKPOINTS= "breakpoints"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"statusHandlers"</code>) for the - * status handlers extension point. - * - * @since 2.0 - */ - public static final String EXTENSION_POINT_STATUS_HANDLERS= "statusHandlers"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"sourceLocators"</code>) for the - * source locators extension point. - * - * @since 2.0 - */ - public static final String EXTENSION_POINT_SOURCE_LOCATORS= "sourceLocators"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"launchModes"</code>) for the - * source modes extension point. - * - * @since 3.0 - */ - public static final String EXTENSION_POINT_LAUNCH_MODES= "launchModes"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"launchDelegates"</code>) for the - * launch delegates extension point. - * - * @since 3.0 - */ - public static final String EXTENSION_POINT_LAUNCH_DELEGATES= "launchDelegates"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"processFactories"</code>) for the - * process factories extension point. - * - * @since 3.0 - */ - public static final String EXTENSION_POINT_PROCESS_FACTORIES = "processFactories"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"logicalStructureTypes"</code>) for the - * logical structure types extension point. - * - * @since 3.0 - */ - public static final String EXTENSION_POINT_LOGICAL_STRUCTURE_TYPES = "logicalStructureTypes"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"sourceContainerTypes"</code>) for the - * source container types extension point. - * - * @since 3.0 - */ - public static final String EXTENSION_POINT_SOURCE_CONTAINER_TYPES = "sourceContainerTypes"; //$NON-NLS-1$ - - /** - * Simple identifier constant (value <code>"sourcePathComputers"</code>) for the - * source path computers extension point. - * - * @since 3.0 - */ - public static final String EXTENSION_POINT_SOURCE_PATH_COMPUTERS = "sourcePathComputers"; //$NON-NLS-1$ - - /** - * Status code indicating an unexpected internal error. - */ - public static final int INTERNAL_ERROR = 120; - - /** - * Status code indicating that the Eclipse runtime does not support - * launching a program with a working directory. This feature is only - * available if Eclipse is run on a 1.3 runtime or higher. - * <p> - * A status handler may be registered for this error condition, - * and should return a <code>Boolean</code> indicating whether the program - * should be relaunched with the default working directory. - * </p> - */ - public static final int ERR_WORKING_DIRECTORY_NOT_SUPPORTED = 115; - - /** - * The launch configuration attribute that designates the process factory ID - * for the process factory to be used when creating a new process as a result of launching - * the launch configuration. - * @since 3.0 - */ - public static final String ATTR_PROCESS_FACTORY_ID = "process_factory_id"; //$NON-NLS-1$ - - /** - * The launch configuration attribute that designates whether or not it's associated - * launch should capture output. - * - * @since 3.1 - */ - public static final String ATTR_CAPTURE_OUTPUT = PI_DEBUG_CORE + ".capture_output"; //$NON-NLS-1$ - - /** - * The singleton debug plug-in instance. - */ - private static DebugPlugin fgDebugPlugin= null; - - /** - * The singleton breakpoint manager. - */ - private BreakpointManager fBreakpointManager; - - /** - * The singleton expression manager. - */ - private ExpressionManager fExpressionManager; - - /** - * The singleton launch manager. - */ - private LaunchManager fLaunchManager; - - /** - * The singleton memory block manager. - * @since 3.1 - */ - private MemoryBlockManager fMemoryBlockManager; - - /** - * The collection of debug event listeners. - */ - private ListenerList fEventListeners; - - /** - * Event filters, or <code>null</code> if none. - */ - private ListenerList fEventFilters = null; - - /** - * Whether this plugin is in the process of shutting - * down. - */ - private boolean fShuttingDown= false; - - /** - * Whether event dispatch is in progress (if > 0) - * - * @since 2.1 - */ - private int fDispatching = 0; - - /** - * Queue of runnables to execute after event dispatch is - * complete. - * - * @since 2.1 - */ - private Vector fRunnables = null; - - /** - * Job that executes runnables - * - * @since 3.0 - */ - private AsynchJob fAsynchJob = null; - - /** - * Table of status handlers. Keys are {plug-in identifier, status code} - * pairs, and values are associated <code>IConfigurationElement</code>s. - */ - private HashMap fStatusHandlers = null; - - /** - * Map of process factories. Keys are process factory IDs - * and values are associated <code>IConfigurationElement</code>s. - * @since 3.0 - */ - private HashMap fProcessFactories = null; - - /** - * Mode constants for the event notifier - */ - private static final int NOTIFY_FILTERS = 0; - private static final int NOTIFY_EVENTS = 1; - - /** - * Returns the singleton instance of the debug plug-in. - */ - public static DebugPlugin getDefault() { - return fgDebugPlugin; - } - - /** - * Sets the singleton instance of the debug plug-in. - * - * @param plugin the debug plug-in, or <code>null</code> - * when shutting down - */ - private static void setDefault(DebugPlugin plugin) { - fgDebugPlugin = plugin; - } - - /** - * Convenience method which returns the unique identifier of this plugin. - */ - public static String getUniqueIdentifier() { - return PI_DEBUG_CORE; - } - - /** - * Constructs the debug plug-in. - * <p> - * An instance of this plug-in runtime class is automatically created - * when the facilities provided by this plug-in are required. - * <b>Clients must never explicitly instantiate a plug-in runtime class.</b> - * </p> - */ - public DebugPlugin() { - super(); - setDefault(this); - } - - /** - * Adds the given listener to the collection of registered debug - * event listeners. Has no effect if an identical listener is already - * registered. - * - * @param listener the listener to add - * @since 2.0 - */ - public void addDebugEventListener(IDebugEventSetListener listener) { - if (fEventListeners == null) { - fEventListeners = new ListenerList(20); - } - fEventListeners.add(listener); - } - - /** - * Notifies all registered debug event set listeners of the given - * debug events. Events which are filtered by a registered debug event - * filter are not fired. - * - * @param events array of debug events to fire - * @see IDebugEventFilter - * @see IDebugEventSetListener - * @since 2.0 - */ - public void fireDebugEventSet(DebugEvent[] events) { - if (isShuttingDown() || events == null || fEventListeners == null) - return; - getEventNotifier().dispatch(events); - } - - /** - * Asynchronously executes the given runnable in a seperate - * thread, after debug event dispatch has completed. If debug - * events are not currently being dispatched, the runnable is - * scheduled to run in a seperate thread immediately. - * - * @param r runnable to execute asynchronously - * @since 2.1 - */ - public void asyncExec(Runnable r) { - if (fRunnables == null) { - // initialize runnables and async job - fRunnables= new Vector(5); - fAsynchJob = new AsynchJob(); - } - fRunnables.add(r); - if (!isDispatching()) { - fAsynchJob.schedule(); - } - } - - /** - * Returns the breakpoint manager. - * - * @return the breakpoint manager - * @see IBreakpointManager - */ - public IBreakpointManager getBreakpointManager() { - if (fBreakpointManager == null) { - fBreakpointManager = new BreakpointManager(); - } - return fBreakpointManager; - } - - /** - * Returns the launch manager. - * - * @return the launch manager - * @see ILaunchManager - */ - public ILaunchManager getLaunchManager() { - if (fLaunchManager == null) { - fLaunchManager = new LaunchManager(); - } - return fLaunchManager; - } - - /** - * Returns the memory block manager. - * @return the memory block manager. - * @see IMemoryBlockManager - * @since 3.1 - */ - public IMemoryBlockManager getMemoryBlockManager(){ - if (fMemoryBlockManager == null) { - fMemoryBlockManager = new MemoryBlockManager(); - } - return fMemoryBlockManager; - } - - /** - * Returns the status handler registered for the given - * status, or <code>null</code> if none. - * - * @return the status handler registered for the given - * status, or <code>null</code> if none - * @since 2.0 - */ - public IStatusHandler getStatusHandler(IStatus status) { - StatusHandlerKey key = new StatusHandlerKey(status.getPlugin(), status.getCode()); - if (fStatusHandlers == null) { - initializeStatusHandlers(); - } - IConfigurationElement config = (IConfigurationElement)fStatusHandlers.get(key); - if (config != null) { - try { - Object handler = config.createExecutableExtension("class"); //$NON-NLS-1$ - if (handler instanceof IStatusHandler) { - return (IStatusHandler)handler; - } - invalidStatusHandler(null, MessageFormat.format(DebugCoreMessages.getString("DebugPlugin.Registered_status_handler_{0}_does_not_implement_required_interface_IStatusHandler._1"), new String[] {config.getDeclaringExtension().getUniqueIdentifier()})); //$NON-NLS-1$ - } catch (CoreException e) { - log(e); - } - } - return null; - } - - /** - * Returns the expression manager. - * - * @return the expression manager - * @see IExpressionManager - * @since 2.0 - */ - public IExpressionManager getExpressionManager() { - if (fExpressionManager == null) { - fExpressionManager = new ExpressionManager(); - } - return fExpressionManager; - } - - /** - * Removes the given listener from the collection of registered debug - * event listeners. Has no effect if an identical listener is not already - * registered. - * - * @param listener the listener to remove - * @since 2.0 - */ - public void removeDebugEventListener(IDebugEventSetListener listener) { - if (fEventListeners != null) { - fEventListeners.remove(listener); - } - } - - /* (non-Javadoc) - * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) - */ - public void stop(BundleContext context) throws Exception { - try { - setShuttingDown(true); - - if (fAsynchJob != null) { - fAsynchJob.cancel(); - } - if (fLaunchManager != null) { - fLaunchManager.shutdown(); - } - if (fBreakpointManager != null) { - fBreakpointManager.shutdown(); - } - if (fMemoryBlockManager != null) { - fMemoryBlockManager.shutdown(); - } - - if (fEventListeners != null) { - fEventListeners.removeAll(); - } - SourceLookupUtils.shutdown(); - setDefault(null); - ResourcesPlugin.getWorkspace().removeSaveParticipant(this); - } finally { - super.stop(context); - } - } - - /** - * Creates and returns a new process representing the given - * <code>java.lang.Process</code>. A streams proxy is created - * for the I/O streams in the system process. The process - * is added to the given launch. - * - * @param launch the launch the process is contained in - * @param process the system process to wrap - * @param label the label assigned to the process - * @return the process - * @see IProcess - */ - public static IProcess newProcess(ILaunch launch, Process process, String label) { - return newProcess(launch, process, label, null); - } - - /** - * Creates and returns a new process representing the given - * <code>java.lang.Process</code>. A streams proxy is created - * for the I/O streams in the system process. The process - * is added to the given launch, and the process is initialized - * with the given attribute map. - * - * The process will be created by the <code>IProcessFactory<code> if it has been - * designated via the org.eclipse.debug.core.processFactories extension point for the - * process factory id indicated in the launch configuration associated with the launch. - * - * @param launch the launch the process is contained in - * @param process the system process to wrap - * @param label the label assigned to the process - * @param attributes initial values for the attribute map - * @return the process <code>null</code> can be returned if errors occur dealing with the process factory - * designated to create the process. - * @see IProcess - * @since 2.1 - */ - public static IProcess newProcess(ILaunch launch, Process process, String label, Map attributes) { - ILaunchConfiguration config= launch.getLaunchConfiguration(); - String processFactoryID= null; - if (config != null) { - try { - processFactoryID= config.getAttribute(ATTR_PROCESS_FACTORY_ID, (String)null); - } catch (CoreException e) { - } - } - if (processFactoryID != null) { - DebugPlugin plugin= DebugPlugin.getDefault(); - if (plugin.fProcessFactories == null) { - plugin.initializeProcessFactories(); - } - IConfigurationElement element= (IConfigurationElement) plugin.fProcessFactories.get(processFactoryID); - if (element == null) { - return null; - } - IProcessFactory processFactory= null; - try { - processFactory = (IProcessFactory)element.createExecutableExtension("class"); //$NON-NLS-1$ - } catch (CoreException exception) { - log(exception); - return null; - } - return processFactory.newProcess(launch, process, label, attributes); - } - return new RuntimeProcess(launch, process, label, attributes); - } - - /** - * Returns any logical structure types that have been contributed for the given - * value. - * - * @param value the value for which logical structure types have been requested - * @return logical structure types that have been contributed for the given - * value, possibly an empty collection - * - * @since 3.0 - */ - public static ILogicalStructureType[] getLogicalStructureTypes(IValue value) { - return LogicalStructureManager.getDefault().getLogicalStructureTypes(value); - } - - /** - * Convenience method that performs a runtime exec on the given command line - * in the context of the specified working directory, and returns the - * resulting process. If the current runtime does not support the - * specification of a working directory, the status handler for error code - * <code>ERR_WORKING_DIRECTORY_NOT_SUPPORTED</code> is queried to see if the - * exec should be re-executed without specifying a working directory. - * - * @param cmdLine the command line - * @param workingDirectory the working directory, or <code>null</code> - * @return the resulting process or <code>null</code> if the exec is - * cancelled - * @see Runtime - * - * @since 2.1 - */ - public static Process exec(String[] cmdLine, File workingDirectory) throws CoreException { - return exec(cmdLine, workingDirectory, null); - } - - /** - * Convenience method that performs a runtime exec on the given command line - * in the context of the specified working directory, and returns the - * resulting process. If the current runtime does not support the - * specification of a working directory, the status handler for error code - * <code>ERR_WORKING_DIRECTORY_NOT_SUPPORTED</code> is queried to see if the - * exec should be re-executed without specifying a working directory. - * - * @param cmdLine the command line - * @param workingDirectory the working directory, or <code>null</code> - * @param envp the environment variables set in the process, or <code>null</code> - * @return the resulting process or <code>null</code> if the exec is - * cancelled - * @see Runtime - * - * @since 3.0 - */ - public static Process exec(String[] cmdLine, File workingDirectory, String[] envp) throws CoreException { - Process p= null; - try { - - if (workingDirectory == null) { - p= Runtime.getRuntime().exec(cmdLine, envp); - } else { - p= Runtime.getRuntime().exec(cmdLine, envp, workingDirectory); - } - } catch (IOException e) { - if (p != null) { - p.destroy(); - } - Status status = new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR, DebugCoreMessages.getString("DebugPlugin.Exception_occurred_executing_command_line._1"), e); //$NON-NLS-1$ - throw new CoreException(status); - } catch (NoSuchMethodError e) { - //attempting launches on 1.2.* - no ability to set working directory - IStatus status = new Status(IStatus.ERROR, getUniqueIdentifier(), ERR_WORKING_DIRECTORY_NOT_SUPPORTED, DebugCoreMessages.getString("DebugPlugin.Eclipse_runtime_does_not_support_working_directory_2"), e); //$NON-NLS-1$ - IStatusHandler handler = DebugPlugin.getDefault().getStatusHandler(status); - - if (handler != null) { - Object result = handler.handleStatus(status, null); - if (result instanceof Boolean && ((Boolean)result).booleanValue()) { - p= exec(cmdLine, null); - } - } - } - return p; - } - - /** - * Returns whether this plug-in is in the process of - * being shutdown. - * - * @return whether this plug-in is in the process of - * being shutdown - */ - private boolean isShuttingDown() { - return fShuttingDown; - } - - /** - * Sets whether this plug-in is in the process of - * being shutdown. - * - * @param value whether this plug-in is in the process of - * being shutdown - */ - private void setShuttingDown(boolean value) { - fShuttingDown = value; - } - - /** - * Returns the collection of debug event listeners registered - * with this plug-in. - * - * @return list of registered debug event listeners, instances - * of <code>IDebugEventSetListeners</code> - */ - private Object[] getEventListeners() { - return fEventListeners.getListeners(); - } - - /** - * Adds the given debug event filter to the registered - * event filters. Has no effect if an identical filter - * is already registerd. - * - * @param filter debug event filter - * @since 2.0 - */ - public void addDebugEventFilter(IDebugEventFilter filter) { - if (fEventFilters == null) { - fEventFilters = new ListenerList(2); - } - fEventFilters.add(filter); - } - - /** - * Removes the given debug event filter from the registered - * event filters. Has no effect if an identical filter - * is not already registered. - * - * @param filter debug event filter - * @since 2.0 - */ - public void removeDebugEventFilter(IDebugEventFilter filter) { - if (fEventFilters != null) { - fEventFilters.remove(filter); - if (fEventFilters.size() == 0) { - fEventFilters = null; - } - } - } - - /** - * Logs the given message if in debug mode. - * - * @param message the message to log - * @since 2.0 - */ - public static void logDebugMessage(String message) { - if (getDefault().isDebugging()) { - // this message is intentionally not internationalized, as an exception may - // be due to the resource bundle itself - log(new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR, "Internal message logged from Debug Core: " + message, null)); //$NON-NLS-1$ - } - } - - /** - * Logs the given message with this plug-in's log and the given - * throwable or <code>null</code> if none. - * @param message the message to log - * @param throwable the exception that occurred or <code>null</code> if none - */ - public static void logMessage(String message, Throwable throwable) { - log(new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR, message, throwable)); - } - - /** - * Logs the specified status with this plug-in's log. - * - * @param status status to log - * @since 2.0 - */ - public static void log(IStatus status) { - getDefault().getLog().log(status); - } - - /** - * Logs the specified throwable with this plug-in's log. - * - * @param t throwable to log - * @since 2.0 - */ - public static void log(Throwable t) { - IStatus status= new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR, "Error logged from Debug Core: ", t); //$NON-NLS-1$ - log(status); - } - - /** - * Register status handlers. - * - */ - private void initializeStatusHandlers() { - IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.PI_DEBUG_CORE, EXTENSION_POINT_STATUS_HANDLERS); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fStatusHandlers = new HashMap(infos.length); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - String id = configurationElement.getAttribute("plugin"); //$NON-NLS-1$ - String code = configurationElement.getAttribute("code"); //$NON-NLS-1$ - - if (id != null && code != null) { - try { - StatusHandlerKey key = new StatusHandlerKey(id, Integer.parseInt(code)); - fStatusHandlers.put(key, configurationElement); - } catch (NumberFormatException e) { - // invalid status handler - invalidStatusHandler(e, configurationElement.getAttribute("id")); //$NON-NLS-1$ - } - } else { - // invalid status handler - invalidStatusHandler(null, configurationElement.getAttribute("id")); //$NON-NLS-1$ - } - } - } - - /** - * Register process factories. - * - */ - private void initializeProcessFactories() { - IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.PI_DEBUG_CORE, EXTENSION_POINT_PROCESS_FACTORIES); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fProcessFactories = new HashMap(infos.length); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - String id = configurationElement.getAttribute("id"); //$NON-NLS-1$ - String clss = configurationElement.getAttribute("class"); //$NON-NLS-1$ - if (id != null && clss != null) { - fProcessFactories.put(id, configurationElement); - } else { - // invalid process factory - String badDefiner= infos[i].getNamespace(); - log(new Status(IStatus.ERROR, DebugPlugin.PI_DEBUG_CORE, INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("DebugPlugin.31"), new String[] {badDefiner, id}), null)); //$NON-NLS-1$ - } - } - } - - private void invalidStatusHandler(Exception e, String id) { - log(new Status(IStatus.ERROR, DebugPlugin.PI_DEBUG_CORE, INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("DebugPlugin.Invalid_status_handler_extension__{0}_2"), new String[] {id}), e)); //$NON-NLS-1$ - } - - /** - * Key for status handler extensions - a plug-in identifier/code pair - */ - class StatusHandlerKey { - - String fPluginId; - int fCode; - - StatusHandlerKey(String pluginId, int code) { - fPluginId = pluginId; - fCode = code; - } - - public int hashCode() { - return fPluginId.hashCode() + fCode; - } - - public boolean equals(Object obj) { - if (obj instanceof StatusHandlerKey) { - StatusHandlerKey s = (StatusHandlerKey)obj; - return fCode == s.fCode && fPluginId.equals(s.fPluginId); - } - return false; - } - } - - /** - * Returns whether any event filters are registered - * - * @return whether any event filters are registered - */ - private boolean hasEventFilters() { - return fEventFilters != null && fEventFilters.size() > 0; - } - - /** - * Sets whether debug events are being dispatched - */ - private synchronized void setDispatching(boolean dispatching) { - if (dispatching) { - fDispatching++; - } else { - fDispatching--; - } - if (!isDispatching()) { - if (fAsynchJob != null) { - fAsynchJob.schedule(); - } - } - } - - /** - * Returns whether debug events are being dispatched - */ - private synchronized boolean isDispatching() { - return fDispatching > 0; - } - - /** - * Executes runnables after event dispatch is complete. - * - * @since 3.0 - */ - class AsynchJob extends Job { - - public AsynchJob() { - super(DebugCoreMessages.getString("DebugPlugin.Debug_async_queue_1")); //$NON-NLS-1$ - setPriority(Job.INTERACTIVE); - setSystem(true); - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.Job#shouldRun() - */ - public boolean shouldRun() { - return !fShuttingDown && !fRunnables.isEmpty(); - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) - */ - public IStatus run(IProgressMonitor monitor) { - // Executes runnables and empties the queue - Vector v = null; - synchronized (fRunnables) { - v = fRunnables; - fRunnables = new Vector(5); - } - MultiStatus failed = null; - monitor.beginTask(DebugCoreMessages.getString("DebugPlugin.Debug_async_queue_1"), v.size()); //$NON-NLS-1$ - Iterator iter = v.iterator(); - while (iter.hasNext() && !fShuttingDown && !monitor.isCanceled()) { - Runnable r = (Runnable)iter.next(); - try { - r.run(); - } catch (Exception e) { - if (failed == null) { - failed = new MultiStatus(DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("DebugPlugin.0"), null); //$NON-NLS-1$ - } - failed.add(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("DebugPlugin.0"), e)); //$NON-NLS-1$ - } - monitor.worked(1); - } - monitor.done(); - if (failed == null) { - return Status.OK_STATUS; - } - return failed; - } - - } - - /** - * Returns an event notifier. - * - * @return an event notifier - */ - private EventNotifier getEventNotifier() { - return new EventNotifier(); - } - - /** - * Filters and dispatches events in a safe runnable to handle any - * exceptions. - */ - class EventNotifier implements ISafeRunnable { - - private DebugEvent[] fEvents; - private IDebugEventSetListener fListener; - private IDebugEventFilter fFilter; - private int fMode; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - switch (fMode) { - case NOTIFY_FILTERS: - IStatus status = new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR, DebugCoreMessages.getString("DebugPlugin.An_exception_occurred_while_filtering_debug_events._3"), exception); //$NON-NLS-1$ - log(status); - break; - case NOTIFY_EVENTS: - status = new Status(IStatus.ERROR, getUniqueIdentifier(), INTERNAL_ERROR, DebugCoreMessages.getString("DebugPlugin.An_exception_occurred_while_dispatching_debug_events._2"), exception); //$NON-NLS-1$ - log(status); - break; - } - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fMode) { - case NOTIFY_FILTERS: - fEvents = fFilter.filterDebugEvents(fEvents); - break; - case NOTIFY_EVENTS: - fListener.handleDebugEvents(fEvents); - break; - } - } - - /** - * Filter and dispatch the given events. If an exception occurs in one - * listener, events are still fired to subsequent listeners. - * - * @param events debug events - */ - public void dispatch(DebugEvent[] events) { - fEvents = events; - try { - setDispatching(true); - - if (hasEventFilters()) { - fMode = NOTIFY_FILTERS; - Object[] filters = fEventFilters.getListeners(); - for (int i = 0; i < filters.length; i++) { - fFilter = (IDebugEventFilter)filters[i]; - Platform.run(this); - if (fEvents == null || fEvents.length == 0) { - return; - } - } - } - - fMode = NOTIFY_EVENTS; - Object[] listeners= getEventListeners(); - for (int i= 0; i < listeners.length; i++) { - fListener = (IDebugEventSetListener)listeners[i]; - Platform.run(this); - } - - } finally { - setDispatching(false); - } - fEvents = null; - fFilter = null; - fListener = null; - } - - } - - /** - * Creates and returns a new XML document. - * - * @return a new XML document - * @throws CoreException if unable to create a new document - * @since 3.0 - */ - public static Document newDocument()throws CoreException { - try { - return LaunchManager.getDocument(); - } catch (ParserConfigurationException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.3"), e); //$NON-NLS-1$ - } - return null; - } - - /** - * Serializes the given XML document into a string. - * - * @param document XML document to serialize - * @return a string representing the given document - * @throws CoreException if unable to serialize the document - * @since 3.0 - */ - public static String serializeDocument(Document document) throws CoreException { - try { - return LaunchManager.serializeDocument(document); - } catch (TransformerException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.4"), e); //$NON-NLS-1$ - } catch (IOException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.5"), e); //$NON-NLS-1$ - } - return null; - } - - /** - * Parses the given string representing an XML document, returning its - * root element. - * - * @param document XML document as a string - * @return the document's root element - * @throws CoreException if unable to parse the document - * @since 3.0 - */ - public static Element parseDocument(String document) throws CoreException { - Element root = null; - InputStream stream = null; - try{ - DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - stream = new ByteArrayInputStream(document.getBytes()); - root = parser.parse(stream).getDocumentElement(); - } catch (ParserConfigurationException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.6"), e); //$NON-NLS-1$ - } catch (FactoryConfigurationError e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.7"), e); //$NON-NLS-1$ - } catch (SAXException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.8"), e); //$NON-NLS-1$ - } catch (IOException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.9"), e); //$NON-NLS-1$ - } finally { - try{ - stream.close(); - } catch(IOException e) { - abort(SourceLookupMessages.getString("SourceLookupUtils.10"), e); //$NON-NLS-1$ - } - } - return root; - } - - /** - * Throws an exception with the given message and underlying exception. - * - * @param message error message - * @param exception underlying exception, or <code>null</code> - * @throws CoreException - */ - private static void abort(String message, Throwable exception) throws CoreException { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, message, exception); - throw new CoreException(status); - } - - /** - * Utility class to parse command line arguments. - * - * @since 3.1 - */ - private static class ArgumentParser { - private String fArgs; - private int fIndex= 0; - private int ch= -1; - - public ArgumentParser(String args) { - fArgs= args; - } - - public String[] parseArguments() { - List v= new ArrayList(); - - ch= getNext(); - while (ch > 0) { - if (Character.isWhitespace((char)ch)) { - ch= getNext(); - } else { - if (ch == '"') { - StringBuffer buf = new StringBuffer(); - if (Platform.getOS().equals(Constants.OS_WIN32)) { - buf.append('"'); - } - buf.append(parseString()); - if (Platform.getOS().equals(Constants.OS_WIN32)) { - buf.append('"'); - } else if (buf.length() == 0) { - // empty string on non-windows platform - buf.append("\"\""); //$NON-NLS-1$ - } - v.add(buf.toString()); - } else { - v.add(parseToken()); - } - } - } - - String[] result= new String[v.size()]; - v.toArray(result); - return result; - } - - private int getNext() { - if (fIndex < fArgs.length()) - return fArgs.charAt(fIndex++); - return -1; - } - - private String parseString() { - ch= getNext(); - if (ch == '"') { - ch= getNext(); - return ""; //$NON-NLS-1$ - } - StringBuffer buf= new StringBuffer(); - while (ch > 0 && ch != '"') { - if (ch == '\\') { - ch= getNext(); - if (ch != '"') { // Only escape double quotes - buf.append('\\'); - } else { - if (Platform.getOS().equals(Constants.OS_WIN32)) { - // @see Bug 26870. Windows requires an extra escape for embedded strings - buf.append('\\'); - } - } - } - if (ch > 0) { - buf.append((char)ch); - ch= getNext(); - } - } - ch= getNext(); - return buf.toString(); - } - - private String parseToken() { - StringBuffer buf= new StringBuffer(); - - while (ch > 0 && !Character.isWhitespace((char)ch)) { - if (ch == '\\') { - ch= getNext(); - if (Character.isWhitespace((char)ch)) { - // end of token, don't lose trailing backslash - buf.append('\\'); - return buf.toString(); - } - if (ch > 0) { - if (ch != '"') { // Only escape double quotes - buf.append('\\'); - } else { - if (Platform.getOS().equals(Constants.OS_WIN32)) { - // @see Bug 26870. Windows requires an extra escape for embedded strings - buf.append('\\'); - } - } - buf.append((char)ch); - ch= getNext(); - } else if (ch == -1) { // Don't lose a trailing backslash - buf.append('\\'); - } - } else if (ch == '"') { - buf.append(parseString()); - } else { - buf.append((char)ch); - ch= getNext(); - } - } - return buf.toString(); - } - } - - /** - * Prarses the given command line into seperate arguments that can be passed to - * <code>DebugPlugin.exec(String[], File)</code>. Embedded quotes and slashes - * are escaped. - * - * @param args command line arguments as a single string - * @return individual arguments - * @since 3.1 - */ - public static String[] parseArguments(String args) { - if (args == null) - return new String[0]; - ArgumentParser parser= new ArgumentParser(args); - String[] res= parser.parseArguments(); - - return res; - } -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointListener.java deleted file mode 100644 index 050ac294a..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointListener.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - - -import org.eclipse.core.resources.IMarkerDelta; -import org.eclipse.debug.core.model.IBreakpoint; - -/** - * A breakpoint listener is notified of breakpoint additions, - * removals, and changes. Listeners register and deregister with the - * breakpoint manager. - * <p> - * Clients may implement this interface. - * </p> - * @see IBreakpointManager - */ - -public interface IBreakpointListener { - - /** - * Notifies this listener that the given breakpoint has been added - * to the breakpoint manager. - * - * @param breakpoint the added breakpoint - * @since 2.0 - */ - public void breakpointAdded(IBreakpoint breakpoint); - /** - * Notifies this listener that the given breakpoint has been removed - * from the breakpoint manager. - * If the given breakpoint has been removed because it has been deleted, - * the associated marker delta is also provided. - * - * @param breakpoint the removed breakpoint - * @param delta the associated marker delta, or <code>null</code> when - * the breakpoint is removed from the breakpoint manager without - * being deleted - * - * @see org.eclipse.core.resources.IMarkerDelta - * @since 2.0 - */ - public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta); - - /** - * Notifies this listener that an attribute of the given breakpoint has - * changed, as described by the delta. - * - * @param breakpoint the changed breakpoint - * @param delta the marker delta that describes the changes - * with the marker associated with the given breakpoint, or - * <code>null</code> when the breakpoint change does not generate - * a marker delta - * - * @see org.eclipse.core.resources.IMarkerDelta - * @since 2.0 - */ - public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointManager.java deleted file mode 100644 index 6f2ad1a0a..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointManager.java +++ /dev/null @@ -1,275 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.model.IBreakpoint; - -/** - * The breakpoint manager manages the collection of breakpoints - * in the workspace. A breakpoint suspends the execution of a - * program being debugged. The kinds of breakpoints supported by each - * debug architecture and the information required to create those - * breakpoints is defined by each debug architecture. - * Breakpoint creation is a client responsibility. - * <p> - * Clients interested in breakpoint change notification may - * register with the breakpoint manager - see - * <code>IBreakpointListener</code> and <code>IBreakpointsListener</code> - * </p> - * <p> - * This interface is not intended to be implemented by clients. - * </p> - * @see org.eclipse.debug.core.IBreakpointListener - * @see org.eclipse.debug.core.IBreakpointsListener - */ -public interface IBreakpointManager { - /** - * Adds the given breakpoint to the collection of registered breakpoints - * in the workspace and notifies all registered listeners. This has no effect - * if the given breakpoint is already registered. - * - * @param breakpoint the breakpoint to add - * - * @exception DebugException if adding fails. Reasons include:<ul> - * <li>CONFIGURATION_INVALID - the required <code>MODEL_IDENTIFIER</code> attribute - * is not set on the breakpoint marker.</li> - * <li>A <code>CoreException</code> occurred while verifying the <code>MODEL_IDENTIFIER</code> - * attribute.</li> - * </ul> - * @since 2.0 - */ - public void addBreakpoint(IBreakpoint breakpoint) throws CoreException; - - /** - * Adds the given breakpoints to the collection of registered breakpoints - * in the workspace and notifies all registered listeners. Has no effect - * on breakpoints that are already registered. - * - * @param breakpoints the breakpoints to add - * - * @exception DebugException if adding fails. Reasons include:<ul> - * <li>CONFIGURATION_INVALID - the required <code>MODEL_IDENTIFIER</code> attribute - * is not set on a breakpoint marker.</li> - * <li>A <code>CoreException</code> occurred while verifying a <code>MODEL_IDENTIFIER</code> - * attribute.</li> - * </ul> - * @since 2.1 - */ - public void addBreakpoints(IBreakpoint[] breakpoints) throws CoreException; - - /** - * Returns the breakpoint associated with the given marker or - * <code>null</code> if no such breakpoint exists - * - * @param marker the marker - * @return the breakpoint associated with the marker - * or <code>null</code> if none exists - * @since 2.0 - */ - public IBreakpoint getBreakpoint(IMarker marker); - - /** - * Returns a collection of all registered breakpoints. - * Returns an empty array if no breakpoints are registered. - * - * @return an array of breakpoints - * @since 2.0 - */ - public IBreakpoint[] getBreakpoints(); - - /** - * Returns whether there are any registered breakpoints. - * - * @return whether there are any registered breakpoints - * @since 2.0 - */ - public boolean hasBreakpoints(); - - /** - * Returns a collection of all breakpoints registered for the - * given debug model. Answers an empty array if no breakpoints are registered - * for the given debug model. - * - * @param modelIdentifier identifier of a debug model plug-in - * @return an array of breakpoints - * @since 2.0 - */ - public IBreakpoint[] getBreakpoints(String modelIdentifier); - - /** - * Returns whether the given breakpoint is currently - * registered with this breakpoint manager. - * - * @return whether the breakpoint is registered - * @since 2.0 - */ - public boolean isRegistered(IBreakpoint breakpoint); - - /** - * Notifies all registered listeners that the given - * breakpoint has changed. Has no effect if the given - * breakpoint is not currently registered. - * - * This method is intended to be used when a breakpoint - * attribute is changed that does not alter the breakpoint's - * underlying marker, that is, when notification will not occur - * via the marker delta mechanism. - * - * @param breakpoint the breakpoint that has changed. - * @since 2.0 - */ - public void fireBreakpointChanged(IBreakpoint breakpoint); - - /** - * Removes the given breakpoint from the breakpoint manager, deletes - * the marker associated with the breakpoint if the <code>delete</code> flag - * is <code>true</code>, and notifies all registered - * listeners. Has no effect if the given breakpoint is not currently - * registered. - * - * @param breakpoint the breakpoint to remove - * @param delete whether to delete the marker associated with the - * breakpoint - * @exception CoreException if an exception occurs while deleting the - * underlying marker. - * @since 2.0 - */ - public void removeBreakpoint(IBreakpoint breakpoint, boolean delete) throws CoreException; - - /** - * Removes the given breakpoints from the breakpoint manager, deletes - * the markers associated with the breakpoints if the <code>delete</code> flag - * is <code>true</code>, and notifies all registered - * listeners. Has no effect on breakpoints not currently - * registered. - * - * @param breakpoints the breakpoints to remove - * @param delete whether to delete the markers associated with the - * breakpoints - * @exception CoreException if an exception occurs while deleting an - * underlying marker. - * @since 2.1 - */ - public void removeBreakpoints(IBreakpoint[] breakpoints, boolean delete) throws CoreException; - - /** - * Adds the given listener to the collection of registered breakpoint listeners. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - */ - public void addBreakpointListener(IBreakpointListener listener); - - /** - * Removes the given listener from the collection of registered breakpoint listeners. - * Has no effect if an identical listener is not already registered. - * - * @param listener the listener to remove - */ - public void removeBreakpointListener(IBreakpointListener listener); - - /** - * Adds the given listener to the collection of registered breakpoint listeners. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - * @since 2.1 - */ - public void addBreakpointListener(IBreakpointsListener listener); - - /** - * Removes the given listener from the collection of registered breakpoint listeners. - * Has no effect if an identical listener is not already registered. - * - * @param listener the listener to remove - * @since 2.1 - */ - public void removeBreakpointListener(IBreakpointsListener listener); - - /** - * Adds the given listener to the collection of registered breakpoint manager - * listeners. Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - * @since 3.0 - */ - public void addBreakpointManagerListener(IBreakpointManagerListener listener); - - /** - * Removes the given listener from the collection of registered breakpoint manager - * listeners. Has no effect if an identical listener is not already registered. - * - * @param listener the listener to remove - * @since 3.0 - */ - public void removeBreakpointManagerListener(IBreakpointManagerListener listener); - - /** - * Returns whether or not this breakpoint manager is enabled. - * When a breakpoint manager is enabled, all breakpoints - * should be honored. When it is disabled, breakpoints should - * not be honored, regardless of each breakpoint's enabled state. - * - * @return whether or not this breakpoint manager is enabled - * @since 3.0 - */ - public boolean isEnabled(); - - /** - * Sets the enabled state of this breakpoint manager. When - * enabled, breakpoints should be honored. When disabled, all - * breakpoints should be ignored. - * - * @param enabled whether this breakpoint manager should be - * enabled - * @since 3.0 - */ - public void setEnabled(boolean enabled); - - /** - * Returns the name (user presentable String) of the given - * breakpoint's type or <code>null</code> if none has been - * specified. - * - * @param breakpoint the breakpoint - * @return the name of the given breakpoint's type or <code>null</code> - * @since 3.1 - */ - public String getTypeName(IBreakpoint breakpoint); - - /** - * Sets the group which breakpoints will be automatically - * added to when they're added to this manager. If <code>null</code>, - * breakpoints will not be automatically added to any group. - * @param group the group to automatically add breakpoints to - * or <code>null</code> - * @see IBreakpoint#setGroup(String) - * @since 3.1 - */ - public void setAutoGroup(String group); - - /** - * Returns the group which breakpoints will be automatically - * added to when they're added to this manager or <code>null</code> - * if none. - * @return the group which breakpoints will be automatically added - * to or <code>null</code> - * @see IBreakpoint#getGroup() - * @since 3.1 - */ - public String getAutoGroup(); - -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointManagerListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointManagerListener.java deleted file mode 100644 index 0ad6127ab..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointManagerListener.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - -/** - * A breakpoint manager listener is notified when the breakpoint manager's - * enablement changes. When the breakpoint manager is disabled, no breakpoints - * should be honored. When the breakpoint manager is enabled, breakpoints should - * be honored as usual. - * <p> - * Clients are intended to implement this interface. - * </p> - * @see IBreakpointManager - * @since 3.0 - */ -public interface IBreakpointManagerListener { - - /** - * Notifies the listener that the breakpoint manager's enablement - * has changed. - * - * @param enabled whether or not the breakpoint manager is enabled - */ - public void breakpointManagerEnablementChanged(boolean enabled); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointsListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointsListener.java deleted file mode 100644 index 7879b0188..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointsListener.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.core.resources.IMarkerDelta; -import org.eclipse.debug.core.model.IBreakpoint; - -/** - * A breakpoints listener is notified of breakpoint additions, - * removals, and changes. Listeners register and deregister with the - * breakpoint manager. - * <p> - * This interface is analagous to <code>IBreakpointListener</code> except - * notifications are batched for more than one breakpoint when possible. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see IBreakpointManager - * @since 2.1 - */ - -public interface IBreakpointsListener { - - /** - * Notifies this listener that the given breakpoints have been added - * to the breakpoint manager. - * - * @param breakpoints the added breakpoints - */ - public void breakpointsAdded(IBreakpoint[] breakpoints); - /** - * Notifies this listener that the given breakpoints have been removed - * from the breakpoint manager. - * If a breakpoint has been removed because it has been deleted, - * the associated marker delta is also provided. - * - * @param breakpoints the removed breakpoints - * @param deltas the associated marker deltas. Entries may be - * <code>null</code> when a breakpoint is removed from the breakpoint - * manager without being deleted - * - * @see org.eclipse.core.resources.IMarkerDelta - */ - public void breakpointsRemoved(IBreakpoint[] breakpoints, IMarkerDelta[] deltas); - - /** - * Notifies this listener that the given breakpoints have - * changed, as described by the corresponding deltas. - * - * @param breakpoints the changed breakpoints - * @param deltas the marker deltas that describe the changes - * with the markers associated with the given breakpoints. Entries - * may be <code>null</code> when a breakpoint change does not generate - * a marker delta - * - * @see org.eclipse.core.resources.IMarkerDelta - */ - public void breakpointsChanged(IBreakpoint[] breakpoints, IMarkerDelta[] deltas); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IDebugEventFilter.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IDebugEventFilter.java deleted file mode 100644 index 8654fa133..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IDebugEventFilter.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -/** - * An event filter allows clients to intercept debug events. - * Event filters are registered with the debug plug-in. - * <p> - * Clients may implement this interface. - * </p> - * @see DebugPlugin - * @since 2.0 - */ -public interface IDebugEventFilter { - - /** - * Filters the given set of debug events, and returns the set of debug - * events that should be fired to registered listeners - <code>null</code> - * or an empty collection if no debug events should be fired. - * <p> - * When multiple event filters are registered, events are passed through - * all filters. That is, the events returned from the first filter are - * passed through the second filter, and so on. - * </p> - * - * @return the set of debug events to fire - */ - public DebugEvent[] filterDebugEvents(DebugEvent[] events); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IDebugEventSetListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IDebugEventSetListener.java deleted file mode 100644 index 7b56fed66..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IDebugEventSetListener.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -/** - * A debug event set listener registers with the debug plug-in - * to receive event notification from programs being run or debugged. - * <p> - * When more than one event is reported, each event has occurred at the - * same location in a target program. For example, a breakpoint may - * reside at the same location at which a step request completes. In - * this case the breakpoint event and step end event are reported together - * in the same event set. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see DebugEvent - * @since 2.0 - */ -public interface IDebugEventSetListener { - /** - * Notifies this listener of the given debug events. - * All of the events in the given event collection occurred - * at the same location the program be run or debugged. - * - * @param events the debug events - */ - public void handleDebugEvents(DebugEvent[] events); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionListener.java deleted file mode 100644 index 13a1e9126..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionListener.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - - -import org.eclipse.debug.core.model.IExpression; - -/** - * An expression listener is notified of expression additions, - * removals, and changes. Listeners register and deregister with the - * expression manager. - * <p> - * Clients may implement this interface. - * </p> - * @see IExpressionManager - * @since 2.0 - */ - -public interface IExpressionListener { - - /** - * Notifies this listener that the given expression has been added - * to the expression manager. - * - * @param expression the added expression - */ - public void expressionAdded(IExpression expression); - /** - * Notifies this listener that the given expression has been removed - * from the expression manager. - * - * @param expression the removed expression - */ - public void expressionRemoved(IExpression expression); - - /** - * Notifies this listener that the given expression has - * changed. - * - * @param expression the changed expression - */ - public void expressionChanged(IExpression expression); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java deleted file mode 100644 index 669d63fd0..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionManager.java +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.debug.core.model.IExpression; -import org.eclipse.debug.core.model.IWatchExpression; -import org.eclipse.debug.core.model.IWatchExpressionDelegate; - -/** - * The expression manager manages the collection of registered - * expressions in the workspace. An expression is a snippet of code - * that can be evaluated to produce a value. Expression creation - * and evaluation are client responsibilities. - * <p> - * Clients interested in expression change notification may - * register with the expression manager - see - * <code>IExpressionListener</code> and <code>IExpressionsListener</code>. - * </p> - * <p> - * This interface is not intended to be implemented by clients. - * </p> - * @see org.eclipse.debug.core.model.IExpression - * @see org.eclipse.debug.core.IExpressionListener - * @see org.eclipse.debug.core.IExpressionsListener - * @since 2.0 - */ -public interface IExpressionManager { - /** - * Adds the given expression to the collection of registered expressions - * in the workspace and notifies all registered listeners. This has no effect - * if the given expression is already registered. - * - * @param expression the expression to add - */ - public void addExpression(IExpression expression); - - /** - * Adds the given expressions to the collection of registered expressions - * in the workspace and notifies all registered listeners. Has no effect - * on expressions already registered. - * - * @param expressions the expressions to add - * @since 2.1 - */ - public void addExpressions(IExpression[] expressions); - - /** - * Creates and returns a new watch expression with the - * given text. The returned expression is <b>not</b> added to - * this manager. - * - * @param expressionText the text for the new expression - * @since 3.0 - */ - public IWatchExpression newWatchExpression(String expressionText); - - /** - * Returns a collection of all registered expressions, - * possibly empty. - * - * @return an array of expressions - */ - public IExpression[] getExpressions(); - - /** - * Returns whether there are any registered expressions - * - * @return whether there are any registered expressions - */ - public boolean hasExpressions(); - - /** - * Returns a collection of all expressions registered for the - * given debug model,possibly empty. - * - * @param modelIdentifier identifier of a debug model plug-in - * @return an array of expressions - */ - public IExpression[] getExpressions(String modelIdentifier); - - /** - * Removes the given expression from the expression manager, - * and notifies all registered listeners. Has no effect if the - * given expression is not currently registered. - * - * @param expression the expression to remove - */ - public void removeExpression(IExpression expression); - - /** - * Removes the given expressions from the collection of registered expressions - * in the workspace and notifies all registered listeners. Has no effect - * on expressions not already registered. - * - * @param expressions the expressions to remove - * @since 2.1 - */ - public void removeExpressions(IExpression[] expressions); - - /** - * Adds the given listener to the collection of registered expression listeners. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - */ - public void addExpressionListener(IExpressionListener listener); - - /** - * Removes the given listener from the collection of registered expression listeners. - * Has no effect if an identical listener is not already registered. - * - * @param listener the listener to remove - */ - public void removeExpressionListener(IExpressionListener listener); - - /** - * Adds the given listener to the collection of registered expression listeners. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - * @since 2.1 - */ - public void addExpressionListener(IExpressionsListener listener); - - /** - * Removes the given listener from the collection of registered expression listeners. - * Has no effect if an identical listener is not already registered. - * - * @param listener the listener to remove - * @since 2.1 - */ - public void removeExpressionListener(IExpressionsListener listener); - - /** - * Returns a new watch expression delegate for the given debug - * model or <code>null</code> if no delegate is available. - * - * @param id the unique identifier of a debug model for which a - * watch expression delegate has been contributed - * @return a watch expression delegate associated with the given model - * or <code>null</code> if none - * @since 3.0 - * @see IWatchExpressionDelegate - */ - public IWatchExpressionDelegate newWatchExpressionDelegate(String id); -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java deleted file mode 100644 index d1039fa48..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IExpressionsListener.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.debug.core.model.IExpression; - -/** - * An expression listener is notified of expression additions, - * removals, and changes. Listeners register and deregister with the - * expression manager. - * <p> - * This interface is analagous to <code>IExpressionListener</code>, except - * notifications are batched for more than when expression when possible. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see IExpressionManager - * @since 2.1 - */ - -public interface IExpressionsListener { - - /** - * Notifies this listener that the given expressions have been added - * to the expression manager. - * - * @param expressions the added expressions - */ - public void expressionsAdded(IExpression[] expressions); - /** - * Notifies this listener that the given expressions has been removed - * from the expression manager. - * - * @param expressions the removed expressions - */ - public void expressionsRemoved(IExpression[] expressions); - - /** - * Notifies this listener that the given expressions have - * changed. - * - * @param expressions the changed expressions - */ - public void expressionsChanged(IExpression[] expressions); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunch.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunch.java deleted file mode 100644 index d7b8f4f9d..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunch.java +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.core.model.ISourceLocator; -import org.eclipse.debug.core.model.ITerminate; - -/** - * A launch is the result of launching a debug session - * and/or one or more system processes. - * <p> - * This interface is not intended to be implemented by clients. Clients - * should create instances of this interface by using the implementation - * provided by the class <code>Launch</code>. - * </p> - * @see Launch - */ -public interface ILaunch extends ITerminate, IAdaptable { - /** - * Returns the children of this launch - a collection - * of one or more debug targets and processes, possibly empty. - * - * @return an array (element type:<code>IDebugTarget</code> or <code>IProcess</code>), - * or an empty array - */ - public Object[] getChildren(); - /** - * Returns the primary (first) debug target associated with this launch, or <code>null</code> - * if no debug target is associated with this launch. All debug targets - * associated with this launch may be retrieved by - * <code>getDebugTargets()</code>. - * - * @return the primary debug target associated with this launch, or <code>null</code> - */ - public IDebugTarget getDebugTarget(); - - /** - * Returns the processes that were launched, - * or an empty collection if no processes were launched. - * - * @return array of processes - */ - public IProcess[] getProcesses(); - - /** - * Returns all the debug targets associated with this launch, - * or an empty collection if no debug targets are associated - * with this launch. The primary debug target is the first - * in the collection (if any). - * - * @return array of debug targets - * @since 2.0 - */ - public IDebugTarget[] getDebugTargets(); - - /** - * Adds the given debug target to this launch. Has no effect - * if the given debug target is already associated with this - * launch. Registered listeners are notified that this launch - * has changed. - * - * @param target debug target to add to this launch - * @since 2.0 - */ - public void addDebugTarget(IDebugTarget target); - - /** - * Removes the given debug target from this launch. Has no effect - * if the given debug target is not already associated with this - * launch. Registered listeners are notified that this launch - * has changed. - * - * @param target debug target to remove from this launch - * @since 2.0 - */ - public void removeDebugTarget(IDebugTarget target); - - /** - * Adds the given process to this launch. Has no effect - * if the given process is already associated with this - * launch. Registered listeners are notified that this launch - * has changed. - * - * @param process the process to add to this launch - * @since 2.0 - */ - public void addProcess(IProcess process); - - /** - * Removes the given process from this launch. Has no effect - * if the given process is not already associated with this - * launch. Registered listeners are notified that this launch - * has changed. - * - * @param process the process to remove from this launch - * @since 2.0 - */ - public void removeProcess(IProcess process); - - /** - * Returns the source locator to use for locating source elements for - * the debug target associated with this launch, or <code>null</code> - * if source lookup is not supported. - * - * @return the source locator - */ - public ISourceLocator getSourceLocator(); - - /** - * Sets the source locator to use for locating source elements for - * the debug target associated with this launch, or <code>null</code> - * if source lookup is not supported. - * - * @param sourceLocator source locator or <code>null</code> - * @since 2.0 - */ - public void setSourceLocator(ISourceLocator sourceLocator); - - /** - * Returns the mode of this launch - one of the mode constants defined by - * the launch manager. - * - * @return the launch mode - * @see ILaunchManager - */ - public String getLaunchMode(); - - /** - * Returns the configuration that was launched, or <code>null</code> - * if no configuration was launched. - * - * @return the launched configuration or <code>null</code> - * @since 2.0 - */ - public ILaunchConfiguration getLaunchConfiguration(); - - /** - * Sets the value of a client defined attribute. - * - * @param key the attribute key - * @param value the attribute value - * @since 2.0 - */ - public void setAttribute(String key, String value); - - /** - * Returns the value of a client defined attribute. - * - * @param key the attribute key - * @return value the attribute value, or <code>null</code> if undefined - * @since 2.0 - */ - public String getAttribute(String key); - - /** - * Returns whether this launch contains at least one process - * or debug target. - * - * @return whether this launch contains at least one process - * or debug target - * @since 2.0 - */ - public boolean hasChildren(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java deleted file mode 100644 index c66b224af..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java +++ /dev/null @@ -1,466 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; - -/** - * A launch configuration describes how to launch an application. - * Each launch configuration is an instance of a type of launch - * configuration as described by a launch configuration type - * extension. Each launch configuration has a launch configuration - * delegate which performs the actual launching of a - * configuration. - * <p> - * A launch configuration may be shared in a repository via - * standard VCM mechanisms, or may be stored locally, essentially - * making the launch configuration private for a single user. - * Thus, a launch configuration may stored as a file in the - * workspace (shared), or as a file in the debug plug-in's state - * location. - * </p> - * A launch configuration is a handle to its underlying storage. - * Methods annotated as "handle-only" do not require a configuration - * to exist. Methods that require an underlying configuration to exist - * throw a <code>CoreException</code> when an underlying configuration - * is missing. - * </p> - * <p> - * A launch configuration is modified by obtaining a working copy - * of a launch configuration, modifying the working copy, and then - * saving the working copy. - * </p> - * <p> - * This interface is not intended to be implemented by clients. Clients - * that define a launch configuration delegate extension implement the - * <code>ILaunchConfigurationDelegate</code> interface. - * </p> - * @see ILaunchConfigurationType - * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate - * @see ILaunchConfigurationWorkingCopy - * @since 2.0 - */ -public interface ILaunchConfiguration extends IAdaptable { - - /** - * The file extension for launch configuration files - * (value <code>"launch"</code>). - */ - public static final String LAUNCH_CONFIGURATION_FILE_EXTENSION = "launch"; //$NON-NLS-1$ - - /** - * Launch configuration attribute storing an identifier of - * a persistable source locator extension. When this attribute is - * specified, a new source locator will be created automatically and - * associated with the launch for this configuration. - * - * @see org.eclipse.debug.core.model.IPersistableSourceLocator - */ - public static final String ATTR_SOURCE_LOCATOR_ID = DebugPlugin.getUniqueIdentifier() + ".source_locator_id"; //$NON-NLS-1$ - - /** - * Launch configuration attribute storing a memento of a - * source locator. When this attribute is specified in - * conjunction with a source locator id, the source locator - * created for a launch will be initialized with this memento. - * When not specified, but a source locator id is specified, - * the source locator will be initialized to default values. - * - * @see org.eclipse.debug.core.model.IPersistableSourceLocator - */ - public static final String ATTR_SOURCE_LOCATOR_MEMENTO = DebugPlugin.getUniqueIdentifier() + ".source_locator_memento"; //$NON-NLS-1$ - - /** - * Launches this configuration in the specified mode by delegating to - * this configuration's launch configuration delegate, and returns the - * resulting launch. - * <p> - * Equivalent to calling <code>launch(String, IProgressMontitor, boolean)</code> - * with a <code>build</code> flag of <code>false</code>. - * </p> - * @param mode the mode in which to launch, one of the mode constants - * defined by <code>ILaunchManager</code> - <code>RUN_MODE</code> or <code>DEBUG_MODE</code>. - * @param monitor progress monitor, or <code>null</code>. Since 3.0, this - * parameter is ignored. A cancellable progress monitor is provided by the Job - * framework. - * @return the resulting launch - * @exception CoreException if this method fails. Reasons include:<ul> - * <li>unable to instantiate the underlying launch configuration delegate</li> - * <li>the launch fails (in the delegate)</code> - * </ul> - */ - public ILaunch launch(String mode, IProgressMonitor monitor) throws CoreException; - - /** - * Launches this configuration in the specified mode by delegating to - * this configuration's launch configuration delegate, and returns the - * resulting launch. - * <p> - * If this configuration's launch delegate implements - * <code>ILaunchConfigurationDelegate2</code>, the launch delegate will - * be consulted to provide a launch object for the launch, - * perform pre-launch checks, and build before the launch. - * If <code>build</code> is <code>true</code> and the associated launch - * delegate does not implement <code>ILaunchConfigurationDelegate2</code> - * an incremental workspace build will be performed before the launch - * by the debug platform. - * </p> - * <p> - * The resulting launch object is registered with the launch manager - * before passing it to this configuration's delegate launch method, for - * contributions (debug targets and processes). - * </p> - * <p> - * If the delegate contributes a source locator to the launch, that - * source locator is used. Otherwise an appropriate source locator is - * contributed to the launch based on the values of - * <code>ATTR_SOURCE_LOCATOR_ID</code> and - * <code>ATTR_SOURCE_LOCATOR_MEMENTO</code>. If the launch is cancelled (via - * the given progress monitor), the launch is removed from the launch - * manager. The launch is returned whether cancelled or not. Invoking this - * method causes the underlying launch configuration delegate to be - * instantiated (if not already). - * </p> - * @param mode the mode in which to launch, one of the mode constants - * defined by <code>ILaunchManager</code> - <code>RUN_MODE</code> or <code>DEBUG_MODE</code>. - * @param monitor progress monitor, or <code>null</code>. Since 3.0, this - * parameter is ignored. A cancellable progress monitor is provided by the Job - * framework. - * @param build whether the workspace should be built before the launch - * @return resulting launch - * @throws CoreException if an exception occurrs during the launch sequence - * @since 3.0 - */ - public ILaunch launch(String mode, IProgressMonitor monitor, boolean build) throws CoreException; - - /** - * Launches this configuration in the specified mode by delegating to - * this configuration's launch configuration delegate, and returns the - * resulting launch. - * <p> - * If this configuration's launch delegate implements - * <code>ILaunchConfigurationDelegate2</code>, the launch delegate will - * be consulted to provide a launch object for the launch, - * perform pre-launch checks, and build before the launch. - * If <code>build</code> is <code>true</code> and the associated launch - * delegate does not implement <code>ILaunchConfigurationDelegate2</code> - * an incremental workspace build will be performed before the launch - * by the debug platform. - * </p> - * <p> - * When <code>register</code> is <code>true</code>, the resulting launch object - * is registered with the launch manager before passing it to this configuration's delegate - * launch method, for contributions (debug targets and processes). When - * <code>register</code> is <code>false</code>, the launch is not registered with - * the launch manager. Clients that launch configurations without registering - * a launch should register appropiate debug event filters to intercept events - * from unregistered launches. - * </p> - * <p> - * If the delegate contributes a source locator to the launch, that - * source locator is used. Otherwise an appropriate source locator is - * contributed to the launch based on the values of - * <code>ATTR_SOURCE_LOCATOR_ID</code> and - * <code>ATTR_SOURCE_LOCATOR_MEMENTO</code>. If the launch is cancelled (via - * the given progress monitor), the launch is removed from the launch - * manager. The launch is returned whether cancelled or not. Invoking this - * method causes the underlying launch configuration delegate to be - * instantiated (if not already). - * </p> - * @param mode the mode in which to launch, one of the mode constants - * defined by <code>ILaunchManager</code> - <code>RUN_MODE</code> or <code>DEBUG_MODE</code>. - * @param monitor progress monitor, or <code>null</code>. Since 3.0, this - * parameter is ignored. A cancellable progress monitor is provided by the Job - * framework. - * @param build whether the workspace should be built before the launch - * @param register whether to register the resulting launch with the launch manager - * @return resulting launch - * @throws CoreException if an exception occurrs during the launch sequence - * @since 3.1 - */ - public ILaunch launch(String mode, IProgressMonitor monitor, boolean build, boolean register) throws CoreException; - - /** - * Returns whether this launch configuration supports the - * specified mode. This is a handle-only method. - * - * @param mode a mode in which a configuration can be launched, one of - * the mode constants defined by <code>ILaunchManager</code> - <code>RUN_MODE</code> or - * <code>DEBUG_MODE</code>. - * @return whether this launch configuration supports the - * specified mode - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>Unable to retrieve this launch configuration's type.</li> - * </ul> - */ - public boolean supportsMode(String mode) throws CoreException; - - /** - * Returns the name of this launch configuration. This is - * a handle-only method. - * - * @return the name of this launch configuration - */ - public String getName(); - - /** - * Returns the location of this launch configuration as a - * path. This is a handle-only method. - * - * @return the location of this launch configuration as a - * path - */ - public IPath getLocation(); - - /** - * Returns whether this launch configuration's underlying - * storage exists. This is a handle-only method. - * - * @return whether this launch configuration's underlying - * storage exists - */ - public boolean exists(); - - /** - * Returns the integer-valued attribute with the given name. - * Returns the given default value if the attribute is undefined. - * - * @param attributeName the name of the attribute - * @param defaultValue the value to use if no value is found - * @return the value or the default value if no value was found. - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while retrieving the attribute from - * underlying storage.</li> - * <li>An attribute with the given name exists, but does not - * have an integer value</li> - * </ul> - */ - public int getAttribute(String attributeName, int defaultValue) throws CoreException; - /** - * Returns the string-valued attribute with the given name. - * Returns the given default value if the attribute is undefined. - * - * @param attributeName the name of the attribute - * @param defaultValue the value to use if no value is found - * @return the value or the default value if no value was found. - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while retrieving the attribute from - * underlying storage.</li> - * <li>An attribute with the given name exists, but does not - * have a String value</li> - * </ul> - */ - public String getAttribute(String attributeName, String defaultValue) throws CoreException; - /** - * Returns the boolean-valued attribute with the given name. - * Returns the given default value if the attribute is undefined. - * - * @param attributeName the name of the attribute - * @param defaultValue the value to use if no value is found - * @return the value or the default value if no value was found. - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while retrieving the attribute from - * underlying storage.</li> - * <li>An attribute with the given name exists, but does not - * have a boolean value</li> - * </ul> - */ - public boolean getAttribute(String attributeName, boolean defaultValue) throws CoreException; - /** - * Returns the <code>java.util.List</code>-valued attribute with the given name. - * Returns the given default value if the attribute is undefined. - * - * @param attributeName the name of the attribute - * @param defaultValue the value to use if no value is found - * @return the value or the default value if no value was found. - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while retrieving the attribute from - * underlying storage.</li> - * <li>An attribute with the given name exists, but does not - * have a List value</li> - * </ul> - */ - public List getAttribute(String attributeName, List defaultValue) throws CoreException; - /** - * Returns the <code>java.util.Map</code>-valued attribute with the given name. - * Returns the given default value if the attribute is undefined. - * - * @param attributeName the name of the attribute - * @param defaultValue the value to use if no value is found - * @return the value or the default value if no value was found. - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while retrieving the attribute from - * underlying storage.</li> - * <li>An attribute with the given name exists, but does not - * have a Map value</li> - * </ul> - */ - public Map getAttribute(String attributeName, Map defaultValue) throws CoreException; - - /** - * Returns the file this launch configuration is stored - * in, or <code>null</code> if this configuration is stored - * locally with the workspace. This is a handle-only method. - * - * @return the file this launch configuration is stored - * in, or <code>null</code> if this configuration is stored - * locally with the workspace - */ - public IFile getFile(); - - /** - * Returns the type of this launch configuration. This is a - * handle-only method. - * - * @return the type of this launch configuration - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>Unable to retrieve or instantiate this launch configuration's type.</li> - * </ul> - * @see ILaunchConfigurationType - */ - public ILaunchConfigurationType getType() throws CoreException; - - /** - * Returns whether this launch configuration is stored - * locally with the workspace. This is a handle-only method. - * - * @return whether this launch configuration is stored - * locally with the workspace - */ - public boolean isLocal(); - - /** - * Returns a working copy of this launch configuration. - * Changes to the working copy will be applied to this - * launch configuration when saved. The working copy will - * refer to this launch configuration as its original - * launch configuration. - * - * @return a working copy of this launch configuration - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while initializing the contents of the - * working copy from this configuration's underlying storage.</li> - * </ul> - * @see ILaunchConfigurationWorkingCopy#getOriginal() - */ - public ILaunchConfigurationWorkingCopy getWorkingCopy() throws CoreException; - - /** - * Returns a copy of this launch configuration, as a - * working copy, with the specified name. The new - * working copy does not refer back to this configuration - * as its original launch configuration (the working copy - * will return <code>null</code> for <code>getOriginal()</code>). - * When the working copy is saved it will not effect this - * launch configuration. - * - * @param name the name of the copy - * @return a copy of this launch configuration - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while initializing the contents of the - * working copy from this configuration's underlying storage.</li> - * </ul> - * @see ILaunchConfigurationWorkingCopy#getOriginal() - */ - public ILaunchConfigurationWorkingCopy copy(String name) throws CoreException; - - /** - * Returns whether this launch configuration is a working - * copy. Launch configurations which return <code>true</code> - * to this method can be safely cast to - * <code>org.eclipse.debug.core.ILaunchConfigurationWorkingCopy</code>. - * This is a handle-only method. - * - * @return whether this launch configuration is a working - * copy - */ - public boolean isWorkingCopy(); - - /** - * Deletes this launch configuration. This configuration's underlying - * storage is deleted. Has no effect if this configuration - * does not exist. - * - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>An exception occurs while deleting this configuration's - * underlying storage.</li> - * </ul> - */ - public void delete() throws CoreException; - - /** - * Returns a memento for this launch configuration, or <code>null</code> - * if unable to generate a memento for this configuration. A memento - * can be used to re-create a launch configuration, via the - * launch manager. - * - * @return a memento for this configuration - * @see ILaunchManager#getLaunchConfiguration(String) - * @exception CoreException if an exception occurs generating this - * launch configuration's memento - */ - public String getMemento() throws CoreException; - - /** - * Returns whether the contents of this launch configuration are - * equal to the contents of the given launch configuration. - * - * @return whether the contents of this launch configuration are equal to the contents - * of the specified launch configuration. - */ - public boolean contentsEqual(ILaunchConfiguration configuration); - - /** - * Returns this launch configuration's type's category, or <code>null</code> - * if unspecified. This is a handle-only method. - * - * @return this launch configuration's type's category, or <code>null</code> - * @exception CoreException if this method fails. Reasons include: - * <ul> - * <li>Unable to retrieve or instantiate this launch configuration's type.</li> - * </ul> - * @since 2.1 - */ - public String getCategory() throws CoreException; - - /** - * Returns a map containing the attributes in this launch configuration. - * Returns an empty map if this configuration has no attributes. - * <p> - * Modifying the map does not affect this launch configuration's attributes. - * A launch configuration is modified by obtaining a working copy of that - * launch configuration, modifying the working copy, and then saving the working - * copy. - * </p> - * @return a map of attribute keys and values - * @exception CoreException unable to generate/retrieve an attribute map - * @since 2.1 - */ - public Map getAttributes() throws CoreException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationListener.java deleted file mode 100644 index 4f0332608..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationListener.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -/** - * Notified when a launch configuration is created, - * deleted, or changed. - * <p> - * This interface is intended to be implemented by clients. - * </p> - * @since 2.0 - */ -public interface ILaunchConfigurationListener { - - /** - * The given launch configuration has been created. - * - * @param configuration the newly created launch configuration - */ - public void launchConfigurationAdded(ILaunchConfiguration configuration); - - /** - * The given launch configuration has changed in some way. - * The configuration may be a working copy. - * - * @param configuration the launch configuration that has - * changed - */ - public void launchConfigurationChanged(ILaunchConfiguration configuration); - - /** - * The given launch configuration has been deleted. - * <p> - * The launch configuration no longer exists. Data stored - * in the configuration can no longer be accessed, however - * handle-only attributes of the launch configuration - * can be retrieved. - * </p> - * - * @param configuration the deleted launch configuration - */ - public void launchConfigurationRemoved(ILaunchConfiguration configuration); -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationType.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationType.java deleted file mode 100644 index 12f70e3ae..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationType.java +++ /dev/null @@ -1,209 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; -import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; - -/** - * Describes and creates instances of a specific type of - * launch configuration. Launch configuration types are - * defined by extensions. - * <p> - * A launch configuration type extension is defined in <code>plugin.xml</code>. - * Following is an example definition of a launch configuration - * type extension. - * <pre> - * <extension point="org.eclipse.debug.core.launchConfigurationTypes"> - * <launchConfigurationType - * id="com.example.ExampleIdentifier" - * delegate="com.example.ExampleLaunchConfigurationDelegate" - * modes="run, debug" - * name="Example Application"> - * </launchConfigurationType> - * </extension> - * </pre> - * The attributes are specified as follows: - * <ul> - * <li><code>id</code> specifies a unique identifier for this launch configuration - * type.</li> - * <li><code>delegate</code> specifies the fully qualified name of the java class - * that implements <code>ILaunchConfigurationDelegate</code>. Launch configuration - * instances of this type will delegate to instances of this class - * to perform launching.</li> - * <li><code>modes</code> specifies a comma separated list of the modes this - * type of launch configuration suports - <code>"run"</code> and/or <code>"debug"</code>.</li> - * <li><code>name</code> specifies a human readable name for this type - * of launch configuration.</li> - * <li><code>category</code> is an optional attribute that specifies a category - * for this launch configuration type. Categories are client defined. This - * attribute was added in the 2.1 release.</li> - * </ul> - * </p> - * TODO: add new attributes - sourcePathComputerId and sourceLocatorId - * <p> - * The <code>category</code> attribute has been added in release 2.1, such that other - * tools may re-use the launch configuration framework for purposes other than - * the standard running and debugging of programs under developement. Such that - * clients may access arbitrary attribtes specified in launch configuration type - * extension definitions, the method <code>getAttribute</code> has also been - * added. Launch configurations that are to be recognized as standard run/debug - * launch configurations should not specify the <code>category</code> attribute. - * </p> - * <p> - * This interface is not intended to be implemented by clients. Clients - * that define a launch configuration delegate extension implement the - * <code>ILaunchConfigurationDelegate</code> interface. - * </p> - * @see ILaunchConfiguration - * @since 2.0 - */ -public interface ILaunchConfigurationType extends IAdaptable { - - /** - * Returns whether this type of launch configuration supports - * the specified mode. - * - * @param mode a mode in which a configuration can be launched, one of - * the mode constants defined by <code>ILaunchManager</code> - <code>RUN_MODE</code> or - * <code>DEBUG_MODE</code>. - * @return whether this kind of launch configuration supports the - * specified mode - */ - public boolean supportsMode(String mode); - - /** - * Returns the name of this type of launch configuration. - * - * @return the name of this type of launch configuration - */ - public String getName(); - - /** - * Returns the unique identifier for this type of launch configuration - * - * @return the unique identifier for this type of launch configuration - */ - public String getIdentifier(); - - /** - * Returns whether this launch configuration type is public. Public configuration - * types are available for use by the user, for example, the user can create new - * configurations based on public types through the UI. Private types are not - * accessbile in this way, but are still available through the methods on - * <code>ILaunchManager</code>. - * - * @return whether this launch configuration type is public. - */ - public boolean isPublic(); - - /** - * Returns a new launch configuration working copy of this type, - * that resides in the specified container, with the given name. - * When <code>container</code> is </code>null</code>, the configuration - * will reside locally in the metadata area. - * Note: a launch configuration is not actually created until the working copy is saved. - * - * @param container the container in which the new configuration will - * reside, or <code>null</code> if the configuration should reside - * locally with the metadata. - * @param name name for the launch configuration - * @return a new launch configuration working copy instance of this type - * @exception CoreException if an instance of this type - * of launch configuration could not be created for any - * reason - */ - public ILaunchConfigurationWorkingCopy newInstance(IContainer container, String name) throws CoreException; - - /** - * Returns the launch configuration delegate for launch - * configurations of this type, for <code>run</code> mode. - * The first time this method is called, the delegate is instantiated. - * - * @return launch configuration delegate - * @exception CoreException if unable to instantiate the - * delegate - * @deprecated use <code>getDelegate(String)</code> to specify mode - */ - public ILaunchConfigurationDelegate getDelegate() throws CoreException; - - /** - * Returns the launch configuration delegate for launch - * configurations of this type, for the specified mode. The first time - * this method is called for a mode, the delegate is instantiated. - * Launch delegates may be contributed to a launch configuration type - * via the extension point <code>org.eclipse.debug.core.launchDelegates</code> - * - * @param mode launch mode - * @return launch configuration delegate - * @exception CoreException if unable to instantiate the - * delegate - * @since 3.0 - */ - public ILaunchConfigurationDelegate getDelegate(String mode) throws CoreException; - - /** - * Returns this launch configuration type's category, or <code>null</code> - * if unspecified. This corresponds to the category attribute specified in - * the extension definition. - * - * @return this launch configuration type's category, or <code>null</code> - * @since 2.1 - */ - public String getCategory(); - - /** - * Returns the attribute with the given name, as specified by this launch - * configuration type's extension definition, or <code>null</code> if - * unspecified. - * - * @param attributeName attribute name - * @return the specified extension attribute, or <code>null</code> - * @since 2.1 - */ - public String getAttribute(String attributeName); - - /** - * Returns the source path computer registered with this launch configuration - * type or <code>null</code> if unspecified. A source path computer can be - * registered with a launch configuration type in plug-in XML via the - * <code>sourcePathComputerId</code> attribute. - * - * @return the source path computer registered with this launch configuration - * type or <code>null</code> if unspecified - * @since 3.0 - */ - public ISourcePathComputer getSourcePathComputer(); - - /** - * Returns the identifier of the persistable source locator registered with - * this launch configurations type, or <code>null</code> if unspecified. - * Launch configuration types optionally specify this attribue - * in their plug-in XML via the <code>sourceLocatorId</code> attribute. - * - * @return the identifier of the persistable source locator registered with - * this launch configurations type, or <code>null</code> if unspecified - * @since 3.0 - */ - public String getSourceLocatorId(); - - /** - * Returns the identifier of the plug-in that contributes this launch configuration type. - * - * @return the identifier of the plug-in that contributes this launch configuration type - * @since 3.0 - */ - public String getPluginIdentifier(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java deleted file mode 100644 index 0fe69bb58..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java +++ /dev/null @@ -1,164 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; - -/** - * An editable copy of a launch configuration. Attributes of a - * launch configuration are modified by modifying the attributes - * of a working copy, and then saving the working copy. - * <p> - * This interface is not intended to be implemented by clients. Clients - * that define a launch configuration delegate extension implement the - * <code>ILaunchConfigurationDelegate</code> interface. - * </p> - * @see ILaunchConfiguration - * @see ILaunchConfigurationType - * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate - * @since 2.0 - */ -public interface ILaunchConfigurationWorkingCopy extends ILaunchConfiguration, IAdaptable { - - /** - * Returns whether this configuration has been modified - * since it was last saved or created. - * - * @return whether this configuration has been modified - * since it was last saved or created - */ - public boolean isDirty(); - - /** - * Saves this working copy to its underlying file and returns - * a handle to the resulting launch configuration. - * Has no effect if this configuration does not need saving. - * Creates the underlying file if not yet created. - * - * @exception CoreException if an exception occurs while - * writing this configuration to its underlying file. - */ - public ILaunchConfiguration doSave() throws CoreException; - - /** - * Sets the integer-valued attribute with the given name. - * - * @param attributeName the name of the attribute, cannot be <code>null</code> - * @param value the value - */ - public void setAttribute(String attributeName, int value); - - /** - * Sets the String-valued attribute with the given name. - * If the value is <code>null</code>, the attribute is removed from - * this launch configuration. - * - * @param attributeName the name of the attribute, cannot be <code>null</code> - * @param value the value, or <code>null</code> if the attribute is to be undefined - */ - public void setAttribute(String attributeName, String value); - - /** - * Sets the <code>java.util.List</code>-valued attribute with the given name. - * The specified List <em>must</em> contain only String-valued entries. - * If the value is <code>null</code>, the attribute is removed from - * this launch configuration. - * - * @param attributeName the name of the attribute, cannot be <code>null</code> - * @param value the value, or <code>null</code> if the attribute is to be undefined - */ - public void setAttribute(String attributeName, List value); - - /** - * Sets the <code>java.util.Map</code>-valued attribute with the given name. - * The specified Map <em>must</em> contain only String keys and String values. - * If the value is <code>null</code>, the attribute is removed from - * this launch configuration. - * - * @param attributeName the name of the attribute, cannot be <code>null</code> - * @param value the value, or <code>null</code> if the attribute is to be undefined - */ - public void setAttribute(String attributeName, Map value); - - /** - * Sets the boolean-valued attribute with the given name. - * - * @param attributeName the name of the attribute, cannot be <code>null</code> - * @param value the value - */ - public void setAttribute(String attributeName, boolean value); - - /** - * Returns the original launch configuration this working copy - * was created from, or <code>null</code> if this is a new - * working copy created from a launch configuration type. - * - * @return the original launch configuration, or <code>null</code> - */ - public ILaunchConfiguration getOriginal(); - - /** - * Renames this launch configuration to the specified name. - * The new name cannot be <code>null</code>. Has no effect if the name - * is the same as the current name. If this working copy is based - * on an existing launch configuration, this will cause - * the underlying launch configuration file to be renamed when - * this working copy is saved. - * - * @param name the new name for this configuration - */ - public void rename(String name); - - /** - * Sets the container this launch configuration will be stored - * in when saved. When set to <code>null</code>, this configuration - * will be stored locally with the workspace. The specified - * container must exist, if specified. - * <p> - * If this configuration is changed from local to non-local, - * a file will be created in the specified container when - * saved. The local file associated with this configuration - * will be deleted. - * </p> - * <p> - * If this configuration is changed from non-local to local, - * a file will be created locally when saved. - * The original file associated with this configuration in - * the workspace will be deleted. - * </p> - * - * @param container the container in which to store this - * launch configuration, or <code>null</code> if this - * configuration is to be stored locally - */ - public void setContainer(IContainer container); - - /** - * Sets the attributes of this launch configuration to be the ones contained - * in the given map. The values must be an instance of one of the following - * classes: <code>String</code>, <code>Integer</code>, or - * <code>Boolean</code>, <code>List</code>, <code>Map</code>. Attributes - * previously set on this launch configuration but not included in the given - * map are considered to be removals. Setting the given map to be - * <code>null</code> is equivalent to removing all attributes. - * - * @param attributes a map of attribute names to attribute values. - * Attribute names are not allowed to be <code>null</code> - * @since 2.1 - */ - public void setAttributes(Map attributes); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchListener.java deleted file mode 100644 index 5faa7207b..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchListener.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -/** - * A launch listener is notified of launches as they - * are added and removed from the launch manager. Also, - * when a process or debug target is added to a launch, - * listeners are notified of a change. - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.ILaunch - * @see org.eclipse.debug.core.ILaunchesListener - */ -public interface ILaunchListener { - /** - * Notifies this listener that the specified - * launch has been removed. - * - * @param launch the removed launch - * @since 2.0 - */ - public void launchRemoved(ILaunch launch); - /** - * Notifies this listener that the specified launch - * has been added. - * - * @param launch the newly added launch - * @since 2.0 - */ - public void launchAdded(ILaunch launch); - /** - * Notifies this listener that the specified launch - * has changed. For example, a process or debug target - * has been added to the launch. - * - * @param launch the changed launch - * @since 2.0 - */ - public void launchChanged(ILaunch launch); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchManager.java deleted file mode 100644 index cc399f081..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchManager.java +++ /dev/null @@ -1,421 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import java.util.Map; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IPersistableSourceLocator; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; - -/** - * The launch manager manages the set of registered launches, maintaining - * a collection of active processes and debug targets. Clients interested - * in launch notification may register with the launch manager. - * <p> - * Clients are not intended to implement this interface. - * </p> - * @see ILaunch - * @see ILaunchListener - */ -public interface ILaunchManager { - /** - * A launch in a normal, non-debug mode(value <code>"run"</code>). - */ - public static final String RUN_MODE= "run"; //$NON-NLS-1$ - /** - * A launch in a special debug mode (value <code>"debug"</code>). - */ - public static final String DEBUG_MODE= "debug"; //$NON-NLS-1$ - /** - * A launch in a special profile mode (value <code>"profile"</code>). - * @since 3.0 - */ - public static final String PROFILE_MODE= "profile"; //$NON-NLS-1$ - - /** - * Launch configuration attribute name. The value is a map of environment - * variables passed into Runtime.exec(...) when a launch configuration is launched. - * Default value is <code>null</code> which indicates the default environment - * should be used. - * - * @since 3.0 - */ - public static final String ATTR_ENVIRONMENT_VARIABLES = DebugPlugin.getUniqueIdentifier() + ".environmentVariables"; //$NON-NLS-1$ - - /** - * Launch configuration attribute name. The value is a boolean value specifying - * whether the environment variables in a launch configuration - * should be appended to the native environment (i.e. when <code>true</code>), - * or if they should replace the environment (i.e. <code>false</code>). The - * default value is <code>true</code>. - * - * @since 3.0 - */ - public static final String ATTR_APPEND_ENVIRONMENT_VARIABLES = DebugPlugin.getUniqueIdentifier() + ".appendEnvironmentVariables"; //$NON-NLS-1$ - - /** - * Adds the given listener to the collection of registered launch listeners. - * Has no effect if an identical listener is already registerd. - * - * @param listener the listener to register - */ - public void addLaunchListener(ILaunchListener listener); - /** - * Adds the given listener to the collection of registered launch listeners. - * Has no effect if an identical listener is already registerd. - * - * @param listener the listener to register - * @since 2.1 - */ - public void addLaunchListener(ILaunchesListener listener); - /** - * Removes the specified launch and notifies listeners. - * Has no effect if an identical launch is not already - * registered. - * - * @param launch the launch to remove - * @since 2.0 - */ - public void removeLaunch(ILaunch launch); - /** - * Removes the specified launch objects and notifies listeners. - * Has no effect on identical launch objects that are not already - * registered. - * - * @param launches the launch objects to remove - * @since 2.1 - */ - public void removeLaunches(ILaunch[] launches); - /** - * Returns the collection of debug targets currently registered with this - * launch manager. - * - * @return an array of debug targets - */ - public IDebugTarget[] getDebugTargets(); - /** - * Returns the collection of launches currently registered - * with this launch manager. - * - * @return an array of launches - */ - public ILaunch[] getLaunches(); - /** - * Returns the collection of processes currently registered with this - * launch manager. - * - * @return an array of processes - */ - public IProcess[] getProcesses(); - /** - * Adds the specified launch and notifies listeners. Has no - * effect if an identical launch is already registered. - * - * @param launch the launch to add - * @since 2.0 - */ - public void addLaunch(ILaunch launch); - /** - * Adds the specified launch objects and notifies listeners. Has no - * effect on identical launch objects already registered. - * - * @param launches the launch objects to add - * @since 2.1 - */ - public void addLaunches(ILaunch[] launches); - /** - * Removes the given listener from the collection of registered launch listeners. - * Has no effect if an identical listener is not already registerd. - * - * @param listener the listener to deregister - */ - public void removeLaunchListener(ILaunchListener listener); - /** - * Removes the given listener from the collection of registered launch listeners. - * Has no effect if an identical listener is not already registerd. - * - * @param listener the listener to deregister - * @since 2.1 - */ - public void removeLaunchListener(ILaunchesListener listener); - /** - * Returns all launch configurations defined in the workspace. - * - * @return all launch configurations defined in the workspace - * @exception CoreException if an exception occurs retrieving configurations - * @since 2.0 - */ - public ILaunchConfiguration[] getLaunchConfigurations() throws CoreException; - - /** - * Returns all launch configurations of the specified type defined in the workspace - * - * @param type a launch configuration type - * @return all launch configurations of the specified type defined in the workspace - * @exception CoreException if an error occurs while retreiving - * a launch configuration - * @since 2.0 - */ - public ILaunchConfiguration[] getLaunchConfigurations(ILaunchConfigurationType type) throws CoreException; - - /** - * Returns a handle to the launch configuration contained - * in the specified file. The file is not verified to exist - * or contain a launch configuration. - * - * @param file launch configuration file - * @return a handle to the launch configuration contained - * in the specified file - * @since 2.0 - */ - public ILaunchConfiguration getLaunchConfiguration(IFile file); - - /** - * Returns a handle to the launch configuration specified by - * the given memento. The configuration may not exist. - * - * @return a handle to the launch configuration specified by - * the given memento - * @exception CoreException if the given memento is invalid or - * an exception occurs parsing the memento - * @see ILaunchConfiguration#getMemento() - * @since 2.0 - */ - public ILaunchConfiguration getLaunchConfiguration(String memento) throws CoreException; - - /** - * Returns all defined launch configuration type extensions - * - * @return all defined launch configuration type extensions - * @since 2.0 - */ - public ILaunchConfigurationType[] getLaunchConfigurationTypes(); - - /** - * Returns the launch configuration type extension with the specified - * id, or <code>null</code> if it does not exist. - * - * @param id unique identifier for a launch configuration type extension - * @return the launch configuration type extension with the specified - * id, or <code>null</code> if it does not exist - * @since 2.0 - */ - public ILaunchConfigurationType getLaunchConfigurationType(String id); - - /** - * Adds the given launch configuration listener to the list - * of listeners notified when a launch configuration is - * added, removed, or changed. Has no effect if the given listener - * is already registered. - * - * @param listener launch configuration listener - * @since 2.0 - */ - public void addLaunchConfigurationListener(ILaunchConfigurationListener listener); - - /** - * Removes the given launch configuration listener from the list - * of listeners notified when a launch configuration is - * added, removed, or changed. Has no effect if the given listener - * is not already registered. - * - * @param listener launch configuration listener - * @since 2.0 - */ - public void removeLaunchConfigurationListener(ILaunchConfigurationListener listener); - - /** - * Return <code>true</code> if there is a launch configuration with the specified name, - * <code>false</code> otherwise. - * - * @param name the name of the launch configuration whose existence is being checked - * @exception CoreException if unable to retrieve existing launch configuration names - * @since 2.0 - */ - public boolean isExistingLaunchConfigurationName(String name) throws CoreException; - - /** - * Return a String that can be used as the name of a launch configuration. The name - * is guaranteed to be unique (no existing launch configurations will have this name). - * The name that is returned uses the <code>namePrefix</code> as a starting point. If - * there is no existing launch configuration with this name, then <code>namePrefix</code> - * is returned. Otherwise, the value returned consists of the specified prefix plus - * some suffix that guarantees uniqueness. - * - * @param namePrefix the String that the returned name must begin with - * @since 2.0 - */ - public String generateUniqueLaunchConfigurationNameFrom(String namePrefix); - - /** - * Creates and returns a new source locator of the specified - * type. - * - * @param identifier the identifier associated with a - * persistable source locator extension - * @return a source locator - * @exception CoreException if an exception occurs creating - * the source locator - * @since 2.0 - */ - public IPersistableSourceLocator newSourceLocator(String identifier) throws CoreException; - - /** - * When a launch configuration is created or moved, registered launch - * configuration listeners (see <code>ILaunchConfigurationListener</code>) - * are notified of an add notification for the new configuration. If the - * notification is the result of a move this method will return a handle to - * the launch configuration that the added launch configuration was moved - * from. This method returns <code>null</code> if the added launch - * configuration was not the result of a rename or move. This information is - * only available during the add notification call back - * <code>launchConfigurationAdded</code>. - * <p> - * Renaming a configuration is considered the same as moving a - * configuration. - * </p> - * - * @param addedConfiguration a launch configuration for which an add - * notification is being broadcast - * @return the launch configuration that the added launch configuration was - * moved from, or <code>null</code> if the add notification is not the - * result of a move - * @since 2.1 - */ - public ILaunchConfiguration getMovedFrom(ILaunchConfiguration addedConfiguration); - - /** - * When a launch configuration is deleted or moved, registered launch - * configuration listeners (see <code>ILaunchConfigurationListener</code>) - * are notified of a remove notification for launch configuration that has - * been deleted. If the notification is the result of a move this method - * will return a handle to the launch configuration that the removed launch - * configuration was moved to. This method returns <code>null</code> if the - * removed launch configuration was not the result of a rename or move. This - * information is only available during the add notification call back - * <code>launchConfigurationRemoved</code>. - * <p> - * Renaming a configuration is considered the same as moving a - * configuration. - * </p> - * - * @param removedConfiguration a launch configuration for which a - * remove notification is being broadcast - * @return the launch configuration that the removed launch configuration - * was moved to, or <code>null</code> if the add notification is not the - * result of a move - * @since 2.1 - */ - public ILaunchConfiguration getMovedTo(ILaunchConfiguration removedConfiguration); - - /** - * Returns all registered launch modes. - * - * @return all registered launch modes - * @since 3.0 - */ - public ILaunchMode[] getLaunchModes(); - - /** - * Returns the launch mode registered with the given mode identifier, - * or <code>null</code> if none. - * - * @param mode mode identifier - * @return launch mode or <code>null</code> - * @since 3.0 - */ - public ILaunchMode getLaunchMode(String mode); - - /** - * Returns an array of environment variables to be used when - * launching the given configuration or <code>null</code> if unspecified. - * - * @param configuration launch configuration - * @throws CoreException if unable to access associated attribute or if - * unable to resolve a variable in an environment variable's value - * @since 3.0 - */ - public String[] getEnvironment(ILaunchConfiguration configuration) throws CoreException; - - /** - * Returns a source path computer to compute a default source lookup path for - * the given launch configuration, or <code>null</code> if a source path - * computer has not been registered for the associated launch configuration - * type. - * - * @param configuration a launch configuration - * @return a source path computer registered for the associated launch - * configurations type, or <code>null</code> if unspecified - * @throws CoreException if an exception occurs while instantiating a source - * path computer - * @since 3.0 - */ - public ISourcePathComputer getSourcePathComputer(ILaunchConfiguration configuration) throws CoreException; - - /** - * Returns the source path computer extension registered with the given - * unique identifier, or <code>null</code> if none. - * - * @param id source path computer identifier - * @return the source path computer extension registered with the given - * unique identifier, or <code>null</code> if none - * @since 3.0 - */ - public ISourcePathComputer getSourcePathComputer(String id); - - /** - * Returns the native system environment variables as a map of - * variable names and values (Strings). On WIN32, - * all keys (variable names) are returned in uppercase. Note - * that WIN32's environment is not case sensitive. - * - * @return the native system environment variables - * @since 3.0 - */ - public Map getNativeEnvironment(); - - /** - * Returns all registered source container type extensions. - * - * @return all registered source container type extensions - * @since 3.0 - */ - public ISourceContainerType[] getSourceContainerTypes(); - - /** - * Returns the source container type extension registered with the - * given unique identifier, or <code>null</code> if none. - * - * @param id unique identifier of a source container type extension - * @return the source container type extension registered with the - * given unique identifier, or <code>null</code> if none - * @since 3.0 - */ - public ISourceContainerType getSourceContainerType(String id); - - /** - * Returns whether the given launch is currently registered. - * - * @param launch a launch - * @return whether the launch is currently registered - * @since 3.1 - */ - public boolean isRegistered(ILaunch launch); - -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchMode.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchMode.java deleted file mode 100644 index 265d8d3e9..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchMode.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - -/** - * A launch mode. The debug platform contributes launch modes - * for run, debug, and profile. Clients may contribute additional launch - * modes in plug-in XML via the <code>launchModes</code> extension point. - * <p> - * Following is an example launch mode contribution for profiling. A launch - * mode has an unique identifer specified by the <code>mode</code> attribute - * and a human readable label specified by the <code>label</code> attribute. - * <pre> - * <extension point="org.eclipse.debug.core.launchModes"> - * <launchMode - * mode="profile" - * label="Profile"> - * </launchMode> - * </extension> - * </pre> - * </p> - * <p> - * Clients are not intended to implement this interface. - * </p> - * @since 3.0 - */ -public interface ILaunchMode { - - /** - * Returns the unique identifier for this launch mode. - * - * @return the unique identifier for this launch mode - */ - public String getIdentifier(); - - /** - * Returns a human readable label for this launch mode. - * - * @return a human readable label for this launch mode - */ - public String getLabel(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchesListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchesListener.java deleted file mode 100644 index 1e5b9812e..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchesListener.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -/** - * A launches listener is notified of launches as they - * are added and removed from the launch manager. Also, - * when a process or debug target is added to a launch, - * listeners are notified of a change. - * <p> - * This interface is analagous to <code>ILaunchListerner</code>, except - * notifications are batched to include more than one launch object - * when possible. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.ILaunch - * @see org.eclipse.debug.core.ILaunchManager - * @since 2.1 - */ -public interface ILaunchesListener { - /** - * Notifies this listener that the specified - * launches have been removed. - * - * @param launches the removed launch objects - */ - public void launchesRemoved(ILaunch[] launches); - /** - * Notifies this listener that the specified launches - * have been added. - * - * @param launches the newly added launch objects - */ - public void launchesAdded(ILaunch[] launches); - /** - * Notifies this listener that the specified launches - * have changed. For example, a process or debug target - * has been added to a launch. - * - * @param launches the changed launch object - */ - public void launchesChanged(ILaunch[] launches); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchesListener2.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchesListener2.java deleted file mode 100644 index 38dfc0924..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchesListener2.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - -/** - * Enhancements to the launches listener interface. Provides notification - * when one or more launches terminate. - * <p> - * Clients implementing launches listener may implement - * this interface. - * </p> - * @since 3.0 - */ -public interface ILaunchesListener2 extends ILaunchesListener { - - /** - * Notification that the given launches have terminated. - * - * @param launches the launches that have terminated - */ - public void launchesTerminated(ILaunch[] launches); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILogicalStructureType.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/ILogicalStructureType.java deleted file mode 100644 index 93a4075f0..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/ILogicalStructureType.java +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - -import org.eclipse.debug.core.model.ILogicalStructureTypeDelegate; -import org.eclipse.debug.core.model.ILogicalStructureTypeDelegate2; - -/** - * Provides a value representing the logical structure of a raw implementation value - * from a debug model. Logical structures are useful for navigating complex data - * structures. Logical structure types are contributed via extensions in plug-in XML, - * and provide a delegate for performing logical value computation. Logical - * structure types can be retrieved from the <code>DebugPlugin</code>. - * <p> - * Following is example plug-in XML to define a logical structure type. - * </p> - * <pre> - * <extension point="org.eclipse.debug.core.logicalStructureTypes"> - * <logicalStructureType - * id="com.example.ExampleLogicalStructure" - * class="com.example.ExampleLogicalStructureDelegate" - * modelIdentifier="com.example.debug.model" - * description="Ordered Collection"> - * </logicalStructureType> - * </extension> - * </pre> - * <p> - * The attributes are specified as follows: - * <ul> - * <li>id - unique identifier for this logical structure type</li> - * <li>class - fully qualified name of class that implements - * <code>ILogicalStructureTypeDelegate</code></li> - * <li>modelIdentifier - identifier of the debug model this logical structure - * type is associated with</li> - * <li>description - description of the logical structure provided</li> - * </ul> - * </p> - * <p> - * Clients are not intended to implement this interface. Instead clients - * providing logical strucutre types provide and implement an - * <code>ILogicalStructureTypeDelegate</code>. Clients may optionally implement - * <code>ILogicalStructureTypeDelegate2</code> to provide dynamic descriptions - * of logical structures. - * </p> - * @since 3.0 - * @see org.eclipse.debug.core.model.ILogicalStructureTypeDelegate - */ -public interface ILogicalStructureType extends ILogicalStructureTypeDelegate, ILogicalStructureTypeDelegate2 { - - /** - * Returns a simple description of the logical structure provided by this - * structure type. - * <p> - * Since 3.1, this method can return <code>null</code> if this logical structure - * type's delegate implements <code>ILogicalStructureTypeDelegate2</code>. - * </p> - * - * @return a simple description of the logical structure provided by this - * structure type, possibly <code>null</code> - */ - public String getDescription(); - - /** - * Returns this logical structure type's unique identifier, as defined - * in plug-in XML. - * - * @return this logical structure type's unique identifier - */ - public String getId(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IMemoryBlockListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IMemoryBlockListener.java deleted file mode 100644 index 9afbde6c5..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IMemoryBlockListener.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.core; - -import org.eclipse.debug.core.model.IMemoryBlock; - -/** - * A memory block listener is notified of the addition and removal - * of memory blocks with the memory block manager. Listeners must - * register with the memory block manager for notification. - * <p> - * Clients may implement this interface. - * </p> - * @since 3.1 - */ -public interface IMemoryBlockListener { - - /** - * Notification the given memory blocks ahve been added to the - * memory block manager. - * - * @param memory blocks added to the memory block manager - */ - void memoryBlocksAdded(IMemoryBlock[] memory); - - /** - * Notification the given memory blocks have been removed from - * the memory block manager. - * - * @param memory blocks removed from the memory block manager - */ - void memoryBlocksRemoved(IMemoryBlock[] memory); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IMemoryBlockManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IMemoryBlockManager.java deleted file mode 100644 index 862a2ef3f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IMemoryBlockManager.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.core; - -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IMemoryBlock; -import org.eclipse.debug.core.model.IMemoryBlockRetrieval; - - -/** - * Manages registered memory blocks in the workspace. Clients - * interested in notification of the addition and removal of - * memory blocks may register as a memory block listener with - * the memory block manager. - * <p> - * This interface is not intended to be implemented by clients. - * </p> - * @see org.eclipse.debug.core.model.IMemoryBlock - * @see org.eclipse.debug.core.IMemoryBlockListener - * @since 3.1 - */ -public interface IMemoryBlockManager { - - /** - * Adds the given memory blocks to the memory block manager. - * Registered memory block listeners are notified of the additions. - * Has no effect on memory blocks that are already registered. - * - * @param memoryBlocks memory blocks to add - */ - public void addMemoryBlocks(IMemoryBlock[] memoryBlocks); - - /** - * Removes the given memory blocks from the memory block manager. - * Registered memory block listeners are notified of the removals. - * Has no effect on memory blocks that are not currently registered. - * - * @param memoryBlocks memory blocks to remove - */ - public void removeMemoryBlocks(IMemoryBlock[] memoryBlocks); - - /** - * Registers the given listener for memory block addition and - * removal notification. Has no effect if an identical listener - * is already registered. - * - * @param listener the listener to add - */ - public void addListener(IMemoryBlockListener listener); - - /** - * Deregisters the givem listener for memory block addition and - * removal notficiation. Has no effect if an identical listener - * is not already registered. - * - * @param listener the listener to remove - */ - public void removeListener(IMemoryBlockListener listener); - - /** - * Returns all registered memory blocks. - * - * @return all registered memory blocks - */ - public IMemoryBlock[] getMemoryBlocks(); - - /** - * Returns all registered memory blocks assocaited with the - * given debug target. That is, all registered memory blocks - * whose <code>getDebugTarget()</code> method returns the - * specified debug target. - * - * @param debugTarget target for which memory blocks have been requested - * @return all registered memory blocks associated with the given debug - * target - */ - public IMemoryBlock[] getMemoryBlocks(IDebugTarget debugTarget); - - /** - * Returns all registered memory blocks that originated from the - * given memory retrieval source. - * - * @param source source for which memory blocks have been requested - * @return all registered memory blocks that originated from the - * given memory retrieval source - */ - public IMemoryBlock[] getMemoryBlocks(IMemoryBlockRetrieval source); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IProcessFactory.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IProcessFactory.java deleted file mode 100644 index 8cf8e3521..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IProcessFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - -import java.util.Map; - -import org.eclipse.debug.core.model.IProcess; - -/** - * A process factory is used to override default process (<code>IProcess</code>) - * creation by the debug plug-in, and can be contributed via plug-in XML. When a - * new process is created via <code>DebugPlugin.newProcess(..)</code>, the - * launch configuration associated with the specified launch is consulted for - * a process factory attribute (<code>ATTR_PROCESS_FACTORY_ID</code>). If - * present, the associated process factory is consulted to create a process for - * the launch. If not present a default process implementation is created and - * returned by the debug plug-in. - * <p> - * Following is example plug-in XML that contributes a process factory. - * <pre> - * <extension point="org.eclipse.debug.core.processFactories"> - * <processFactory - * id="com.example.ExampleIdentifier" - * class="com.example.ExampleProcessFactory"> - * </processFactory> - * </extension> - * </pre> - * The attributes are specified as follows: - * <ul> - * <li>id - a unique identifier for this extension point</li> - * <li>class - the fully qualified name of a class the implements - * <code>IProcessFactory</code></li> - * </ul> - * </p> - * @since 3.0 - */ - -public interface IProcessFactory { - - /** - * Creates and returns a new process representing the given - * <code>java.lang.Process</code>. A streams proxy is created - * for the I/O streams in the system process. The process - * is added to the given launch, and the process is initialized - * with the given attribute map. - * - * @param launch the launch the process is contained in - * @param process the system process to wrap - * @param label the label assigned to the process - * @param attributes initial values for the attribute map - * @return the process - * @see IProcess - */ - public IProcess newProcess(ILaunch launch, Process process, String label, Map attributes); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IStatusHandler.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IStatusHandler.java deleted file mode 100644 index fd7af0b64..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IStatusHandler.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; - -/** - * A status handler registers to handle a specific status - error - * or otherwise. Provides a mechanism for separating core (headless) - * function from UI interaction. The debug plug-in provides a - * status handlers extension point, against which handlers can - * register for specific status codes - identified by plug-in - * identifier and plug-in specific status code. The interaction between - * an object requiring a status handler (source), and the status handler - * is defined by the source and handler. - * <p> - * For example, a launch configuration delegate might encounter a timeout - * while launching an application. In this case the delegate could abort - * or, via the use of a status handler, prompt the user to continue. This - * allows the launcher to be implemented in a plug-in that does not require - * UI support, and allows another (UI) plug-in to register a handler. - * </p> - * <p> - * A status handler extension is defined in <code>plugin.xml</code>. - * Following is an example definition of a status handler extension. - * <pre> - * <extension point="org.eclipse.debug.core.statusHandlers"> - * <statusHandler - * id="com.example.ExampleIdentifier" - * class="com.example.ExampleStatusHandler" - * plugin="com.example.ExamplePluginId" - * code="123"> - * </statusHandler> - * </extension> - * </pre> - * The attributes are specified as follows: - * <ul> - * <li><code>id</code> specifies a unique identifier for this status handler.</li> - * <li><code>class</code> specifies the fully qualified name of the Java class - * that implements <code>IStatusHandler</code>.</li> - * <li><code>plugin</code> plug-in identifier that corresponds to the - * plug-in of the status this handler is registered for (i.e. - * <code>IStatus.getPlugin()</code>).</li> - * <li><code>code</code> specifies the status code this handler - * is registered for.</li> - * </ul> - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see DebugPlugin#getStatusHandler(IStatus) - * @since 2.0 - */ - -public interface IStatusHandler { - - /** - * Notifies this status handler that the given status has been - * generated by the specified source object and requires resolution. - * - * @param status the status to handle - * @param source the object delegating to this status handler - * the given status - * @return an object representing the resolution of the status - * @exception CoreException if unable to resolve the status - */ - public Object handleStatus(IStatus status, Object source) throws CoreException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/IStreamListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/IStreamListener.java deleted file mode 100644 index c9bd1b7f3..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/IStreamListener.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import org.eclipse.debug.core.model.IStreamMonitor; - -/** - * A stream listener is notified of changes - * to a stream monitor. - * <p> - * Clients may implement this interface. - * </p> - * @see IStreamMonitor - */ -public interface IStreamListener { - /** - * Notifies this listener that text has been appended to - * the given stream monitor. - * - * @param text the appended text - * @param monitor the stream monitor to which text was appended - */ - public void streamAppended(String text, IStreamMonitor monitor); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/Launch.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/Launch.java deleted file mode 100644 index 2c7f868c3..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/Launch.java +++ /dev/null @@ -1,544 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core; - - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IDisconnect; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.core.model.ISourceLocator; -import org.eclipse.debug.internal.core.DebugCoreMessages; -import org.eclipse.debug.internal.core.LaunchManager; - -/** - * A launch is the result of launching a debug session - * and/or one or more system processes. This class provides - * a public implementation of <code>ILaunch</code> for client - * use. - * <p> - * Clients may instantiate this class. Clients may subclass this class. - * Many of the methods in this class that are part of the <code>ILaunch</code> interface - * are final. Clients that subclass this class are not intended to change the behavior - * or implementation of the provided methods. Subclassing is only intended - * to add additional information to a specific launch. For example, a client that - * implements a launch object representing a Java launch might store a classpath - * with the launch. - * </p> - * @see ILaunch - * @see ILaunchManager - */ - -public class Launch extends PlatformObject implements ILaunch, IDisconnect, ILaunchListener, ILaunchConfigurationListener, IDebugEventSetListener { - - /** - * The debug targets associated with this - * launch (the primary target is the first one - * in this collection), or empty if - * there are no debug targets. - */ - private List fTargets= new ArrayList(); - - /** - * The configuration that was launched, or null. - */ - private ILaunchConfiguration fConfiguration= null; - - /** - * The system processes associated with - * this launch, or empty if none. - */ - private List fProcesses= new ArrayList(); - - /** - * The source locator to use in the debug session - * or <code>null</code> if not supported. - */ - private ISourceLocator fLocator= null; - - /** - * The mode this launch was launched in. - */ - private String fMode; - - /** - * Table of client defined attributes - */ - private HashMap fAttributes; - - /** - * Flag indiating that change notification should - * be suppressed. <code>true</code> until this - * launch has been initialzied. - */ - private boolean fSuppressChange = true; - - /** - * Constructs a launch with the specified attributes. - * - * @param launchConfiguration the configuration that was launched - * @param mode the mode of this launch - run or debug (constants - * defined by <code>ILaunchManager</code>) - * @param locator the source locator to use for this debug session, or - * <code>null</code> if not supported - */ - public Launch(ILaunchConfiguration launchConfiguration, String mode, ISourceLocator locator) { - setLaunchConfiguration(launchConfiguration); - setSourceLocator(locator); - setLaunchMode(mode); - fSuppressChange = false; - getLaunchManager().addLaunchListener(this); - getLaunchManager().addLaunchConfigurationListener(this); - DebugPlugin.getDefault().addDebugEventListener(this); - } - - /** - * @see org.eclipse.debug.core.model.ITerminate#canTerminate() - */ - public final boolean canTerminate() { - List processes = getProcesses0(); - for (int i = 0; i < processes.size(); i++) { - IProcess process = (IProcess)processes.get(i); - if (process.canTerminate()) { - return true; - } - } - List targets = getDebugTargets0(); - for (int i = 0; i < targets.size(); i++) { - IDebugTarget target = (IDebugTarget)targets.get(i); - if (target.canTerminate() || target.canDisconnect()) { - return true; - } - } - return false; - } - - /** - * @see ILaunch#getChildren() - */ - public final Object[] getChildren() { - ArrayList children = new ArrayList(getDebugTargets0()); - children.addAll(getProcesses0()); - return children.toArray(); - } - - /** - * @see ILaunch#getDebugTarget() - */ - public final IDebugTarget getDebugTarget() { - if (!getDebugTargets0().isEmpty()) { - return (IDebugTarget)getDebugTargets0().get(0); - } - return null; - } - - /** - * Sets the configuration that was launched - * - * @param configuration the configuration that was launched - */ - private void setLaunchConfiguration(ILaunchConfiguration configuration) { - fConfiguration = configuration; - } - - /** - * @see ILaunch#getProcesses() - */ - public final IProcess[] getProcesses() { - return (IProcess[])getProcesses0().toArray(new IProcess[getProcesses0().size()]); - } - - /** - * Returns the processes associated with this - * launch, in its internal form - a list. - * - * @return list of processes - */ - protected List getProcesses0() { - return fProcesses; - } - - /** - * @see ILaunch#getSourceLocator() - */ - public final ISourceLocator getSourceLocator() { - return fLocator; - } - - /** - * @see ILaunch#setSourceLocator(ISourceLocator) - */ - public final void setSourceLocator(ISourceLocator sourceLocator) { - fLocator = sourceLocator; - } - - /** - * @see org.eclipse.debug.core.model.ITerminate#isTerminated() - */ - public final boolean isTerminated() { - if (getProcesses0().isEmpty() && getDebugTargets0().isEmpty()) { - return false; - } - - Iterator processes = getProcesses0().iterator(); - while (processes.hasNext()) { - IProcess process = (IProcess)processes.next(); - if (!process.isTerminated()) { - return false; - } - } - - Iterator targets = getDebugTargets0().iterator(); - while (targets.hasNext()) { - IDebugTarget target = (IDebugTarget)targets.next(); - if (!(target.isTerminated() || target.isDisconnected())) { - return false; - } - } - - return true; - } - - /** - * @see org.eclipse.debug.core.model.ITerminate#terminate() - */ - public final void terminate() throws DebugException { - MultiStatus status= - new MultiStatus(DebugPlugin.getUniqueIdentifier(), DebugException.REQUEST_FAILED, DebugCoreMessages.getString("Launch.terminate_failed"), null); //$NON-NLS-1$ - - // terminate the system processes - IProcess[] processes = getProcesses(); - for (int i = 0; i < processes.length; i++) { - IProcess process = processes[i]; - if (process.canTerminate()) { - try { - process.terminate(); - } catch (DebugException e) { - status.merge(e.getStatus()); - } - } - } - - // terminate or disconnect debug target if it is still alive - IDebugTarget[] targets = getDebugTargets(); - for (int i = 0; i < targets.length; i++) { - IDebugTarget target= targets[i]; - if (target != null) { - if (target.canTerminate()) { - try { - target.terminate(); - } catch (DebugException e) { - status.merge(e.getStatus()); - } - } else { - if (target.canDisconnect()) { - try { - target.disconnect(); - } catch (DebugException de) { - status.merge(de.getStatus()); - } - } - } - } - } - if (status.isOK()) { - return; - } - IStatus[] children= status.getChildren(); - if (children.length == 1) { - throw new DebugException(children[0]); - } - throw new DebugException(status); - } - - /** - * @see ILaunch#getLaunchMode() - */ - public final String getLaunchMode() { - return fMode; - } - - /** - * Sets the mode in which this launch was - * launched. - * - * @param mode the mode in which this launch - * was launched - one of the constants defined - * by <code>ILaunchManager</code>. - */ - private void setLaunchMode(String mode) { - fMode = mode; - } - - /** - * @see ILaunch#getLaunchConfiguration() - */ - public ILaunchConfiguration getLaunchConfiguration() { - return fConfiguration; - } - - /** - * @see ILaunch#setAttribute(String, String) - */ - public void setAttribute(String key, String value) { - if (fAttributes == null) { - fAttributes = new HashMap(5); - } - fAttributes.put(key, value); - } - - /** - * @see ILaunch#getAttribute(String) - */ - public String getAttribute(String key) { - if (fAttributes == null) { - return null; - } - return (String)fAttributes.get(key); - } - - /** - * @see ILaunch#getDebugTargets() - */ - public IDebugTarget[] getDebugTargets() { - return (IDebugTarget[])fTargets.toArray(new IDebugTarget[fTargets.size()]); - } - - /** - * Returns the debug targets associated with this - * launch, in its internal form - a list - * - * @return list of debug targets - */ - protected List getDebugTargets0() { - return fTargets; - } - - /** - * @see ILaunch#addDebugTarget(IDebugTarget) - */ - public final void addDebugTarget(IDebugTarget target) { - if (target != null) { - if (!getDebugTargets0().contains(target)) { - getDebugTargets0().add(target); - fireChanged(); - } - } - } - - /** - * @see ILaunch#removeDebugTarget(IDebugTarget) - */ - public final void removeDebugTarget(IDebugTarget target) { - if (target != null) { - if (getDebugTargets0().remove(target)) { - fireChanged(); - } - } - } - - /** - * @see ILaunch#addProcess(IProcess) - */ - public final void addProcess(IProcess process) { - if (process != null) { - if (!getProcesses0().contains(process)) { - getProcesses0().add(process); - fireChanged(); - } - } - } - - /** - * @see ILaunch#removeProcess(IProcess) - */ - public final void removeProcess(IProcess process) { - if (process != null) { - if (getProcesses0().remove(process)) { - fireChanged(); - } - } - } - - /** - * Adds the given processes to this launch. - * - * @param processes processes to add - */ - protected void addProcesses(IProcess[] processes) { - if (processes != null) { - for (int i = 0; i < processes.length; i++) { - addProcess(processes[i]); - fireChanged(); - } - } - } - - /** - * Notifies listeners that this launch has changed. - * Has no effect of this launch has not yet been - * properly created/initialized. - */ - protected void fireChanged() { - if (!fSuppressChange) { - ((LaunchManager)getLaunchManager()).fireUpdate(this, LaunchManager.CHANGED); - ((LaunchManager)getLaunchManager()).fireUpdate(new ILaunch[] {this}, LaunchManager.CHANGED); - } - } - - /** - * Notifies listeners that this launch has terminated. - * Has no effect of this launch has not yet been - * properly created/initialized. - */ - protected void fireTerminate() { - if (!fSuppressChange) { - ((LaunchManager)getLaunchManager()).fireUpdate(this, LaunchManager.TERMINATE); - ((LaunchManager)getLaunchManager()).fireUpdate(new ILaunch[] {this}, LaunchManager.TERMINATE); - } - } - - /** - * @see ILaunch#hasChildren() - */ - public boolean hasChildren() { - return getProcesses0().size() > 0 || (getDebugTargets0().size() > 0); - } - - /** - * @see org.eclipse.debug.core.model.IDisconnect#canDisconnect() - */ - public boolean canDisconnect() { - if (getDebugTargets0().size() == 1) { - return getDebugTarget().canDisconnect(); - } - return false; - } - - /** - * @see org.eclipse.debug.core.model.IDisconnect#disconnect() - */ - public void disconnect() throws DebugException { - if (getDebugTargets0().size() == 1) { - getDebugTarget().disconnect(); - } - } - - /** - * @see org.eclipse.debug.core.model.IDisconnect#isDisconnected() - */ - public boolean isDisconnected() { - if (getDebugTargets0().size() == 1) { - getDebugTarget().isDisconnected(); - } - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchListener#launchRemoved(org.eclipse.debug.core.ILaunch) - */ - public void launchRemoved(ILaunch launch) { - if (this.equals(launch)) { - getLaunchManager().removeLaunchListener(this); - getLaunchManager().removeLaunchConfigurationListener(this); - DebugPlugin.getDefault().removeDebugEventListener(this); - } - } - - /** - * Returns the launch manager. - * - * @return the launch manager. - */ - protected ILaunchManager getLaunchManager() { - return DebugPlugin.getDefault().getLaunchManager(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchListener#launchAdded(org.eclipse.debug.core.ILaunch) - */ - public void launchAdded(ILaunch launch) { - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchListener#launchChanged(org.eclipse.debug.core.ILaunch) - */ - public void launchChanged(ILaunch launch) { - } - - /* (non-Javadoc) - * - * If the launch configuration this launch is associated with is - * moved, update the underlying handle to the new location. - * - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationAdded(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationAdded(ILaunchConfiguration configuration) { - ILaunchConfiguration from = getLaunchManager().getMovedFrom(configuration); - if (from != null && from.equals(getLaunchConfiguration())) { - setLaunchConfiguration(configuration); - fireChanged(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationChanged(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationChanged(ILaunchConfiguration configuration) { - } - - /* (non-Javadoc) - * - * Update the launch configuration associated with this launch if the - * underlying configuration is deleted. - * - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationRemoved(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationRemoved(ILaunchConfiguration configuration) { - if (configuration.equals(getLaunchConfiguration())) { - if (getLaunchManager().getMovedTo(configuration) == null) { - setLaunchConfiguration(null); - fireChanged(); - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - if (event.getKind() == DebugEvent.TERMINATE) { - Object object = event.getSource(); - ILaunch launch = null; - if (object instanceof IProcess) { - launch = ((IProcess)object).getLaunch(); - } else if (object instanceof IDebugTarget) { - launch = ((IDebugTarget)object).getLaunch(); - } - if (this.equals(launch)) { - if (isTerminated()) { - fireTerminate(); - } - } - } - } - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java deleted file mode 100644 index c542a7afe..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java +++ /dev/null @@ -1,357 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import java.util.Map; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceRuleFactory; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IBreakpointManager; -import org.eclipse.debug.internal.core.DebugCoreMessages; - -/** - * Abstract implementation of a breakpoint. This class is - * intended to be subclassed by implementations - * of breakpoints. - * - * @see IBreakpoint - * @since 2.0 - */ - -public abstract class Breakpoint extends PlatformObject implements IBreakpoint { - - static { - // making sure that the BreakpointManager is correctly initialized - // before any breakpoint marker related operation (see bug 54993) - DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(); - } - - /** - * Underlying marker. - */ - private IMarker fMarker= null; - - /** - * @see IBreakpoint#setMarker(IMarker) - */ - public void setMarker(IMarker marker) throws CoreException { - fMarker= marker; - } - - /** - * @see Object#equals(Object) - */ - public boolean equals(Object item) { - if (item instanceof IBreakpoint) { - return getMarker().equals(((IBreakpoint)item).getMarker()); - } - return false; - } - - /** - * @see Object#hashCode() - */ - public int hashCode() { - return getMarker().hashCode(); - } - - /** - * @see IBreakpoint#setEnabled(boolean) - */ - public void setEnabled(boolean enabled) throws CoreException { - if (enabled != isEnabled()) { - setAttribute(ENABLED, enabled); - } - } - - /** - * @see IBreakpoint#isEnabled() - */ - public boolean isEnabled() throws CoreException { - return getMarker().getAttribute(ENABLED, false); - } - - /** - * @see IBreakpoint#isRegistered() - */ - public boolean isRegistered() throws CoreException { - IMarker marker= getMarker(); - return marker.exists() && marker.getAttribute(REGISTERED, true); - } - - /** - * @see IBreakpoint#setRegistered(boolean) - */ - public void setRegistered(boolean registered) throws CoreException { - if (isRegistered() != registered) { - setAttribute(REGISTERED, registered); - IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager(); - if (registered) { - mgr.addBreakpoint(this); - } else { - mgr.removeBreakpoint(this, false); - } - } - } - - /** - * @see IBreakpoint#delete() - */ - public void delete() throws CoreException { - DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint(this, false); - getMarker().delete(); - } - - /** - * @see IBreakpoint#getMarker() - */ - public IMarker getMarker() { - return fMarker; - } - - /** - * @see IBreakpoint#isPersisted() - */ - public boolean isPersisted() throws CoreException { - return getMarker().getAttribute(PERSISTED, true); - } - - /** - * @see IBreakpoint#setPersisted(boolean) - */ - public void setPersisted(boolean persisted) throws CoreException { - if (isPersisted() != persisted) { - setAttributes(new String[] {PERSISTED, IMarker.TRANSIENT}, new Object[] {new Boolean(persisted), new Boolean(!persisted)}); - } - } - - /** - * @see IBreakpoint#getGroup() - */ - public String getGroup() throws CoreException { - return getMarker().getAttribute(GROUP, null); - } - - /** - * @see IBreakpoint#setGroup(String) - */ - public void setGroup(String group) throws CoreException { - if (group != null && group.length() == 0) { - group= null; - } - setAttribute(GROUP, group); - } - - /** - * Convenience method to set the given boolean attribute of - * this breakpoint's underlying marker in a workspace - * runnable. Setting marker attributes in a workspace runnable - * prevents deadlock. - * - * @param attributeName attribute name - * @param value attribute value - * @exception CoreException is setting the attribute fails - * @see IMarker#setAttribute(java.lang.String, boolean) - */ - protected void setAttribute(final String attributeName, final boolean value) throws CoreException { - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceRunnable runnable= new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - ensureMarker().setAttribute(attributeName, value); - } - }; - - workspace.run(runnable, getMarkerRule(), 0, null); - } - - /** - * Convenience method to set the given integer attribute of - * this breakpoint's underlying marker in a workspace - * runnable. Setting marker attributes in a workspace runnable - * prevents deadlock. - * - * @param attributeName attribute name - * @param value attribute value - * @exception CoreException is setting the attribute fails - * @see IMarker#setAttribute(java.lang.String, int) - */ - protected void setAttribute(final String attributeName, final int value) throws CoreException { - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceRunnable runnable= new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - ensureMarker().setAttribute(attributeName, value); - } - }; - - workspace.run(runnable, getMarkerRule(), 0, null); - } - - /** - * Convenience method to set the given attribute of - * this breakpoint's underlying marker in a workspace - * runnable. Setting marker attributes in a workspace runnable - * prevents deadlock. - * - * @param attributeName attribute name - * @param value attribute value - * @exception CoreException is setting the attribute fails - * @see IMarker#setAttribute(java.lang.String, java.lang.Object) - */ - protected void setAttribute(final String attributeName, final Object value) throws CoreException { - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceRunnable runnable= new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - ensureMarker().setAttribute(attributeName, value); - } - }; - - workspace.run(runnable, getMarkerRule(), 0, null); - } - - /** - * Convenience method to set the given attributes of - * this breakpoint's underlying marker in a workspace - * runnable. Setting marker attributes in a workspace runnable - * prevents deadlock. - * - * @param attributeNames attribute names - * @param values attribute values - * @exception CoreException is setting the attributes fails - * @see IMarker#setAttributes(java.lang.String[], java.lang.Object[]) - */ - protected void setAttributes(final String[] attributeNames, final Object[] values) throws CoreException { - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceRunnable runnable= new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - ensureMarker().setAttributes(attributeNames, values); - } - }; - - workspace.run(runnable, getMarkerRule(), 0, null); - } - - /** - * Convenience method to set the attributes of - * this breakpoint's underlying marker in a workspace - * runnable. Setting marker attributes in a workspace runnable - * prevents deadlock. - * - * @param attributes attribute map - * @exception CoreException is setting the attributes fails - * @see IMarker#setAttributes(java.util.Map) - */ - protected void setAttributes(final Map attributes) throws CoreException{ - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceRunnable runnable= new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - ensureMarker().setAttributes(attributes); - } - }; - - workspace.run(runnable, getMarkerRule(), 0, null); - } - - /** - * Returns the marker associated with this breakpoint. - * - * @return breakpoint marker - * @exception DebugException if no marker is associated with - * this breakpoint or the associated marker does not exist - */ - protected IMarker ensureMarker() throws DebugException { - IMarker m = getMarker(); - if (m == null || !m.exists()) { - throw new DebugException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugException.REQUEST_FAILED, - DebugCoreMessages.getString("Breakpoint.no_associated_marker"), null)); //$NON-NLS-1$ - } - return m; - } - - /** - * Returns whether this breakpoint has an associated marker that exists. - * - * @return returns whether this breakpoint has an associated marker that exists - * @since 2.1 - */ - protected boolean markerExists() { - IMarker m = getMarker(); - return (m != null && m.exists()); - } - - /** - * Returns a scheduling rule to use when modifying markers on the given resource, - * possibly <code>null</code>. - * - * @param resource a resource on which a marker will be created, modified, or deleted - * @return a scheduling rule to use when modifying markers on the given resource - * possibly <code>null</code> - * @since 3.1 - */ - protected ISchedulingRule getMarkerRule(IResource resource) { - ISchedulingRule rule = null; - if (resource != null) { - IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory(); - rule = ruleFactory.markerRule(resource); - } - return rule; - } - - /** - * Returns a scheduling rule to use when modifying or deleting this breakpoint's marker, - * possibly <code>null</code>. This method is only valid when this breakpoint's - * marker has already been created. When creating a marker on a specific resource, - * use <code>getMarkerRule(IResource)</code> instead. - * - * @return a scheduling rule to use when modifying or deleting this breakpoint's marker - * @since 3.1 - */ - protected ISchedulingRule getMarkerRule() { - ISchedulingRule rule = null; - IMarker marker = getMarker(); - if (marker != null) { - IResource resource = marker.getResource(); - if (resource != null) { - IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory(); - rule = ruleFactory.markerRule(resource); - } - } - return rule; - } - - /** - * Execute the given workspace runnable with the scheduling rule to use when running the operation. - * - * @param rule the rule to use when running the operation - * @param wr the runnable operation - * @throws DebugException If a core exception occurs performing the operation - * @since 3.1 - */ - protected void run(ISchedulingRule rule, IWorkspaceRunnable wr) throws DebugException { - try { - ResourcesPlugin.getWorkspace().run(wr, rule, 0, null); - } catch (CoreException e) { - throw new DebugException(e.getStatus()); - } - } -}
\ No newline at end of file diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IBreakpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IBreakpoint.java deleted file mode 100644 index dacbbb046..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IBreakpoint.java +++ /dev/null @@ -1,251 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.DebugPlugin; - -/** - * A breakpoint is capable of suspending the execution of a - * program at a specific location when a program is running - * in debug mode. Each breakpoint has an associated marker which - * stores and persists all attributes associated with a breakpoint. - * <p> - * A breakpoint is defined in two parts: - * <ol> - * <li>By an extension of kind <code>"org.eclipse.debug.core.breakpoints"</code></li> - * <li>By a marker definition that corresponds to the above breakpoint extension</li> - * </ol> - * <p> - * For example, following is a definition of corresponding breakpoint - * and breakpoint marker definitions. Note that the <code>markerType</code> - * attribute defined by the breakpoint extension corresponds to the - * type of the marker definition. - * <pre> - * <extension point="org.eclipse.debug.core.breakpoints"> - * <breakpoint - * id="com.example.Breakpoint" - * class="com.example.Breakpoint" - * markerType="com.example.BreakpointMarker"> - * </breakpoint> - * </extension> - * <extension point="org.eclipse.core.resources.markers"> - * <marker - * id="com.example.BreakpointMarker" - * super type="org.eclipse.debug.core.breakpointMarker" - * attribute name ="exampleAttribute"> - * </marker> - * </extension> - * </pre> - * <p> - * The breakpoint manager instantiates persisted breakpoints by - * traversing all markers that are a subtype of - * <code>"org.eclipse.debug.core.breakpointMarker"</code>, and - * instantiating the class defined by the <code>class</code> attribute - * on the associated breakpoint extension. The method <code>setMarker</code> - * is then called to associate a marker with the breakpoint. - * </p> - * <p> - * Breakpoints may or may not be registered with the breakpoint manager, and - * are persisted and restored as such. Since marker definitions only allow - * all or none of a specific marker type to be persisted, breakpoints define - * a <code>PERSISTED</code> attribute for selective persistence of breakpoints - * of the same type. - * </p> - * - * @since 2.0 - */ - -public interface IBreakpoint extends IAdaptable { - - /** - * Root breakpoint marker type - * (value <code>"org.eclipse.debug.core.breakpointMarker"</code>). - */ - public static final String BREAKPOINT_MARKER = DebugPlugin.getUniqueIdentifier() + ".breakpointMarker"; //$NON-NLS-1$ - - /** - * Line breakpoint marker type - * (value <code>"org.eclipse.debug.core.lineBreakpoint"</code>). - */ - public static final String LINE_BREAKPOINT_MARKER = DebugPlugin.getUniqueIdentifier() + ".lineBreakpointMarker"; //$NON-NLS-1$ - - /** - * Enabled breakpoint marker attribute (value <code>"org.eclipse.debug.core.enabled"</code>). - * The attribute is a <code>boolean</code> corresponding to the - * enabled state of a breakpoint. - * - * @see org.eclipse.core.resources.IMarker#getAttribute(String, boolean) - */ - public static final String ENABLED= "org.eclipse.debug.core.enabled"; //$NON-NLS-1$ - - /** - * Debug model identifier breakpoint marker attribute (value <code>"org.eclipse.debug.core.id"</code>). - * The attribute is a <code>String</code> corresponding to the - * identifier of the debug model a breakpoint is associated with. - */ - public static final String ID= "org.eclipse.debug.core.id"; //$NON-NLS-1$ - - /** - * Registered breakpoint marker attribute (value <code>"org.eclipse.debug.core.registered"</code>). - * The attribute is a <code>boolean</code> corresponding to - * whether a breakpoint has been registered with the breakpoint manager. - * - * @see org.eclipse.core.resources.IMarker#getAttribute(String, boolean) - */ - public static final String REGISTERED= "org.eclipse.debug.core.registered"; //$NON-NLS-1$ - - /** - * Persisted breakpoint marker attribute (value <code>"org.eclipse.debug.core.persisted"</code>). - * The attribute is a <code>boolean</code> corresponding to - * whether a breakpoint is to be persisted accross workspace - * invocations. - * - * @see org.eclipse.core.resources.IMarker#getAttribute(String, boolean) - */ - public static final String PERSISTED= "org.eclipse.debug.core.persisted"; //$NON-NLS-1$ - - /** - * Breakpoint group marker attribute (value <code>"org.eclipse.debug.core.group"</code>). - * The attribute is a <code>String</code> corresponding to the group - * name. - */ - public static final String GROUP= "org.eclipse.debug.core.group"; //$NON-NLS-1$ - - /** - * Deletes this breakpoint's underlying marker, and removes - * this breakpoint from the breakpoint manager. - * - * @exception CoreException if unable to delete this breakpoint's - * underlying marker - */ - public void delete() throws CoreException; - - /** - * Returns the marker associated with this breakpoint, or - * <code>null</code> if no marker is associated with this breakpoint. - * - * @return associated marker, or <code>null</code> if there is - * no associated marker. - */ - public IMarker getMarker(); - /** - * Sets the marker associated with this breakpoint. This method is - * called once at breakpoint creation. - * - * @param marker the marker to associate with this breakpoint - * @exception CoreException if an error occurs accessing the marker - */ - public void setMarker(IMarker marker) throws CoreException; - /** - * Returns the identifier of the debug model this breakpoint is - * associated with. - * - * @return the identifier of the debug model this breakpoint is - * associated with - */ - public String getModelIdentifier(); - /** - * Returns whether this breakpoint is enabled - * - * @return whether this breakpoint is enabled - * @exception CoreException if unable to access the associated - * attribute from this breakpoint's underlying marker - */ - public boolean isEnabled() throws CoreException; - /** - * Sets the enabled state of this breakpoint. This has no effect - * if the current enabled state is the same as specified by the - * enabled parameter. - * - * @param enabled whether this breakpoint should be enabled - * @exception CoreException if unable to set the associated attribute on - * this breakpoint's underlying marker. - */ - public void setEnabled(boolean enabled) throws CoreException; - - /** - * Returns whether this breakpoint is currently registered with - * the breakpoint manager. - * - * @return whether this breakpoint is currently registered with - * the breakpoint manager - * @exception CoreException if unable to access the associated - * attribute on this breakpoint's underlying marker - */ - public boolean isRegistered() throws CoreException; - - /** - * Sets whether this breakpoint is currently registered with the - * breakpoint manager. - * - * @param registered whether this breakpoint is registered with the - * breakpoint manager - * @exception CoreException if unable to set the associated attribute - * on this breakpoint's underlying marker. - */ - public void setRegistered(boolean registered) throws CoreException; - - /** - * Returns whether this breakpoint is to be persisted across - * workspace invocations, or when a project is closed and re-opened. - * Since marker definitions only allow all/none of a specific type - * of marker to be persisted (rather than selected markers of a - * specific type), breakpoints define this functionality. - * - * @return whether this breakpoint is to be persisted - * @exception CoreException if unable to access the associated attribute - * on this breakpoint's underlying marker - */ - public boolean isPersisted() throws CoreException; - - /** - * Sets whether this breakpoint is to be persisted across - * workspace invocations, or when a project is closed and re-opened. - * Has no effect if this breakpoint's marker definition is defined as not - * persisted. Sets the underlying <code>TRANSIENT</code> attribute on this - * breakpoint's marker to <code>true</code>. - * - * @param registered whether this breakpoint is to be persisted across - * workspace invocations - * @exception CoreException if unable to set the associated attribute on - * this breakpoint's underlying marker. - */ - public void setPersisted(boolean registered) throws CoreException; - - /** - * Returns the name of the group this breakpoint belongs to - * or <code>null</code> if none. - * - * @return the name of the group this breakpoint belongs to or - * <code>null</code>. - * @exception CoreException if unable to access the associated attribute - * on this breakpoint's underlying marker - * @since 3.1 - */ - public String getGroup() throws CoreException; - - /** - * Sets this breakpoint's group to the group with the given name or - * <code>null</code> to set the group to none. - * - * @param groupName the name of the group to which this breakpoint belongs - * @exception CoreException if unable to set the associated attribute on - * this breakpoint's underlying marker. - * @since 3.1 - */ - public void setGroup(String groupName) throws CoreException; -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugElement.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugElement.java deleted file mode 100644 index de85d117e..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugElement.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.ILaunch; - -/** - * A debug element represents an artifact in a program being - * debugged. - * <p> - * Some methods on debug elements require communication - * with the target program. Such methods may throw a <code>DebugException</code> - * with a status code of <code>TARGET_REQUEST_FAILED</code> - * when unable to complete a request due to a failure on the target. - * Methods that require communication with the target program or require - * the target to be in a specific state (for example, suspended), are declared - * as such. - * </p> - * <p> - * Debug elements are language independent. However, language specific - * features can be made available via the adapter mechanism provided by - * <code>IAdaptable</code>, or by extending the debug element interfaces. - * A debug model is responsible for declaring any special adapters - * its debug elements implement. - * </p> - * <p> - * Clients may implement this interface. - * </p> - */ -public interface IDebugElement extends IAdaptable { - - /** - * Returns the unique identifier of the plug-in - * this debug element originated from. - * - * @return the plug-in identifier - */ - public String getModelIdentifier(); - /** - * Returns the debug target this element is contained in. - * - * @return the debug target this element is contained in - */ - public IDebugTarget getDebugTarget(); - /** - * Returns the launch this element is contained in. - * - * @return the launch this element is contained in - */ - public ILaunch getLaunch(); -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugModelProvider.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugModelProvider.java deleted file mode 100644 index d3291a830..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugModelProvider.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -/** - * A debug model provider provides debug model identifiers. - * This interface is used as an adapter to determine what - * debug models are associated with an adaptable object. - * Generally, when debugging one language, only one debug - * model is associated with a debug element. However, - * a debug model that provides cross language debugging - * may represent several debug models. - * <p> - * Clients are intended to implement this interface. - * </p> - * @since 3.0 - */ -public interface IDebugModelProvider { - - /** - * Returns a collection of debug model identifiers. - * - * @return a collection of debug model identifiers - */ - public String[] getModelIdentifiers(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java deleted file mode 100644 index d1e8db15f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.IBreakpointListener; - -/** - * A debug target is a debuggable execution context. For example, a debug target - * may represent a debuggable process or a virtual machine. A debug target is the root - * of the debug element hierarchy. A debug target contains threads. Minimally, a debug - * target supports the following: - * <ul> - * <li>terminate - * <li>suspend/resume - * <li>breakpoints - * <li>disconnect - * </ul> - * <p> - * Generally, launching a debug session results in the creation of a - * debug target. Launching is a client responsibility, as is debug target - * creation. - * <p> - * Clients may implement this interface. - * </p> - * @see ITerminate - * @see ISuspendResume - * @see IBreakpointListener - * @see IDisconnect - * @see IMemoryBlockRetrieval - * @see org.eclipse.debug.core.ILaunch - */ -public interface IDebugTarget extends IDebugElement, ITerminate, ISuspendResume, IBreakpointListener, IDisconnect, IMemoryBlockRetrieval { - /** - * Returns the system process associated with this debug target. - * - * @return the system process associated with this debug target - */ - public IProcess getProcess(); - /** - * Returns the threads contained in this debug target. An - * empty collection is returned if this debug target contains - * no threads. - * - * @return a collection of threads - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - * @since 2.0 - */ - public IThread[] getThreads() throws DebugException; - - /** - * Returns whether this debug target currently contains any threads. - * - * @return whether this debug target currently contains any threads - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - * @since 2.0 - */ - public boolean hasThreads() throws DebugException; - - /** - * Returns the name of this debug target. Name format is debug model - * specific, and should be specified by a debug model. - * - * @return this target's name - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - public String getName() throws DebugException; - - /** - * Returns whether this target can install the given breakpoint. - * - * @return whether this target can install the given breakpoint - */ - public boolean supportsBreakpoint(IBreakpoint breakpoint); -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDisconnect.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDisconnect.java deleted file mode 100644 index f4eaf1adc..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDisconnect.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * The ability to end a debug session with a target program - * and allow the target to continue running. - * <p> - * Clients may implement this interface. - * </p> - * @see IDebugTarget - */ -public interface IDisconnect { - /** - * Returns whether this element can currently disconnect. - * - * @return whether this element can currently disconnect - */ - public boolean canDisconnect(); - /** - * Disconnects this element from its target. Generally, disconnecting - * ends a debug session with a debug target, but allows the target - * program to continue running. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - */ - public void disconnect() throws DebugException; - /** - * Returns whether this element is disconnected. - * - * @return whether this element is disconnected - */ - public boolean isDisconnected(); -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IErrorReportingExpression.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IErrorReportingExpression.java deleted file mode 100644 index 108588c01..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IErrorReportingExpression.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -/** - * An expression that can report errors which occurred during the - * expression's evaluation. - * - * @since 3.0 - */ -public interface IErrorReportingExpression extends IExpression { - /** - * Returns whether this expression has errors to report. An expression - * can have errors if errors were generated the last time its value was - * computed - * - * @return whether this expression's result has errors - */ - public boolean hasErrors(); - /** - * Returns this expression's error messages, if any. An expression can - * have errors if errors were generated the last time its value was - * computed. - * - * @return this expression's error messages - */ - public String[] getErrorMessages(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IExpression.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IExpression.java deleted file mode 100644 index 7f2acbf38..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IExpression.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -/** - * An expression is a snippet of code that can be evaluated - * to produce a value. When and how an expression is evaluated - * is implementation specific. The context/binding required to - * evaluate an expression varies by debug model, and by - * user intent. Furthermore, an expression may need to be evaluated - * at a specific location in a program (for example, at a - * breakpoint/line where certain variables referenced in the - * expression are visible/allocated). A user may want to - * evaluate an expression once to produce a value that can - * be inspected iteratively, or they may wish to evaluate an - * expression iteratively producing new values each time - * (i.e. as in a watch list). - * <p> - * Clients are intended to implement this interface. - * </p> - * @since 2.0 - */ -public interface IExpression extends IDebugElement { - - /** - * Returns this expression's snippet of code. - * - * @return the expression - */ - public abstract String getExpressionText(); - - /** - * Returns the current value of this expression or - * <code>null</code> if this expression does not - * currently have a value. - * - * @return value or <code>null</code> - */ - public abstract IValue getValue(); - - /** - * Returns the debug target this expression is associated - * with, or <code>null</code> if this expression is not - * associated with a debug target. - * - * @return debug target or <code>null</code> - * @see IDebugElement#getDebugTarget() - */ - public abstract IDebugTarget getDebugTarget(); - - /** - * Notifies this expression that it has been removed - * from the expression manager. Any required clean up - * is be performed such that this expression can be - * garbage collected. - */ - public abstract void dispose(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IFilteredStep.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IFilteredStep.java deleted file mode 100644 index 3c4c2faa5..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IFilteredStep.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * Provides the ability to perform a filtered step. Implementations must be non- - * blocking. Filter implementation is debug model specific and may not be - * supported by all debug models. - * <p> - * Clients may implement this interface. - * </p> - * @since 2.1 - * @deprecated clients should implement <code>IStepFilters</code> instead - */ -public interface IFilteredStep extends IStep { - /** - * Returns whether this element can currently perform a filtered step into. - * - * @return whether this element can currently perform a filtered step into - */ - public boolean canStepWithFilters(); - /** - * Steps into the current statement, generating <code>RESUME</code> - * and <code>SUSPEND</code> events for the associated thread, applying step - * filters, as applicable for the associated thread. Can only be called when - * the associated thread is suspended. Implementations must implement - * stepping as non- blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target</li> - * <li>NOT_SUPPORTED - The capability is not supported by the target</li> - * </ul> - */ - public void stepWithFilters() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IFlushableStreamMonitor.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IFlushableStreamMonitor.java deleted file mode 100644 index 3999f6370..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IFlushableStreamMonitor.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - - -/** - * A stream monitor who's contents can be flushed. As well, a client may - * turn buffering on/off in a flushable stream monitor. - * <p> - * Clients may implement this interface. - * </p> - * @since 2.1 - */ -public interface IFlushableStreamMonitor extends IStreamMonitor { - - /** - * Empties the contents of this stream monitor's underlying buffer. - */ - public void flushContents(); - - /** - * Sets whether the contents of this monitor's underlying stream should be - * buffered. When <code>false</code>, contents appended to this stream monitor - * are not stored in a buffer, and are thus not available from - * <code>getContents()</code>. Registered listeners are notified of appended - * text, and must buffer the contents if desired. - * - * @param buffer whether the contents of this monitor's underlying stream - * should be buffered - */ - public void setBuffered(boolean buffer); - - /** - * Returns whether the contents of this monitor's underlying stream is - * buffered. - * - * @return whether the contents of this monitor's underlying stream is - * buffered - */ - public boolean isBuffered(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IIndexedValue.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IIndexedValue.java deleted file mode 100644 index 54f920626..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IIndexedValue.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import org.eclipse.debug.core.DebugException; - -/** - * A value containing an indexed collection of variables - for example, - * an array. - * <p> - * The indexed collection value has been added to the debug model to support - * automatic partitioning of large arrays in the debug UI. Clients are not required - * to implement this interface for values representing indexed collections, - * however, doing so will provide enhanced display options in the debug UI. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @since 3.0 - */ -public interface IIndexedValue extends IValue { - - /** - * Returns the variable at the given offset in this collection. - * The offset is zero based. - * @param offset zero based offset into this collection - * @return returns the variable in this collection at the given - * offset - * @throws DebugException if unable to retrieve the variable at the - * given offset - */ - public IVariable getVariable(int offset) throws DebugException; - - /** - * Returns a subset of the elements in this collection of variables as - * specified by the given offset and length. - * - * @param offset beginning offset of the subset of elements to return - * @param length the number of elements to return - * @return a subset of the elements in this collection of variables as - * specified by the given offset and length - * @throws DebugException if unable to retrieve the variables - */ - public IVariable[] getVariables(int offset, int length) throws DebugException; - - /** - * Returns the number of entries in this indexed collection. - * - * @return the number of entries in this indexed collection - * @throws DebugException if unable to determine the number - * of entries in this collection - */ - public int getSize() throws DebugException; - - /** - * Returns the index of the first variable contained in this value. - * Generally, indexed values are zero based, but this allows for - * an arbitrary base offset. - * - * @return the index of the first variable contained in this value - */ - public int getInitialOffset(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILaunchConfigurationDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILaunchConfigurationDelegate.java deleted file mode 100644 index 70755652f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILaunchConfigurationDelegate.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; - -/** - * A launch configuration delegate performs launching for a - * specific type of launch configuration. A launch configuration - * delegate is defined by the <code>delegate</code> attribute - * of a <code>launchConfigurationType</code> extension. - * <p> - * This interface is intended to be implemented by clients. - * </p> - * @see org.eclipse.debug.core.ILaunchConfigurationType - * @see ILaunchConfiguration - * @since 2.0 - */ -public interface ILaunchConfigurationDelegate { - - /** - * Launches the given configuration in the specified mode, contributing - * debug targets and/or processes to the given launch object. The - * launch object has already been registered with the launch manager. - * - * @param configuration the configuration to launch - * @param mode the mode in which to launch, one of the mode constants - * defined by <code>ILaunchManager</code> - - * <code>RUN_MODE</code> or <code>DEBUG_MODE</code>. - * @param monitor progress monitor, or <code>null</code> - * @param launch the launch object to contribute processes and debug - * targets to - * @exception CoreException if launching fails - */ - public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException; - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILaunchConfigurationDelegate2.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILaunchConfigurationDelegate2.java deleted file mode 100644 index 3491a40ab..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILaunchConfigurationDelegate2.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; - -/** - * Optional enhancements to the launch configuration delegate interface. - * Allows launch delegates to abort a launch, build relevant projects in - * the workspace before a launch, and create the launch object to be used - * in a launch. - * <p> - * Clients implementing <code>ILaunchConfigurationDelegate</code> may also - * implement this interface. - * </p> - * @since 3.0 - */ -public interface ILaunchConfigurationDelegate2 extends ILaunchConfigurationDelegate { - - /** - * Returns a launch object to use when launching the given launch - * configuration in the given mode, or <code>null</code> if a new default - * launch object should be created by the debug platform. If a launch object - * is returned, its launch mode must match that of the mode specified in - * this method call. - * - * @param configuration the configuration being launched - * @param mode the mode the configuration is being launched in - * @return a launch object or <code>null</code> - * @throws CoreException if unable to launch - */ - public ILaunch getLaunch(ILaunchConfiguration configuration, String mode) throws CoreException; - - /** - * Optionally performs any required building before launching the given - * configuration in the specified mode, and returns whether the debug platform - * should perform an incremental workspace build before the launch continues. - * If <code>false</code> is returned the launch will proceed without further - * building, and if <code>true</code> is returned an incremental build will - * be performed on the workspace before launching. - * <p> - * This method is only called if the launch is invoked with flag indicating - * building should take place before the launch. This is done via the - * method - * <code>ILaunchConfiguration.launch(String mode, IProgressMonitor monitor, boolean build)</code>. - * </p> - * @param configuration the configuration being launched - * @param mode the mode the configuration is being launched in - * @param monitor progress monitor - * @return whether the debug platform should perform an incremental workspace - * build before the launch - * @throws CoreException if an exception occurrs while building - */ - public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException; - - /** - * Returns whether a launch should proceed. This method is called after - * <code>preLaunchCheck()</code> and <code>buildForLaunch()</code> providing - * a final chance for this launch delegate to abort a launch if required. - * For example, a delegate could cancel a launch if it discovered compilation - * errors that would prevent the launch from succeeding. - * - * @param configuration the configuration being launched - * @param mode launch mode - * @param monitor progress monitor - * @return whether the launch should proceed - * @throws CoreException if an exception occurs during final checks - */ - public boolean finalLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException; - - /** - * Returns whether a launch should proceed. This method is called first - * in the launch sequence providing an opportunity for this launch delegate - * to abort the launch. - * - * @param configuration configuration being lanuched - * @param mode launch mode - * @param monitor progress monitor - * @return whether the launch should proceed - * @throws CoreException if an exception occurs while performing pre launch checks - */ - public boolean preLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILineBreakpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILineBreakpoint.java deleted file mode 100644 index 0f5369227..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILineBreakpoint.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.runtime.CoreException; - -/** - * A breakpoint that can be located at a specific line of source code. - */ -public interface ILineBreakpoint extends IBreakpoint { - -/** - * Returns the line number in the original source that corresponds - * to the location of this breakpoint, or -1 if the attribute is not - * present. - * - * @return this breakpoint's line number, or -1 if unknown - * @exception CoreException if a <code>CoreException</code> is thrown - * while accessing the underlying <code>IMarker.LINE_NUMBER</code> marker attribute - */ -public int getLineNumber() throws CoreException; -/** - * Returns starting source index in the original source that corresponds - * to the location of this breakpoint, or -1 if the attribute is not present. - * - * @return this breakpoint's char start value, or -1 if unknown - * @exception CoreException if a <code>CoreException</code> is thrown - * while accessing the underlying <code>IMarker.CHAR_START</code> marker attribute - */ -public int getCharStart() throws CoreException; -/** - * Returns ending source index in the original source that corresponds - * to the location of this breakpoint, or -1 if the attribute is not present. - * - * @return this breakpoint's char end value, or -1 if unknown - * @exception CoreException if a <code>CoreException</code> is thrown - * while accessing the underlying <code>IMarker.CHAR_END</code> marker attribute - */ -public int getCharEnd() throws CoreException; -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILogicalStructureTypeDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILogicalStructureTypeDelegate.java deleted file mode 100644 index a3b7b1cbd..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILogicalStructureTypeDelegate.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import org.eclipse.core.runtime.CoreException; - -/** - * A delegate that provides a value represengting the logical structure of a raw - * implementation value from a debug model. Associated with a logical structure - * type extension. - * <p> - * Clients contributing logical structure types should implement this - * interface. - * </p> - * @since 3.0 - * @see org.eclipse.debug.core.ILogicalStructureType - */ -public interface ILogicalStructureTypeDelegate { - - /** - * Returns whether this structure type can provide a logical structure for - * the given value. - * - * @param value value for which a logial structure is being requested - * @return whether this structure type can provide a logical structure for - * the given value - */ - public boolean providesLogicalStructure(IValue value); - - /** - * Returns a value representing a logical structure of the given value. - * - * @param value value for which a logical structure is being requested - * @return value representing logical structure - * @throws CoreException if an exception occurrs generating a logical - * structure - */ - public IValue getLogicalStructure(IValue value) throws CoreException; - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILogicalStructureTypeDelegate2.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILogicalStructureTypeDelegate2.java deleted file mode 100644 index b3de90aab..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ILogicalStructureTypeDelegate2.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -/** - * Optional extension to <code>ILogicalStructureTypeDelegate</code> that allows - * a logical structure type delegate to provide a description for a value. - * This allows a logical structure type to provide logical structures and - * descriptions for more than one type of value. - * <p> - * If a logical structure type delegate implements this interface, it will - * be consulted for a description rather than using the description attribute - * provided in plub-in XML. - * </p> - * <p> - * Clients contributing logical structure types can implement this - * interface. - * </p> - * @since 3.1 - * @see org.eclipse.debug.core.ILogicalStructureType - */ -public interface ILogicalStructureTypeDelegate2 { - - /** - * Returns a simple description of the logical structure provided by this - * structure type delegate, for the given value. - * Cannot return <code>null</code>. This method is only called if this - * logical strucure type delegate returns <code>true</code> for - * <code>providesLogicalStructure(IValue)</code>. - * - * @return a simple description of the logical structure provided by this - * structure type delegate, for the given value - */ - public String getDescription(IValue value); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlock.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlock.java deleted file mode 100644 index 54d248cfb..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlock.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A contiguous segment of memory in an execution context. - * A memory block is represented by a starting memory address - * and a length. Not all debug architectures support the retrieval - * of memory blocks. - * - * @see IMemoryBlockRetrieval - * @since 2.0 - */ -public interface IMemoryBlock extends IDebugElement { - - /** - * Returns the start address of this memory block. - * - * @return the start address of this memory block - */ - public long getStartAddress(); - - /** - * Returns the length of this memory block in bytes. - * - * @return the length of this memory block in bytes - */ - public long getLength(); - - /** - * Returns the values of the bytes currently contained - * in this this memory block. - * - * @return the values of the bytes currently contained - * in this this memory block - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - public byte[] getBytes() throws DebugException; - - /** - * Returns whether this memory block supports value modification - * - * @return whether this memory block supports value modification - */ - public boolean supportsValueModification(); - - /** - * Sets the value of the bytes in this memory block at the specified - * offset within this memory block to the spcified bytes. - * The offset is zero based. - * - * @param offset the offset at which to set the new values - * @param bytes the new values - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * <li>This memory block does not support value modification</li> - * <li>The specified offset is greater than or equal to the length - * of this memory block, or the number of bytes specified goes - * beyond the end of this memory block (index of out of range)</li> - * </ul> - */ - public void setValue(long offset, byte[] bytes) throws DebugException; - -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockExtension.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockExtension.java deleted file mode 100644 index e9cd917b4..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockExtension.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import java.math.BigInteger; - -import org.eclipse.debug.core.DebugException; - -/** - * Represents a memory block. - * - * When the memory block is changed, fire a CHANGE Debug Event. - * - * When firing change event, be aware of the following: - * - whenever a change event is fired, the content provider for Memory View / Memory Rendering - * view checks to see if memory has actually changed. - * - If memory has actually changed, a refresh will commence. Changes to the memory block - * will be computed and will be shown with the delta icons. - * - If memory has not changed, content will not be refreshed. However, previous delta information - * will be erased. The screen will be refreshed to show that no memory has been changed. (All - * delta icons will be removed.) - * - * Please note that these APIs will be called multiple times by the Memory View. - * To improve performance, debug adapters need to cache the content of its memory block and only - * retrieve updated data when necessary. - * @since 3.1 - */ -public interface IMemoryBlockExtension extends IMemoryBlock { - - /** - * Returns the expression of this memory block. - * The expression will be used to construct the tab label of the memory view. - * - * @return expression of the memory block. - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the engine. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getExpression() throws DebugException; - - /** - * Get the base address of this memory block in BigInteger - * @return the base address of this memory block - */ - public BigInteger getBigBaseAddress(); - - /** - * @return address size in number of bytes - */ - public int getAddressSize(); - - - /** - * Indicate if the base address of this memory block block could be modified - * If return true, setBaseAddress will be used to change the base address - * of this memory block. - * * @return if the memory block supports base address modification - */ - public boolean supportBaseAddressModification(); - - /** - * @return true to indicate that the memory block manages the changes in the - * memory block. If the memory block manages changes, the memory block is - * expected to cache the MemoryByte array returned by getBytesFromOffset and - * getBytesFromAddress. The change information will not be calculated by - * the memory view. Intead, the memory block keeps track of the bytes - * and marks the bytes as changed/unchanged. Turn off both the CHANGE and UNCHANGED - * bits if the memory block does not contain history for the address. - * - * If this function returns false, the Memory View will calculate - * delta information for each byte based on its history. - */ - public boolean supportsChangeManagement(); - - /** - * Set the base address of this memory block - * @param address - * @throws DebugException if the method fails. Reasons inlucde: - * <ul><li>Failure communicating with the engine. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public void setBaseAddress(BigInteger address) throws DebugException; - - - /** - * Get bytes based on offset and length. Memory at base address + offset - * should be returned. - * Return an array of IMemory. Each IMemory object represents a section of the - * memory block. The IMemory object allows debug adapters to provide more information - * about a section of memory. Refer to IMemory for details. - * - * @param offset - * @param length - * @return an array of bytes from the memory block based on the given offset and length - * @throws DebugException if the method fails. - */ - public MemoryByte[] getBytesFromOffset(long offset, long length) throws DebugException; - - - /** - * Get bytes based on a given address. - * - * Return an array of IMemory. Each IMemory object represents a section of the - * memory block. The IMemory object allows debug adapters to provide more information - * about a section of memory. Refer to IMemory for details. - * - * @param address - * @param length - * @return an array of bytes from the memory block based on the given address and length - * @throws DebugException if method fails - */ - public MemoryByte[] getBytesFromAddress(BigInteger address, long length) throws DebugException; - - /** - * @return true if the platform is big endian, false otherwise - */ - public boolean isBigEndian(); - - - /** - * Connect a view to the memory block. Called by UI when a view that displays - * the memory block is visible. - * @param object - */ - public void connect(Object object); - - - /** - * Disconnect a view from the memory block. Called by UI when a view - * that displays the memory block is hidden. - * @param object - */ - public void disconnect(Object object); - - /** - * @return objects that are currently connected to the memory block. - * Return an empty array if nothing is connected - */ - public Object[] getConnected(); - - - /** - * Dispose this memory block. - */ - public void dispose(); - - /** - * @return the IMemoryBlockRetrieval responsible for creating this memory block - */ - public IMemoryBlockRetrieval getMemoryBlockRetrieval(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockExtensionRetrieval.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockExtensionRetrieval.java deleted file mode 100644 index cd81d42c8..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockExtensionRetrieval.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.core.model; - -import org.eclipse.debug.core.DebugException; - - -/** - * Extended capabilites for memory block retrieval. - * @since 3.1 - */ -public interface IMemoryBlockExtensionRetrieval extends IMemoryBlockRetrieval { - - /** - * Retrieves a memory block. - * - * @param expression - expression to be evalutated to an address, evaluation context can be retrieved - * from the selected debug element - * @param selected - selected debug element from Debug View - * @return a memory block based on the given expression and selected debug element - * @throws DebugException - */ - - public IMemoryBlockExtension getExtendedMemoryBlock(String expression, IDebugElement selected) throws DebugException; - - /** - * @return the string to be used in place of this memory content when bytes - * are not available. - * Return null if the byte is available. - */ - public String getPaddedString(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockRetrieval.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockRetrieval.java deleted file mode 100644 index 3efcb1aa5..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IMemoryBlockRetrieval.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * Supports the retrieval of arbitrary blocks of memory. - * - * @see IMemoryBlock - * @since 2.0 - */ -public interface IMemoryBlockRetrieval { - - /** - * Returns whether this debug target supports the retrieval - * of memory blocks. - * - * @return whether this debug target supports the retrieval - * of memory blocks - */ - public boolean supportsStorageRetrieval(); - - /** - * Returns a memory block that starts at the specified - * memory address, with the specified length. - * - * @param startAddress starting address - * @param length length of the memory block in bytes - * @return a memory block that starts at the specified - * memory address, with the specified length - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * <li>This debug target does not support memory block retrieval</li> - * <li>The specified address and length are not within valid - * ranges</li> - * </ul> - */ - public IMemoryBlock getMemoryBlock(long startAddress, long length) throws DebugException; -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IPersistableSourceLocator.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IPersistableSourceLocator.java deleted file mode 100644 index 83f651d0e..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IPersistableSourceLocator.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; - -/** - * A source locator that can be persisted and restored, - * to be used with a specfic launch configuration. - * The debug plug-in defines a source locator extension - * point for persistable source locators. - * <p> - * A source locator extension is defined in <code>plugin.xml</code>. - * Following is an example definition of a source locator extension. - * <pre> - * <extension point="org.eclipse.debug.core.sourceLocators"> - * <sourceLocator - * id="com.example.ExampleIdentifier" - * class="com.example.ExampleSourceLocator" - * name="Example Source Locator"> - * </sourceLocator> - * </extension> - * </pre> - * The attributes are specified as follows: - * <ul> - * <li><code>id</code> specifies a unique identifier for this source locator.</li> - * <li><code>class</code> specifies the fully qualified name of the Java class - * that implements <code>IPersistableSourceLocator</code>.</li> - * <li><code>name</code> a human readable name, describing the type of - * this source locator.</li> - * </ul> - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.ILaunch - * @see IStackFrame - * @see org.eclipse.debug.ui.IDebugModelPresentation - * @since 2.0 - */ -public interface IPersistableSourceLocator extends ISourceLocator { - - /** - * Returns a memento that can be used to reconstruct - * this source locator - * - * @return a memento that can be used to reconstruct - * this source locator - * @exception CoreException if unable to construct a memento - */ - public String getMemento() throws CoreException; - - /** - * Initializes this source locator based on the given - * memento. - * - * @param memento a memento to initialize this source locator - * @exception CoreException on failure to initialize - */ - public void initializeFromMemento(String memento) throws CoreException; - - /** - * Initializes this source locator to perform default - * source lookup for the given launch configuration. - * - * @param configuration launch configuration this source locator - * will be performing souce lookup for - * @exception CoreException on failure to initialize - */ - public void initializeDefaults(ILaunchConfiguration configuration) throws CoreException; - -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IProcess.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IProcess.java deleted file mode 100644 index 383847b7f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IProcess.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; - -/** - * A process represents a program running in normal (non-debug) mode. - * Processes support setting and getting of client defined attributes. - * This way, clients can annotate a process with any extra information - * important to them. For example, classpath annotations, or command - * line arguments used to launch the process may be important to a client. - * <p> - * Clients may implement this interface, however, the debug plug-in - * provides an implementation of this interface for a - * <code>java.lang.Process</code>. - * </p> - * @see org.eclipse.debug.core.DebugPlugin#newProcess(ILaunch, Process, String) - */ -public interface IProcess extends IAdaptable, ITerminate { - - /** - * Attribute key for a common, optional, process property. The value of this - * attribute is the command line a process was launched with. - * - * @since 2.1 - */ - public final static String ATTR_CMDLINE= DebugPlugin.getUniqueIdentifier() + ".ATTR_CMDLINE"; //$NON-NLS-1$ - - /** - * Attribute key for a common, optional, process property. The value of this - * attribute is an identifier for the type of this process. Process types - * are client defined - whoever creates a process may define its type. For - * example, a process type could be "java", "javadoc", or "ant". - * - * @since 2.1 - */ - public final static String ATTR_PROCESS_TYPE = DebugPlugin.getUniqueIdentifier() + ".ATTR_PROCESS_TYPE"; //$NON-NLS-1$ - - /** - * Attribute key for a common, optional, process property. The value of this - * attribute specifies an alternate dynamic label for a process, displayed by - * the console. - * - * @since 3.0 - */ - public final static String ATTR_PROCESS_LABEL = DebugPlugin.getUniqueIdentifier() + ".ATTR_PROCESS_LABEL"; //$NON-NLS-1$ - - /** - * Returns a human-readable label for this process. - * - * @return a label for this process - */ - public String getLabel(); - /** - * Returns the launch this element originated from. - * - * @return the launch this process is contained in - */ - public ILaunch getLaunch(); - /** - * Returns a proxy to the standard input, output, and error streams - * for this process, or <code>null</code> if not supported. - * - * @return a streams proxy, or <code>null</code> if not supported - */ - public IStreamsProxy getStreamsProxy(); - - /** - * Sets the value of a client defined attribute. - * - * @param key the attribute key - * @param value the attribute value - */ - public void setAttribute(String key, String value); - - /** - * Returns the value of a client defined attribute. - * - * @param key the attribute key - * @return value the String attribute value, or <code>null</code> if undefined - */ - public String getAttribute(String key); - - /** - * Returns the exit value of this process. Conventionally, 0 indicates - * normal termination. - * - * @return the exit value of this process - * @exception DebugException if this process has not yet terminated - */ - public int getExitValue() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IRegister.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IRegister.java deleted file mode 100644 index 6a2161be4..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IRegister.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A register is a special kind of variable that is contained - * in a register group. Each register has a name and a value. - * Not all debug architectures provide access to registers. - * - * @since 2.0 - */ -public interface IRegister extends IVariable { - - /** - * Returns the register group this register is contained in. - * - * @return the register group this register is contained in - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public IRegisterGroup getRegisterGroup() throws DebugException; - -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IRegisterGroup.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IRegisterGroup.java deleted file mode 100644 index 8c54c03e9..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IRegisterGroup.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A register group is a group of registers that are - * assigned to a stack frame. Some debug architectures - * provide access to registers, and registers are often - * grouped logically. For example, a floating point - * register group. - * - * @since 2.0 - */ -public interface IRegisterGroup extends IDebugElement { - - - /** - * Returns the name of this register group. - * - * @return this register group's name - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getName() throws DebugException; - - /** - * Returns the registers in this register group. - * - * @return the registers in this register group - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public IRegister[] getRegisters() throws DebugException; - - /** - * Returns whether this register group currently contains any registers. - * - * @return whether this register group currently contains any registers - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public boolean hasRegisters() throws DebugException; - -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ISourceLocator.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ISourceLocator.java deleted file mode 100644 index 64de70582..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ISourceLocator.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.model.IStackFrame; - -/** - * A source locator locates source elements for stack frames. A launch (optionally) - * specifies a source locator which is - * used to locate source for that debug session. If a launch does not - * provide a source locator, source cannot be displayed. - * Abstraction of source lookup allows clients to hide implementation - * details of source location and representation. - * <p> - * Generally, an implementor of a debug model will also implement launch configuration types, - * delegates, and source locators that work together as a whole. That is, the implementation - * of a source locator will have knowledge of how to locate a source element - * for a stack frame. For example, a Java stack frame could define API which - * specifies a source file name. A Java source locator would use this information - * to locate the associated file in the workspace. - * </p> - * <p> - * Source is displayed by the debug UI plug-in. The debug UI uses a source locator - * to resolve an object representing the source for a stack frame, and then uses - * a debug model presentation to determine the editor and editor input to use to - * display the actual source in an editor. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.ILaunch - * @see org.eclipse.debug.core.model.IStackFrame - * @see org.eclipse.debug.ui.IDebugModelPresentation - * @see org.eclipse.debug.core.model.IPersistableSourceLocator - */ -public interface ISourceLocator { - - /** - * Returns a source element that corresponds to the given stack frame, or - * <code>null</code> if a source element could not be located. The object returned - * by this method will be used by the debug UI plug-in to display source. - * The debug UI uses the debug model presentation associated - * with the given stack frame's debug model to translate a source object into an - * {editor input, editor id} pair in which to display source. - * <p> - * For example, a java source locator could return an object representing a - * compilation unit or class file. The java debug model presentation would - * then be responsible for providing an editor input and editor id for each - * compilation unit and class file such that the debug UI could display source. - * </p> - * - * @param stackFrame the stack frame for which to locate source - * @return an object representing a source element. - */ - public Object getSourceElement(IStackFrame stackFrame); - -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStackFrame.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStackFrame.java deleted file mode 100644 index 430c58db3..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStackFrame.java +++ /dev/null @@ -1,182 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A stack frame represents an execution context in a suspended thread. - * A stack frame contains variables representing visible locals and arguments at - * the current execution location. Minimally, a stack frame supports - * the following: - * <ul> - * <li>suspend/resume (convenience to resume this stack frame's thread) - * <li>stepping - * <li>termination (convenience to terminate this stack frame's thread or debug target) - * </ul> - * <p> - * A debug model implementation may choose to re-use or discard - * stack frames on iterative thread suspensions. Clients - * cannot assume that stack frames are identical or equal across - * iterative thread suspensions and must check for equality on iterative - * suspensions if they wish to re-use the objects. - * </p> - * <p> - * A debug model implementation that preserves equality - * across iterative suspensions may display more desirable behavior in - * some clients. For example, if stack frames are preserved - * while stepping, a UI client would be able to update the UI incrementally, - * rather than collapse and redraw the entire list. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see IStep - * @see ISuspendResume - * @see ITerminate - */ -public interface IStackFrame extends IDebugElement, IStep, ISuspendResume, ITerminate { - /** - * Returns the thread this stack frame is contained in. - * - * @return thread - * @since 2.0 - */ - public IThread getThread(); - /** - * Returns the visible variables in this stack frame. An empty - * collection is returned if there are no visible variables. - * - * @return collection of visible variables - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public IVariable[] getVariables() throws DebugException; - - /** - * Returns whether this stack frame currently contains any visible variables. - * - * @return whether this stack frame currently contains any visible variables - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public boolean hasVariables() throws DebugException; - - /** - * Returns the line number of the instruction pointer in - * this stack frame that corresponds to a line in an associated source - * element, or <code>-1</code> if line number information - * is unavailable. - * - * @return line number of instruction pointer in this stack frame, or - * <code>-1</code> if line number information is unavailable - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - public int getLineNumber() throws DebugException; - - /** - * Returns the index of the first character in the associated source - * element that corresponds to the current location of the instruction pointer - * in this stack frame, or <code>-1</code> if the information is unavailable. - * <p> - * If a debug model supports expression level stepping, the start/end - * character ranges are used to highlight the expression within a line - * that is being executed. - * </p> - * @return index of the first character in the associated source - * element that corresponds to the current location of the instruction pointer - * in this stack frame, or <code>-1</code> if the information is unavailable - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public int getCharStart() throws DebugException; - - /** - * Returns the index of the last character in the associated source - * element that corresponds to the current location of the instruction pointer - * in this stack frame, or <code>-1</code> if the information is unavailable. - * <p> - * If a debug model supports expression level stepping, the start/end - * character ranges are used to highlight the expression within a line - * that is being executed. - * </p> - * @return index of the last character in the associated source - * element that corresponds to the current location of the instruction pointer - * in this stack frame, or <code>-1</code> if the information is unavailable - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public int getCharEnd() throws DebugException; - - /** - * Returns the name of this stack frame. Name format is debug model - * specific, and should be specified by a debug model. - * - * @return this frame's name - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - public String getName() throws DebugException; - - /** - * Returns the register groups assigned to this stack frame, - * or an empty collection if no register groups are assigned - * to this stack frame. - * - * @return the register groups assigned to this stack frame - * or an empty collection if no register groups are assigned - * to this stack frame - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public IRegisterGroup[] getRegisterGroups() throws DebugException; - - /** - * Returns whether this stack frame contains any register groups. - * - * @return whether this stack frame contains any visible register groups - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public boolean hasRegisterGroups() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStep.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStep.java deleted file mode 100644 index aef7935f3..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStep.java +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * Provides the ability to step into, over, and return - * from the current execution location. Implementations - * must be non-blocking. - * <p> - * Implementations should honor step filter settings in their - * associated debug target, as defined by <code>IStepFilters</code>. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.model.IStepFilters - */ -public interface IStep { - /** - * Returns whether this element can currently perform a step into. - * - * @return whether this element can currently perform a step into - */ - public boolean canStepInto(); - /** - * Returns whether this element can currently perform a step over. - * - * @return whether this element can currently perform a step over - */ - public boolean canStepOver(); - /** - * Returns whether this element can currently perform a step return. - * - * @return whether this element can currently perform a step return - */ - public boolean canStepReturn(); - /** - * Returns whether this element is currently stepping. - * <p> - * For example, a thread is considered to be stepping - * after the <code>stepOver</code> call until the step over is completed, - * a breakpoint is reached, an exception is thrown, or the thread or debug target is - * terminated. - * </p> - * - * @return whether this element is currently stepping - */ - public boolean isStepping(); - /** - * Steps into the current statement, generating <code>RESUME</code> - * and <code>SUSPEND</code> events for the associated thread. Can only be called - * when the associated thread is suspended. Implementations must implement - * stepping as non-blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target</li> - * <li>NOT_SUPPORTED - The capability is not supported by the target</li> - * </ul> - */ - public void stepInto() throws DebugException; - /** - * Steps over the current statement, generating <code>RESUME</code> - * and <code>SUSPEND</code> events for the associated thread. Can only be called - * when the associated thread is suspended. Implementations must implement - * stepping as non-blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target</li> - * <li>NOT_SUPPORTED - The capability is not supported by the target</li> - * </ul> - */ - public void stepOver() throws DebugException; - /** - * Steps to the next return statement in the current scope, - * generating <code>RESUME</code> and <code>SUSPEND</code> events for - * the associated thread. Can only be called when the associated thread is suspended. - * Implementations must implement stepping as non-blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target</li> - * <li>NOT_SUPPORTED - The capability is not supported by the target</li> - * </ul> - */ - public void stepReturn() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStepFilters.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStepFilters.java deleted file mode 100644 index 204ccec20..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStepFilters.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -/** - * Support for step filters for a debug target. A debug target - * that supports step filters should implement this interface. - * Step filters can be toggled on/off for a debug target via - * this interface. When a step method is called (see - * <code>IStep</code>), the step implementation must respect - * the state of the step filters as defined by this interface. - * This allows step filters to be toggled on/off for - * all stepping operations (in, over, return). - * <p> - * Step filter management is debug model specific - this interface - * is used only to turn them on/off. - * </p> - * <p> - * In 2.1, the <code>IFilteredStep</code> interface was used - * to implement step filtering. The <code>IFilteredStep</code> - * interface is now deprecated, and this inteface should be used - * in its place to allow filters to be applied to any step - * function. - * </p> - * <p> - * Clients may implement this interface. Debug targets that support - * step filters should implement this interface. - * </p> - * @see org.eclipse.debug.core.model.IStep - * @since 3.0 - */ -public interface IStepFilters { - - /** - * Returns whether this debug target supports step filters. - * - * @return whether this debug target supports step filters - */ - public boolean supportsStepFilters(); - - /** - * Returns whether step filters are currently enabled in this - * debug target. - * - * @return whether step filters are currently enabled in this - * debug target - */ - public boolean isStepFiltersEnabled(); - - /** - * Sets whether step filters are enabled in this debug target. - * - * @param enabled whether step filters are enabled in this debug target - */ - public void setStepFiltersEnabled(boolean enabled); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamMonitor.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamMonitor.java deleted file mode 100644 index 5051a80a8..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamMonitor.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.IStreamListener; - -/** - * A stream monitor manages the contents of the stream a process - * is writing to, and notifies registered listeners of changes in - * the stream. - * <p> - * Clients may implement this interface. Generally, a client that - * provides an implementation of the <code>IStreamsProxy</code> - * interface must also provide an implementation of this interface. - * </p> - * @see org.eclipse.debug.core.model.IStreamsProxy - * @see org.eclipse.debug.core.model.IFlushableStreamMonitor - */ -public interface IStreamMonitor { - /** - * Adds the given listener to this stream monitor's registered listeners. - * Has no effect if an identical listener is already registered. - * - * @param listener the listener to add - */ - public void addListener(IStreamListener listener); - /** - * Returns the entire current contents of the stream. An empty - * String is returned if the stream is empty. - * - * @return the stream contents as a <code>String</code> - */ - public String getContents(); - /** - * Removes the given listener from this stream monitor's registered listeners. - * Has no effect if the listener is not already registered. - * - * @param listener the listener to remove - */ - public void removeListener(IStreamListener listener); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamsProxy.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamsProxy.java deleted file mode 100644 index b2f53f784..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamsProxy.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import java.io.IOException; - -/** - * A streams proxy acts as proxy between the streams of a - * process and interested clients. This abstraction allows - * implementations of <code>IProcess</code> to handle I/O related - * to the standard input, output, and error streams associated - * with a process. - * <p> - * Clients implementing the <code>IProcess</code> interface must also - * provide an implementation of this interface. - * </p> - * @see IProcess - */ -public interface IStreamsProxy { - /** - * Returns a monitor for the error stream of this proxy's process, - * or <code>null</code> if not supported. - * The monitor is connected to the error stream of the - * associated process. - * - * @return an error stream monitor, or <code>null</code> if none - */ - public IStreamMonitor getErrorStreamMonitor(); - /** - * Returns a monitor for the output stream of this proxy's process, - * or <code>null</code> if not supported. - * The monitor is connected to the output stream of the - * associated process. - * - * @return an output stream monitor, or <code>null</code> if none - */ - public IStreamMonitor getOutputStreamMonitor(); - /** - * Writes the given text to the output stream connected to the - * standard input stream of this proxy's process. - * - * @param input the text to be written - * @exception IOException when an error occurs writing to the - * underlying <code>OutputStream</code>. - * - */ - public void write(String input) throws IOException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamsProxy2.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamsProxy2.java deleted file mode 100644 index 8d954b80f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IStreamsProxy2.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import java.io.IOException; - -/** - * Extension to a streams proxy that allows closing of the output stream - * connected to the standard input stream of a proxy's process. - * <p> - * Clients should implement this interface, in addition to - * <code>IStreamsProxy</code>, if interested closing the standard - * input stream. - * </p> - * @since 3.1 - */ -public interface IStreamsProxy2 extends IStreamsProxy { - - /** - * Closes the output stream connected to the standard input stream - * of this proxy's process. - * - * @throws IOException if unable to close the stream - */ - public void closeInputStream() throws IOException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ISuspendResume.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ISuspendResume.java deleted file mode 100644 index e45952ca2..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ISuspendResume.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * Provides the ability to suspend and resume a thread - * or debug target. - * <p> - * Clients may implement this interface. - * </p> - */ -public interface ISuspendResume { - /** - * Returns whether this element can currently be resumed. - * - * @return whether this element can currently be resumed - */ - public boolean canResume(); - /** - * Returns whether this element can currently be suspended. - * - * @return whether this element can currently be suspended - */ - public boolean canSuspend(); - /** - * Returns whether this element is currently suspended. - * - * @return whether this element is currently suspended - */ - public boolean isSuspended(); - /** - * Causes this element to resume its execution, generating a <code>RESUME</code> event. - * Has no effect on an element that is not suspended. This call is non-blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - */ - public void resume() throws DebugException; - /** - * Causes this element to suspend its execution, generating a <code>SUSPEND</code> event. - * Has no effect on an already suspended element. - * Implementations may be blocking or non-blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - */ - public void suspend() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ITerminate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ITerminate.java deleted file mode 100644 index bf8a44536..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/ITerminate.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * Provides the ability to terminate an execution - * context - for example, a thread, debug target or process. - * <p> - * Clients may implement this interface. - * </p> - */ -public interface ITerminate { - /** - * Returns whether this element can be terminated. - * - * @return whether this element can be terminated - */ - public boolean canTerminate(); - /** - * Returns whether this element is terminated. - * - * @return whether this element is terminated - */ - public boolean isTerminated(); - /** - * Causes this element to terminate, generating a <code>TERMINATE</code> event. - * Implementations may be blocking or non-blocking. - * - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - */ - public void terminate() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IThread.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IThread.java deleted file mode 100644 index a737419e0..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IThread.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A thread is a sequential flow of execution in a debug target. - * A thread contains stack frames. Stack frames are only available when the - * thread is suspended, and are returned in top-down order. - * Minimally, a thread supports the following: - * <ul> - * <li>suspend/resume - * <li>stepping - * <li>terminate - * </ul> - * <p> - * Clients may implement this interface. - * </p> - * @see ISuspendResume - * @see IStep - * @see ITerminate - * @see IStackFrame - */ - -public interface IThread extends IDebugElement, ISuspendResume, IStep, ITerminate { - /** - * Returns the stack frames contained in this thread. An - * empty collection is returned if this thread contains - * no stack frames, or is not currently suspended. Stack frames - * are returned in top down order. - * - * @return a collection of stack frames - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public IStackFrame[] getStackFrames() throws DebugException; - - /** - * Returns whether this thread currently contains any stack - * frames. - * - * @return whether this thread currently contains any stack frames - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public boolean hasStackFrames() throws DebugException; - - /** - * Returns the priority of this thread. The meaning of this - * number is operating-system dependent. - * - * @return thread priority - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public int getPriority() throws DebugException; - /** - * Returns the top stack frame or <code>null</code> if there is - * currently no top stack frame. - * - * @return the top stack frame, or <code>null</code> if none - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public IStackFrame getTopStackFrame() throws DebugException; - /** - * Returns the name of this thread. Name format is debug model - * specific, and should be specified by a debug model. - * - * @return this thread's name - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getName() throws DebugException; - - /** - * Returns the breakpoints that caused this thread to suspend, - * or an empty collection if this thread is not suspended or - * was not suspended by a breakpoint. Usually a single breakpoint - * will be returned, but this collection can contain more than - * one breakpoint if two breakpoints are at the same location in - * a program. - * - * @return the collection of breakpoints that caused this thread to suspend - */ - public IBreakpoint[] getBreakpoints(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IValue.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IValue.java deleted file mode 100644 index ef167078e..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IValue.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A value represents the value of a variable. - * A value representing a complex data structure contains variables. - * <p> - * An implementation may choose to re-use or discard - * values on iterative thread suspensions. Clients - * cannot assume that values are identical or equal across - * iterative thread suspensions and must check for equality on iterative - * suspensions if they wish to re-use the objects. - * </p> - * <p> - * An implementation that preserves equality - * across iterative suspensions may display more desirable behavior in - * some clients. For example, if variables are preserved - * while stepping, a UI client would be able to update the UI incrementally, - * rather than collapse and redraw the entire list or tree. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see IVariable - */ - - -public interface IValue extends IDebugElement { - - /** - * Returns a description of the type of data this value contains - * or references. - * - * @return the name of this value's reference type - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getReferenceTypeName() throws DebugException; - - /** - * Returns this value as a <code>String</code>. - * - * @return a String representation of this value - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getValueString() throws DebugException; - - /** - * Returns whether this value is currently allocated. - * <p> - * For example, if this value represents - * an object that has been garbage collected, <code>false</code> is returned. - * </p> - * @return whether this value is currently allocated - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public boolean isAllocated() throws DebugException; - /** - * Returns the visible variables in this value. An empty - * collection is returned if there are no visible variables. - * - * @return an array of visible variables - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public IVariable[] getVariables() throws DebugException; - - /** - * Returns whether this value currently contains any visible variables. - * - * @return whether this value currently contains any visible variables - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the debug target. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - * @since 2.0 - */ - public boolean hasVariables() throws DebugException; -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IValueModification.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IValueModification.java deleted file mode 100644 index d04c5ebaf..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IValueModification.java +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * Provides the ability to modify the value of a variable in - * a target. - * <p> - * Clients may implement this interface. - * </p> - * @see IVariable - */ -public interface IValueModification { - - /** - * Attempts to set the value of this variable to the - * value of the given expression. - * - * @param expression an expression to generate a new value - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - */ - public void setValue(String expression) throws DebugException; - - /** - * Sets the value of this variable to the given value. - * - * @param value a new value - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - * @since 2.0 - */ - public void setValue(IValue value) throws DebugException; - - /** - * Returns whether this variable supports value modification. - * - * @return whether this variable supports value modification - */ - public boolean supportsValueModification(); - - /** - * Returns whether the given expression is valid to be used in - * setting a new value for this variable. - * - * @param expression an expression to generate a new value - * @return whether the expression is valid - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - */ - public boolean verifyValue(String expression) throws DebugException; - - /** - * Returns whether the given value can be used as - * a new value for this variable. - * - * @param value a new value - * @return whether the value is valid - * @exception DebugException on failure. Reasons include:<ul> - * <li>TARGET_REQUEST_FAILED - The request failed in the target - * <li>NOT_SUPPORTED - The capability is not supported by the target - * </ul> - * @since 2.0 - */ - public boolean verifyValue(IValue value) throws DebugException; -} - - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IVariable.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IVariable.java deleted file mode 100644 index b67cbdcf3..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IVariable.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.debug.core.DebugException; - -/** - * A variable represents a visible data structure in a stack frame - * or value. - * Each variable has a value which may in turn contain more variables. - * A variable may support value modification. - * <p> - * An implementation may choose to re-use or discard - * variables on iterative thread suspensions. Clients - * cannot assume that variables are identical or equal across - * iterative thread suspensions and must check for equality on iterative - * suspensions if they wish to re-use the objects. - * </p> - * <p> - * An implementation that preserves equality - * across iterative suspensions may display more desirable behavior in - * some clients. For example, if variables are preserved - * while stepping, a UI client would be able to update the UI incrementally, - * rather than collapse and redraw the entire list or tree. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see IValue - * @see IStackFrame - * @see IValueModification - */ -public interface IVariable extends IDebugElement, IValueModification { - /** - * Returns the value of this variable. - * - * @return this variable's value - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public IValue getValue() throws DebugException; - /** - * Returns the name of this variable. Name format is debug model - * specific, and should be specified by a debug model. - * - * @return this variable's name - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getName() throws DebugException; - /** - * Returns a description of the type of data this variable is - * declared to reference. Note that the declared type of a - * variable and the concrete type of its value are not neccessarily - * the same. - * - * @return the declared type of this variable - * @exception DebugException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The DebugException's - * status code contains the underlying exception responsible for - * the failure.</li> - */ - public String getReferenceTypeName() throws DebugException; - - /** - * Returns whether this variable's value has changed since the last suspend event. - * Implementations may choose whether the last suspend event is the last suspend - * event in this variable's debug target, or within the thread(s) in which this variable - * is visible. - * <p> - * Implementations that choose not to implement this function should always - * return <code>false</code>. - * </p> - * - * @return whether this variable's value has changed since the last suspend event - * @exception DebugException if an exception occurs determining if this variable's - * value has changed since the last suspend event - */ - public boolean hasValueChanged() throws DebugException; - - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpression.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpression.java deleted file mode 100644 index 3c9eb9e0f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpression.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -/** - * A watch expression is an expression that is evaluated in the context - * of a specific stack frame, thread, debug target, process, or launch. - * Generally, a watch expression is a snippet of code that is evaluated - * each time a debug target suspends, or when a user provides a context - * for an evaluation by selecting a debug target or thread. An expression - * updates its value when it is provided with a context in which it - * can perform an evaluation. - * <p> - * Clients are not intended to implement this interface. An implementation - * is provided by the debug platform. Clients that support watch expressions - * should contribute and implement a watch exrepssion delegate. Watch - * expressions can be created via the <code>IExpressionManager</code>. - * </p> - * @see org.eclipse.debug.core.model.IWatchExpressionDelegate - * @see org.eclipse.debug.core.IExpressionManager - * @since 3.0 - */ -public interface IWatchExpression extends IErrorReportingExpression { - - /** - * Updates this watch expression's value based on the current evaluation - * context. This watch expression fires a debug change event when the - * evaluation is complete. A watch expression can be asked to - * evaluate even when it is disabled. Note that implementations should - * generally be asynchronous to avoid blocking the calling thread. - */ - public void evaluate(); - /** - * Sets the context for this watch expression, or <code>null</code> if none. - * If the given context is valid for this expression, this expression may - * update its value. When the value update is complete, a debug change event is - * fired. When <code>null</code> is specified as a context, this expression - * may choose to retain its previous value. - * <p> - * The context is usually one of (but not limited to): - * <ul> - * <li>a debug target (<code>IDebugTarget</code>)</li> - * <li>a thread (<code>IThread</code>)</li> - * <li>a stack frame (<code>IStackFrame</code>)</li> - * </ul> - * </p> - * - * @param context context in which to update this expression's value, or - * <code>null</code> if none - */ - public void setExpressionContext(IDebugElement context); - /** - * Sets this watch expression's snippet of code. This method - * causes the new snippet to be evaluated immediately in - * the expression's last context. - * - * @param expressionText the snippet which will be evaluated - */ - public void setExpressionText(String expressionText); - /** - * Returns whether the result of this watch expression is pending. - * An expression is pending if an evaluation has been requested, but - * the value has not yet been returned. - * - * @return whether this expression's result is pending - */ - public boolean isPending(); - /** - * Returns whether this expression is enabled. An enabled expression will - * update its value. A disabled expression will not. - * - * @return whether this expression is enabled - */ - public boolean isEnabled(); - /** - * Sets this expression's enabled state. This method - * causes the new snippet to be evaluated immediately in - * the expression's last context. - * - * @param enabled whether this expression should be enabled - */ - public void setEnabled(boolean enabled); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionDelegate.java deleted file mode 100644 index e34d22681..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionDelegate.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -/** - * A delegate which computes the value of a watch expression - * when provided a context. Watch delegates are provided on a - * per debug model basis. Watch expressions query the appropriate - * delegate based on the debug model of the context element. - * Plug-ins that wish to contribute watch expression delegates may do so using the - * <code>org.eclipse.debug.core.watchExpressionDelegates</code> - * extension point. - * <p> - * For example, the following is the definition of a watch expression - * delegate for the com.example.foo plug-in: - * <pre> - * <extension point="org.eclipse.debug.core.watchExpressionDelegates"> - * <watchExpressionDelegate - * debugModel="org.eclipse.jdt.debug" - * delegateClass="org.eclipse.jdt.internal.debug.ui.JavaWatchExpressionDelegate"/> - * </extension> - * </pre> - * <p> - * Clients are intended to implement this interface. - * </p> - * @see org.eclipse.debug.core.model.IWatchExpression - * @see org.eclipse.debug.core.model.IWatchExpressionListener - * - * @since 3.0 - */ -public interface IWatchExpressionDelegate { - - /** - * Evaluates the given expression in the given context asynchronously and - * notifies the given listener when the evaluation finishes. - * - * @param expression the expression to evaluate - * @param context the context for the evaluation - * @param listener the listener to notify when the evaluation completes - */ - public void evaluateExpression(String expression, IDebugElement context, IWatchExpressionListener listener); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionListener.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionListener.java deleted file mode 100644 index 8b1baa0a5..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionListener.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -/** - * A watch expression listener is notified when an - * <code>org.eclipse.debug.core.model.IWatchExpressionDelegate</code> - * completes an evaluation. - * - * @see org.eclipse.debug.core.model.IWatchExpressionDelegate - * @see org.eclipse.debug.core.model.IWatchExpressionResult - * @since 3.0 - */ -public interface IWatchExpressionListener { - - /** - * Notifies the listener that an evaluation has completed. - * - * @param result the result of the evaluation - */ - public void watchEvaluationFinished(IWatchExpressionResult result); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionResult.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionResult.java deleted file mode 100644 index 90a1c315b..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchExpressionResult.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import org.eclipse.debug.core.DebugException; - -/** - * The result of an evaluation performed by an - * <code>org.eclipse.debug.core.model.IWatchExpressionDelegate</code>. - * A watch expression reports the value of the evaluation - * and any errors or exceptions that occurred. - * - * @see org.eclipse.debug.core.model.IWatchExpressionDelegate - * @since 3.0 - */ -public interface IWatchExpressionResult { - /** - * Returns the value representing the result of the - * evaluation, or <code>null</code> if the - * associated evaluation failed. If - * the associated evaluation failed, there will - * be problems, or an exception in this result. - * - * @return the resulting value, possibly - * <code>null</code> - */ - public IValue getValue(); - - /** - * Returns whether the evaluation had any problems - * or if an exception occurred while performing the - * evaluation. - * - * @return whether there were any problems. - * @see #getErrorMessages() - * @see #getException() - */ - public boolean hasErrors(); - - /** - * Returns an array of problem messages. Each message describes a problem that - * occurred while compiling the snippet. - * - * @return evaluation error messages, or an empty array if no errors occurred - */ - public String[] getErrorMessages(); - - /** - * Returns the expression that was evaluated. - * - * @return The string expression. - */ - public String getExpressionText(); - - /** - * Returns any exception that occurred while performing the evaluation - * or <code>null</code> if an exception did not occur. - * The exception will be a debug exception or a debug exception - * that wrappers a debug model specific exception that indicates a problem communicating - * with the target or with actually performing some action in the target. - * - * @return The exception that occurred during the evaluation - * @see org.eclipse.debug.core.DebugException - */ - public DebugException getException(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchpoint.java deleted file mode 100644 index e106ceea7..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IWatchpoint.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.runtime.CoreException; - -/** - * A breakpoint that suspends when an associated variable is - * read or written. - * <p> - * Clients may implement this interface. Clients are not required to - * implement this interface to implement watchpoints, but those that do inherit - * default rendering of images for watchpoints from the debug platform's - * default label provider and actions to toggle access and modification - * properties of a watchpoint. - * </p> - * @since 3.1 - */ -public interface IWatchpoint extends IBreakpoint { - /** - * Returns whether this watchpoint will suspend execution when its associated - * variable is accessed (read). - * - * @return whether this is an access watchpoint - * @exception CoreException if unable to access the property - * on this breakpoint's underlying marker - */ - public boolean isAccess() throws CoreException; - /** - * Sets whether this breakpoint will suspend execution when its associated - * variable is accessed. - * - * @param access whether to suspend on access - * @exception CoreException if unable to set the property on this breakpoint's - * underlying marker or if the capability is not supported - */ - public void setAccess(boolean access) throws CoreException; - /** - * Returns whether this watchpoint will suspend execution when its associated - * variable is written. - * - * @return whether this is a modification watchpoint - * @exception CoreException if unable to access the property - * on this breakpoint's underlying marker - */ - public boolean isModification() throws CoreException; - /** - * Sets whether this breakpoint will suspend execution when its associated - * variable is modified. - * - * @param modification whether to suspend on modification - * @exception CoreException if unable to set the property on - * this breakpoint's underlying marker or if the capability is not supported - */ - public void setModification(boolean modification) throws CoreException; - /** - * Returns whether this breakpoints supports the capability to suspend - * when an associated variable is read. - * - * @return whether this breakpoints supports the capability to suspend - * when an associated variable is read - */ - public boolean supportsAccess(); - /** - * Returns whether this breakpoints supports the ability to suspend - * when an associated variable is written. - * - * @return whether this breakpoints supports the ability to suspend - * when an associated variable is written - */ - public boolean supportsModification(); - -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/LaunchConfigurationDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/LaunchConfigurationDelegate.java deleted file mode 100644 index 9fdc2c54a..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/LaunchConfigurationDelegate.java +++ /dev/null @@ -1,309 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.IncrementalProjectBuilder; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IBreakpointManager; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.IStatusHandler; -import org.eclipse.debug.internal.core.DebugCoreMessages; - -/** - * Default implementation of a launch configuration delegate. Provides - * convenience methods for computing the build order of projects, - * building projects, and searching for errors in the workspace. The - * default pre-launch check prompts the user to launch in debug mode - * if breakpoints are present in the workspace. - * <p> - * Clients implementing launch configration delegates should subclass - * this class. - * </p> - * @since 3.0 - */ -public abstract class LaunchConfigurationDelegate implements ILaunchConfigurationDelegate2 { - - /** - * Status code for which a UI prompter is registered. - */ - protected static final IStatus promptStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 200, "", null); //$NON-NLS-1$//$NON-NLS-2$ - - /** - * Status code for which a prompter is registered to ask the user if they - * want to launch in debug mode when breakpoints are present. - */ - protected static final IStatus switchToDebugPromptStatus = new Status(IStatus.INFO, "org.eclipse.debug.core", 201, "", null); //$NON-NLS-1$//$NON-NLS-2$ - - /** - * Status code for which a prompter is registered to ask the user if the - * want to continue launch despite existing compile errors - */ - protected static final IStatus complileErrorPromptStatus = new Status(IStatus.INFO, "org.eclipse.debug.core", 202, "", null); //$NON-NLS-1$ //$NON-NLS-2$ - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#getLaunch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String) - */ - public ILaunch getLaunch(ILaunchConfiguration configuration, String mode) throws CoreException { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#buildForLaunch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) - */ - public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { - IProject[] projects = getBuildOrder(configuration, mode); - if (projects == null) { - return true; - } - buildProjects(projects, monitor); - return false; - } - - /** - * Returns the projects to build before launching the given launch configuration - * or <code>null</code> if the entire workspace should be built incrementally. - * Subclasses should override as required. - * - * @param configuration the configuration being launched - * @param mode launch mode - * @return projects to build, in build order, or <code>null</code> - * @throws CoreException if an exception occurrs - */ - protected IProject[] getBuildOrder(ILaunchConfiguration configuration, String mode) throws CoreException { - return null; - } - - /** - * Returns the set of projects to use when searching for errors or <code>null</code> - * if no search is to be done. - * - * @param configuration the configuration being launched - * @param mode launch mode - * @return a list of projects or <code>null</code> - * @throws CoreException if an exception occurrs - */ - protected IProject[] getProjectsForProblemSearch(ILaunchConfiguration configuration, String mode) throws CoreException { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#finalLaunchCheck(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) - */ - public boolean finalLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { - IProject[] projects = getProjectsForProblemSearch(configuration, mode); - if (projects == null) { - return true; //continue launch - } - boolean continueLaunch = true; - - monitor.subTask(DebugCoreMessages.getString("LaunchConfigurationDelegate.6")); //$NON-NLS-1$ - for (int i = 0; i < projects.length; i++) { - monitor.subTask(DebugCoreMessages.getString("LaunchConfigurationDelegate.7") + projects[i].getName()); //$NON-NLS-1$ - if (existsProblems(projects[i])) { - IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(promptStatus); - if (prompter != null) { - continueLaunch = ((Boolean) prompter.handleStatus(complileErrorPromptStatus, configuration)).booleanValue(); - break; - } - } - } - - return continueLaunch; - } - - /* (non-Javadoc) - * - * If launching in run mode, and the configuration supports debug mode, check - * if there are any breakpoints in the workspace, and ask the user if they'd - * rather launch in debug mode. - * - * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#preLaunchCheck(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) - */ - public boolean preLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { - if (mode.equals(ILaunchManager.RUN_MODE) && configuration.supportsMode(ILaunchManager.DEBUG_MODE)) { - IBreakpointManager breakpointManager = DebugPlugin.getDefault().getBreakpointManager(); - if (!breakpointManager.isEnabled()) { - // no need to check breakpoints individually. - return true; - } - IBreakpoint[] breakpoints = breakpointManager.getBreakpoints(); - for (int i = 0; i < breakpoints.length; i++) { - if (breakpoints[i].isEnabled()) { - IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(promptStatus); - if (prompter != null) { - boolean lauchInDebugModeInstead = ((Boolean)prompter.handleStatus(switchToDebugPromptStatus, configuration)).booleanValue(); - if (lauchInDebugModeInstead) { - return false; //kill this launch - } - } - // if no user prompt, or user says to continue (no need to check other breakpoints) - return true; - } - } - } - // no enabled breakpoints... continue launch - return true; - } - - /** - * Returns an array of projects in their suggested build order - * containing all of the projects specified by <code>baseProjects</code> - * and all of their referenced projects. - * - * @param baseProjects a collection of projetcs - * @return an array of projects in their suggested build order - * containing all of the projects specified by <code>baseProjects</code> - * @throws CoreException if an error occurs while computing referenced - * projects - */ - protected IProject[] computeReferencedBuildOrder(IProject[] baseProjects) throws CoreException { - HashSet unorderedProjects = new HashSet(); - for(int i = 0; i< baseProjects.length; i++) { - unorderedProjects.add(baseProjects[i]); - addReferencedProjects(baseProjects[i], unorderedProjects); - } - IProject[] projectSet = (IProject[]) unorderedProjects.toArray(new IProject[unorderedProjects.size()]); - return computeBuildOrder(projectSet); - } - - - /** - * Adds all projects referenced by <code>project</code> to the given - * set. - * - * @param project project - * @param references set to which referenced projects are added - * @throws CoreException if an error occurs while computing referenced - * projects - */ - protected void addReferencedProjects(IProject project, Set references) throws CoreException{ - if (project.isOpen()) { - IProject[] projects = project.getReferencedProjects(); - for (int i = 0; i < projects.length; i++) { - IProject refProject= projects[i]; - if (refProject.exists() && !references.contains(refProject)) { - references.add(refProject); - addReferencedProjects(refProject, references); - } - } - } - } - - /** - * Returns a list of projects in their suggested build order from the - * given unordered list of projects. - * - * @param projects the list of projects to sort into build order - * @return a new array containing all projects from <code>projects</code> sorted - * according to their build order. - */ - protected IProject[] computeBuildOrder(IProject[] projects) { - String[] orderedNames = ResourcesPlugin.getWorkspace().getDescription().getBuildOrder(); - if (orderedNames != null) { - List orderedProjects = new ArrayList(projects.length); - //Projects may not be in the build order but should be built if selected - List unorderedProjects = new ArrayList(projects.length); - for(int i = 0; i < projects.length; ++i) { - unorderedProjects.add(projects[i]); - } - - for (int i = 0; i < orderedNames.length; i++) { - String projectName = orderedNames[i]; - for (Iterator iterator = unorderedProjects.iterator(); iterator.hasNext(); ) { - IProject project = (IProject)iterator.next(); - if (project.getName().equals(projectName)) { - orderedProjects.add(project); - iterator.remove(); - break; - } - } - } - //Add anything not specified before we return - orderedProjects.addAll(unorderedProjects); - return (IProject[]) orderedProjects.toArray(new IProject[orderedProjects.size()]); - } - - // Computing build order returned null, try the project prerequisite order - IWorkspace.ProjectOrder po = ResourcesPlugin.getWorkspace().computeProjectOrder(projects); - return po.projects; - } - - /** - * Returns whether the given project contains any problem markers of the - * specified severity. - * - * @param proj the project to search - * @return whether the given project contains any problems that should - * stop it from launching - * @throws CoreException if an error occurs while searching for - * problem markers - */ - protected boolean existsProblems(IProject proj) throws CoreException { - IMarker[] markers = proj.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); - if (markers.length > 0) { - for (int i = 0; i < markers.length; i++) { - if (isLaunchProblem(markers[i])) { - return true; - } - } - } - return false; - } - - /** - * Returns whether the given problem should potentially abort the launch. - * By default if the problem has an error severity, the problem is considered - * a potential launch problem. Subclasses may override to specialize error - * detection. - * - * @param problemMarker candidate problem - * @return whether the given problem should potentially abort the launch - * @throws CoreException if any exceptions occurr while accessing marker attributes - */ - protected boolean isLaunchProblem(IMarker problemMarker) throws CoreException { - Integer severity = (Integer)problemMarker.getAttribute(IMarker.SEVERITY); - if (severity != null) { - return severity.intValue() >= IMarker.SEVERITY_ERROR; - } - - return false; - } - - /** - * Performs an incremental build on each of the given projects. - * - * @param projects projects to build - * @param monitor progress monitor - * @throws CoreException if an exception occurrs while building - */ - protected void buildProjects(IProject[] projects, IProgressMonitor monitor) throws CoreException { - for (int i = 0; i < projects.length; i++ ) { - projects[i].build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor); - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/LineBreakpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/LineBreakpoint.java deleted file mode 100644 index c43f3555f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/LineBreakpoint.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; - - -/** - * Abstract implementation of a line breakpoint. This class is - * intended to be subclassed by debug model specific implementations - * of line breakpoints. - * - * @see ILineBreakpoint - */ - -public abstract class LineBreakpoint extends Breakpoint implements ILineBreakpoint { - - - /** - * @see ILineBreakpoint#getLineNumber() - */ - public int getLineNumber() throws CoreException { - IMarker m = getMarker(); - if (m != null) { - return m.getAttribute(IMarker.LINE_NUMBER, -1); - } - return -1; - } - - /** - * @see ILineBreakpoint#getCharStart() - */ - public int getCharStart() throws CoreException { - IMarker m = getMarker(); - if (m != null) { - return m.getAttribute(IMarker.CHAR_START, -1); - } - return -1; - } - - /** - * @see ILineBreakpoint#getCharEnd() - */ - public int getCharEnd() throws CoreException { - IMarker m = getMarker(); - if (m != null) { - return m.getAttribute(IMarker.CHAR_END, -1); - } - return -1; - } -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/MemoryByte.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/MemoryByte.java deleted file mode 100644 index d32811c9c..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/MemoryByte.java +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -/** - * A byte of memory in a meomry block. Each byte of memory has a value and - * attributes indicating if the byte is read-only, valid, or if its value has - * changed. - * <p> - * Clients may instantiate this class. Clients may subclass this class to - * add other attributes to a memory byte, as required. - * </p> - * @since 3.1 - */ -public class MemoryByte { - - /** - * Bit mask used to indicate a byte is read-only. - */ - public static final byte READONLY = 0x01; - - /** - * Bit mask used to indicate a byte is valid. - * A memory byte is valid when its value and attributes are retrievable. - * Otherwise, a byte is considered invalid. - */ - public static final byte VALID = 0x02; - - /** - * Bit mask used to indicate a byte has changed since the last - * suspend event. - * - * @see org.eclipse.debug.core.DebugEvent#SUSPEND - */ - public static final byte CHANGED = 0x04; - - /** - * Bit mask used to indicate a memory byte has history to - * determine if its value has changed. When a memory byte's - * history is unknown, the change state has no meaning. - */ - public static final byte KNOWN = 0x08; - - /** - * Value of this byte. - */ - protected byte value; - - /** - * Attribute flags. - * <p> - * To specify VALID: flags |= MemoryByte.VALID; - * To specify READONLY: flags |= MemoryByte.READONLY; - * </p> - */ - protected byte flags; - - /** - * Constructs a read-write, valid memory byte without a change history, - * and a value of 0. - */ - public MemoryByte() { - this((byte)0, VALID); - } - - /** - * Constructs a read-write, valid memory byte without a change history, - * with the given value. - * - * @param byteValue value of this memory byte - * - */ - public MemoryByte(byte byteValue) { - this(byteValue, VALID); - } - - /** - * Constructs a memory byte with the given value and attributes. - * - * @param byteValue value of this memory byte - * @param byteFlags attributes of the byte specified as a bit mask - */ - public MemoryByte(byte byteValue, byte byteFlags) { - value = byteValue; - flags = byteFlags; - } - - /** - * Returns this memory byte's attribute as a bit mask. - * - * @return this memory byte's attribute as a bit mask - */ - public byte getFlags() { - return flags; - } - /** - * Sets this memory byte's attributes based on the given bit mask. - * - * @param flags bit mask of attributes - */ - public void setFlags(byte flags) { - this.flags = flags; - } - - /** - * Returns the value of this memory byte. - * - * @return the value of this memory byte - */ - public byte getValue() { - return value; - } - - /** - * Sets the value of this memory byte. - * - * @param value the new value of this memory byte - */ - public void setValue(byte value) { - this.value = value; - } - - /** - * Sets whether this memory byte is valid. A memory byte - * is considered valid when its value and attributes are - * retrievable. - * - * @param valid whether this memory byte is valid - */ - public void setValid(boolean valid) { - flags |= MemoryByte.VALID; - if (!valid) - flags ^= MemoryByte.VALID; - } - - /** - * Returns whether this memory byte is valid. A memory byte - * is considered valid when its value and attributes are - * retrievable. - * - * @return whether this memory byte is valid - */ - public boolean isValid() { - return ((flags & MemoryByte.VALID) == MemoryByte.VALID); - } - - /** - * Sets whether this memory byte is read-only. - * - * @param readonly whether this memory byte is read-only. - */ - public void setReadonly(boolean readonly) { - flags |= MemoryByte.READONLY; - if (!readonly) - flags ^= MemoryByte.READONLY; - } - - /** - * Returns whether this memory byte is read-only. - * - * @return whether this memory byte is read-only - */ - public boolean isReadonly() { - return ((flags & MemoryByte.READONLY) == MemoryByte.READONLY); - } - - /** - * Sets whether this memory byte has changed. - * - * @param changed whether this memory byte has changed - */ - public void setChanged(boolean changed) { - flags |= MemoryByte.CHANGED; - if (!changed) - flags ^= MemoryByte.CHANGED; - } - - /** - * Returns whether this memory byte has changed. - * - * @return whether this memory byte has changed - */ - public boolean isChanged() { - return ((flags & MemoryByte.CHANGED) == MemoryByte.CHANGED); - } - - /** - * Sets whether the history of this byte is known. When history - * is unknown, the change state of a memory byte has no meaning. - * - * @param known whether the change state of this byte is known - */ - public void setKnown(boolean known) { - flags |= MemoryByte.KNOWN; - if (!known) - flags ^= MemoryByte.KNOWN; - } - - /** - * Returns whether the history of this byte is known. When history - * is unknown, the change state of a memory byte has no meaning. - * - * @return whether the change state of this byte is known - */ - public boolean isKnown() { - return ((flags & MemoryByte.KNOWN) == MemoryByte.KNOWN); - } - - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java deleted file mode 100644 index 34542206f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/RuntimeProcess.java +++ /dev/null @@ -1,436 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.model; - - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.internal.core.DebugCoreMessages; -import org.eclipse.debug.internal.core.NullStreamsProxy; -import org.eclipse.debug.internal.core.StreamsProxy; - - -/** - * Standard implementation of an <code>IProcess</code> that wrappers a system - * process (<code>java.lang.Process</code>). - * <p> - * Clients may subclass this class. Clients that need to replace the implementation - * of a streams proxy associatd with an <code>IProcess</code> should subclass this - * class. Generally clients should not instantiate this class directly, but should - * instead call <code>DebugPlugin.newProcess(...)</code>, which can delegate to an - * <code>IProcessFactory</code> if one is referenced by the associated launch configuration. - * </p> - * @see org.eclipse.debug.core.model.IProcess - * @see org.eclipse.debug.core.IProcessFactory - * @since 3.0 - */ -public class RuntimeProcess extends PlatformObject implements IProcess { - - private static final int MAX_WAIT_FOR_DEATH_ATTEMPTS = 10; - private static final int TIME_TO_WAIT_FOR_THREAD_DEATH = 500; // ms - - /** - * The launch this process is contained in - */ - private ILaunch fLaunch; - - /** - * The system process represented by this <code>IProcess</code> - */ - private Process fProcess; - - /** - * This process's exit value - */ - private int fExitValue; - - /** - * The monitor which listens for this runtime process' system process - * to terminate. - */ - private ProcessMonitorThread fMonitor; - - /** - * The streams proxy for this process - */ - private IStreamsProxy fStreamsProxy; - - /** - * The name of the process - */ - private String fName; - - /** - * Whether this process has been terminated - */ - private boolean fTerminated; - - /** - * Table of client defined attributes - */ - private Map fAttributes; - - /** - * Whether output from the process should be captured or swallowed - */ - private boolean fCaptureOutput = true; - - /** - * Constructs a RuntimeProcess on the given system process - * with the given name, adding this process to the given - * launch. - * - * @param launch the launch this process will be parented by - * @param process underlyig system process - * @param name the label used for this process - * @param attributes map of attributes used to initialize the attributes - * of this process, or <code>null</code> if none - */ - public RuntimeProcess(ILaunch launch, Process process, String name, Map attributes) { - setLaunch(launch); - initializeAttributes(attributes); - fProcess= process; - fName= name; - fTerminated= true; - try { - process.exitValue(); - } catch (IllegalThreadStateException e) { - fTerminated= false; - } - - String captureOutput = launch.getAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT); - fCaptureOutput = !("false".equals(captureOutput)); //$NON-NLS-1$ - - fStreamsProxy= createStreamsProxy(); - fMonitor = new ProcessMonitorThread(this); - fMonitor.start(); - launch.addProcess(this); - fireCreationEvent(); - } - - /** - * Initialize the attributes of this process to those in the given map. - * - * @param attributes attribute map or <code>null</code> if none - */ - private void initializeAttributes(Map attributes) { - if (attributes != null) { - Iterator keys = attributes.keySet().iterator(); - while (keys.hasNext()) { - String key = (String)keys.next(); - setAttribute(key, (String)attributes.get(key)); - } - } - } - - /** - * @see ITerminate#canTerminate() - */ - public boolean canTerminate() { - return !fTerminated; - } - - /** - * @see IProcess#getLabel() - */ - public String getLabel() { - return fName; - } - - /** - * Sets the launch this process is contained in - * - * @param launch the launch this process is contained in - */ - protected void setLaunch(ILaunch launch) { - fLaunch = launch; - } - - /** - * @see IProcess#getLaunch() - */ - public ILaunch getLaunch() { - return fLaunch; - } - - /** - * Returns the underlying system process associated with this process. - * - * @return system process - */ - protected Process getSystemProcess() { - return fProcess; - } - - /** - * @see ITerminate#isTerminated() - */ - public boolean isTerminated() { - return fTerminated; - } - - /** - * @see ITerminate#terminate() - */ - public void terminate() throws DebugException { - if (!isTerminated()) { - if (fStreamsProxy instanceof StreamsProxy) { - ((StreamsProxy)fStreamsProxy).kill(); - } - Process process = getSystemProcess(); - if (process != null) { - process.destroy(); - } - int attempts = 0; - while (attempts < MAX_WAIT_FOR_DEATH_ATTEMPTS) { - try { - process = getSystemProcess(); - if (process != null) { - fExitValue = process.exitValue(); // throws exception if process not exited - } - return; - } catch (IllegalThreadStateException ie) { - } - try { - Thread.sleep(TIME_TO_WAIT_FOR_THREAD_DEATH); - } catch (InterruptedException e) { - } - attempts++; - } - // clean-up - if (fMonitor != null) { - fMonitor.killThread(); - fMonitor = null; - } - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugException.TARGET_REQUEST_FAILED, DebugCoreMessages.getString("RuntimeProcess.terminate_failed"), null); //$NON-NLS-1$ - throw new DebugException(status); - } - } - - /** - * Notification that the system process associated with this process - * has terminated. - */ - protected void terminated() { - if (fStreamsProxy instanceof StreamsProxy) { - ((StreamsProxy)fStreamsProxy).close(); - } - fTerminated= true; - try { - fExitValue = fProcess.exitValue(); - } catch (IllegalThreadStateException ie) { - } - fProcess= null; - fireTerminateEvent(); - } - - /** - * @see IProcess#getStreamsProxy() - */ - public IStreamsProxy getStreamsProxy() { - if (!fCaptureOutput) { - return null; - } - return fStreamsProxy; - } - - /** - * Returns the streams proxy associated with this process. - * - * @return streams proxy - */ - protected IStreamsProxy createStreamsProxy() { - if (!fCaptureOutput) { - return new NullStreamsProxy(getSystemProcess()); - } - - return new StreamsProxy(getSystemProcess()); - } - - /** - * Fires a creation event. - */ - protected void fireCreationEvent() { - fireEvent(new DebugEvent(this, DebugEvent.CREATE)); - } - - /** - * Fires the given debug event. - * - * @param event debug event to fire - */ - protected void fireEvent(DebugEvent event) { - DebugPlugin manager= DebugPlugin.getDefault(); - if (manager != null) { - manager.fireDebugEventSet(new DebugEvent[]{event}); - } - } - - /** - * Fires a terminate event. - */ - protected void fireTerminateEvent() { - fireEvent(new DebugEvent(this, DebugEvent.TERMINATE)); - } - - /** - * Fires a change event. - */ - protected void fireChangeEvent() { - fireEvent(new DebugEvent(this, DebugEvent.CHANGE)); - } - - /** - * @see IProcess#setAttribute(String, String) - */ - public void setAttribute(String key, String value) { - if (fAttributes == null) { - fAttributes = new HashMap(5); - } - Object origVal = fAttributes.get(key); - if (origVal != null && origVal.equals(value)) { - return; //nothing changed. - } - - fAttributes.put(key, value); - fireChangeEvent(); - } - - /** - * @see IProcess#getAttribute(String) - */ - public String getAttribute(String key) { - if (fAttributes == null) { - return null; - } - return (String)fAttributes.get(key); - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - if (adapter.equals(IProcess.class)) { - return this; - } - if (adapter.equals(IDebugTarget.class)) { - ILaunch launch = getLaunch(); - IDebugTarget[] targets = launch.getDebugTargets(); - for (int i = 0; i < targets.length; i++) { - if (this.equals(targets[i].getProcess())) { - return targets[i]; - } - } - return null; - } - return super.getAdapter(adapter); - } - /** - * @see IProcess#getExitValue() - */ - public int getExitValue() throws DebugException { - if (isTerminated()) { - return fExitValue; - } - throw new DebugException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugException.TARGET_REQUEST_FAILED, DebugCoreMessages.getString("RuntimeProcess.Exit_value_not_available_until_process_terminates._1"), null)); //$NON-NLS-1$ - } - - /** - * Monitors a system process, waiting for it to terminate, and - * then notifies the associated runtime process. - */ - class ProcessMonitorThread extends Thread { - - /** - * Whether the thread has been told to exit. - */ - protected boolean fExit; - /** - * The underlying <code>java.lang.Process</code> being monitored. - */ - protected Process fOSProcess; - /** - * The <code>IProcess</code> which will be informed when this - * monitor detects that the underlying process has terminated. - */ - protected RuntimeProcess fRuntimeProcess; - - /** - * The <code>Thread</code> which is monitoring the underlying process. - */ - protected Thread fThread; - - /** - * A lock protecting access to <code>fThread</code>. - */ - private final Object fThreadLock = new Object(); - - /** - * @see Thread#run() - */ - public void run() { - synchronized (fThreadLock) { - if (fExit) { - return; - } - fThread = Thread.currentThread(); - } - while (fOSProcess != null) { - try { - fOSProcess.waitFor(); - } catch (InterruptedException ie) { - // clear interrupted state - Thread.interrupted(); - } finally { - fOSProcess = null; - fRuntimeProcess.terminated(); - } - } - fThread = null; - } - - /** - * Creates a new process monitor and starts monitoring the process for - * termination. - */ - public ProcessMonitorThread(RuntimeProcess process) { - super(DebugCoreMessages.getString("ProcessMonitorJob.0")); //$NON-NLS-1$ - fRuntimeProcess= process; - fOSProcess= process.getSystemProcess(); - } - - /** - * Kills the monitoring thread. - * - * This method is to be useful for dealing with the error - * case of an underlying process which has not informed this - * monitor of its termination. - */ - protected void killThread() { - synchronized (fThreadLock) { - if (fThread == null) { - fExit = true; - } else { - fThread.interrupt(); - } - } - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/package.html b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/package.html deleted file mode 100644 index 6192e28d6..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/package.html +++ /dev/null @@ -1,146 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> - -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<title>Eclipse Debug Platform [org.eclipse.debug.core.model]</title> -</head> - -<body bgcolor="#FFFFFF"> - -<p>Defines interfaces for debug model elements, source lookup, and launching.</p> - -<h2>Package Specification</h2> - -<p>This package defines classes and interfaces known as the "debug model" - which support an extensible set of debug architectures and languages. The debug - model is a set of interfaces representing common artifacts in debuggable programs. - The debug plug-in itself does not provide an implementation of a debug model. - It is intended that third parties providing an integrated set of development - tools for a specific language will also implement a debug model for that language, - using an underlying debug architecture of their choice. For example, Java development - tooling provides an implementation of a debug model based on the standard Java - Platform Debug Architecture (JPDA).</p> - -<h4>The Debug Model</h4> - -<p>A client implements a debug model by -providing an implementation of the interfaces defined in this package. (There is no explicit -extension point that represents a debug model). Each debug model provides one or more -launch configuration types capable of initiating a debug session.</p> - -<p>The common elements defined by the debug model are: - -<ul> - <li>Debug Target - A debug target represents a debuggable program - for example, a virtual - machine or a process.</li> - <li>Thread - A debug target may contain one or more threads.</li> - <li>Stack Frame - A suspended thread may contain one or more stack frames.</li> - <li>Variable - A stack frame may contain variables.</li> - <li>Value - Each variable has an associated value, and a value may contain more variables (to - represent complex data structures and objects).</li> - <li>Register Group - A stack frame may (optionally) be associated with one or more register - groups.</li> - <li>Register - A register group contains one or more registers.</li> - <li>Memory Blocks - A debug target may (optionally) support the retrieval of - arbitrary contiguous segments of memory.</li> - <li>Breakpoint - Breakpoints suspend the execution of a program.</li> - <li>Expression - An expression is a snippet of code that can be evaluated to - produce a value.</li> -</ul> - -<p>A debug model implementation is responsible for firing debug events. A debug event -corresponds to an event in a program being debugged - for example the creation or -termination of a thread.</p> - -<h4>Breakpoints</h4> - -<p>Breakpoints are used to suspend the execution of a program being debugged. There are -many kinds of breakpoints - line breakpoints, conditional line breakpoints, hit count -breakpoints, exception breakpoints, etc. The kinds of breakpoints supported by each debug -architecture, and the information required to create those breakpoints -is dictated by each debug architecture. The debug platform supports an extensible -set of breakpoint via the breakpoints extension point.</p> - -<p>The debug platform provides a breakpoint manager that maintains the collection - of all registered breakpoints. Clients add and remove breakpoints via this manager. - Breakpoints are implemented by instances of <b>IBreakpoint</b>. Each breakpoint - object has an associated marker, which provides persistence and presentation - in editors. The debug platform defines a generic breakpoint and line breakpoint, - as well as their corresponding marker definitions. Breakpoint creation is a - client responsibility - that is, defining the attributes of a breakpoint and - the resource to associate a breakpoint marker with.</p> - -<p>Breakpoints are persisted via their underlying marker. Breakpoint markers defined - with the <b>persisted</b> attribute as <b>false</b> will not be persisted. Breakpoints - are restored at workspace startup time by the breakpoint manager - that is, - breakpoint objects are created for all persisted markers which are a subtype - of the root breakpoint marker and are added to the breakpoint manager. To allow - for selective persistence of breakpoints (of the same kind), the <b>IBreakpoint</b> - interface and root breakpoint implementation defines a "persisted" - attribute. If this value is set to false, the breakpoint will not be persisted - across workspace invocations.</p> - -<p>As breakpoint markers are modified (created, removed, and changed), resource - deltas are created by the platform. The breakpoint manager translates pertinent - resource deltas into breakpoint change notifications (breakpoint added/removed/changed - messages). Interested listeners may register with the breakpoint manager. The - breakpoint manager only fires change notifications for registered breakpoints. - This simplifies breakpoint processing for clients, as resource delta traversal - and analysis is not required. Debug targets that support breakpoints should - register for breakpoint change notifications.</p> -<h4>New Features in the Debug Model, Eclipse 3.0</h4> -<blockquote> - <h4>Launch Delegate Enhancements<br> - </h4> - <p>Lanuch delegates can optionally implement the new interface <code>ILaunchConfigurationDelegate2</code>. - This allows launch delegates to provide a launch object to be used for a launch. - For example, when debugging on a server a delegate could create a new launch - object or may reuse an existing launch object if the server is already running - in debug mode. As well, the inteface provides a mechanism for performing a - scoped build prior to launching (i.e. scoped to the projects in the workspace - pertaining to the launch), and searching for errors in the workspace which - may prevent the launch from succeeding (for example, compilation errors).</p> - <p></p> - <h4>Extensible Watch Expressions</h4> - <p>The debug platform provides an implementation of watch expressions. Debug - models can contribute watch expression delegates if they support watch expressions. - When a stack frame is selected, the associated delegate is queried to provide - a value for a watch expression in that context. The debug platform provides - persistence, enabling, disabling, entering, and editing of watch expressions.</p> - <h4>Automatic Array Partitioning<br> - </h4> - <p>The debug plug-in supports automatic partitioning of indexed collections, - which partitions large arrays into sub-ranges in the variables view. This - is supported with the introduction of a new interface in the debug model representing - an indexed value - <code>IIndexedValue</code>. If a value implements this - interface, the variables view will automatically partition its elements as - required, into sub-ranges</p> - <h4>Logical Structure Types<br> - </h4> - <p>Often, it is convenient to navigate complex data structures in terms of a - logical structure, rather than an implementation structure. For example, no - matter how a list is implemented (i.e. linked list, collection of arrays, - etc.), it is often convenient to be able to view the list as an ordered collection. - To facilitate the display of logical structures in the variables view, an - extension point has been added (<code>org.eclipse.debug.core.logicalStructureTypes</code>) - allowing debug models to contribute logical structures of its values, where - applicable. Debug models may contribute delegates to translate raw implementation - values into logical values. The variables view will display the logical values, - when the option to display logical structures is turned on. More than one - logical structure can be provided for a single value - the user can choose - which structure to display.</p> - <h4>Step Filters<br> - </h4> - <p>To support step filters on all stepping functions (into, over, return), a - new interface has been added to the debug platform - <code>IStepFilters</code> - - which can be implemented by debug targets. This interface replaces <code>IFilteredStep</code>, - which is now deprecated. The debugger provides a global toggle that turns - step filters on/off for all stepping functions. Debug targets should implement - this new interface and honor the step filter enablement setting when stepping.</p> - <p>This change maintains binary compatibility with previous releases. However, - targets wishing to leverage the new function must implement the new interface.<br> - </p> -</blockquote> -</body> -</html> diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/package.html b/org.eclipse.debug.core/core/org/eclipse/debug/core/package.html deleted file mode 100644 index 069ad320f..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/package.html +++ /dev/null @@ -1,115 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> - -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<title>Eclipse Debug Platform</title> -</head> - -<body bgcolor="#FFFFFF"> - -<p>Provides support for launching programs, breakpoint management, expression management, -and debug events.</p> - -<h2>Package Specification</h2> - -<p>This package provides classes and interfaces to support facilities common among - many debug architectures: launching programs, breakpoint management, expression - management, and debug events. An extensible set of debug architectures and languages - are supported by the definition of a "debug model" - a set of interfaces - representing common artifacts in debuggable programs, which are defined in <b>org.eclipse.debug.core.model</b>. - The debug plug-in itself does not provide an implementation of a debug model. - It is intended that third parties providing an integrated set of development - tools for a specific language will also implement a debug model for that language, - using an underlying debug architecture of their choice. For example, Java development - tooling provides an implementation of a debug model based on the standard Java - Platform Debug Architecture (JPDA).</p> - -<h4>The Managers</h4> - -<p>The debug platform defines and provides an implementation of the following managers: -<ul> - <li>Launch Manager - The launch manager maintains the set of registered launches - - that is, a collection of programs that have been launched in debuggable - or non-debuggable (run) mode. Each launch contains its associated debug targets - and system processes. A launch that represents a debuggable program may specify - an associated source locator used to locate source elements associated with - stack frames for a particular debug session. Clients may provide implementations - of source locators, which are generally tied to the manner in which a program - is launched.</li> - <li>Breakpoint Manager - The breakpoint manager maintains, persists, and restores the collection - of all registered breakpoints in the workspace. As well, it provides change notification for - breakpoints.</li> - <li>Expression Manager - The expression manager maintains a collection of registered expressions. - Expressions are not automatically persisted, but a client could persist its own expressions - if required.</li> -</ul> -<p></p> - -<h4>Launch Configurations</h4> - -<p>A launch configuration is a persistable description of how to launch an application. - Each launch configuration is an instance of a type of launch configuration - - for example, a Java Application. The debug plug-in defines a launch configuration - type extension point that clients can contribute to. A launch configuration - is a set of attributes describing how to launch a program. The launching of - an application is performed by an associated implementation of a launch configuration - delegate, contributed by each launch configuration type extension.</p> -<p>A launch configuration may be stored as a file in the worksapce (and shared - in a repository via standard team mechanisms), or may be stored locally, essentially - making the launch configuration private for a single user.</p> -<h4>New Features in the Debug Platform, Eclipse 3.0</h4> -<blockquote> - <h4>Extensible Launch Modes</h4> - <p>The debug platform supports an extensible set of launch modes. Prior releases - only supported two launch modes - run and debug. The debug platform defines - an extension point for contributing new launch modes (<code>org.eclipse.debug.core.launchModes)</code>, - and contributes three basic launch modes itself: run, debug, and profile. - The launch manager has API to retrieve all launch modes, and a human readable - label for each launch mode.</p> - <p>The debug platform has an extension point to support the contribution of - a launch delegate for a specific launch configuration type and launch mode - - <code>org.eclipse.debug.core.launchDelegates</code>. This allows launch - configurations to be extended by third parties, to support new launch modes. - For example, a client could contribute a launch delegate that launches a Java - Application in profile mode (currently, the SDK does not provide a Java profiler).</p> - <p>For backwards compatibility, the launch delegate supplied by a launch configuration - type extension is used for the launch modes specified by the launch configuration - type. A launch delegate supplied for a specific mode, is used only for that - mode.</p> - <h4>Extensible Debug Events</h4> - <p>The debug platform supports an extensible set of debug events. A debug event - kind of <code>MODEL_SPECIFIC</code> has been added to indicate an application - specific debug event. When a debug event of kind <code>MODEL_SPECIFIC</code> - is created, the detail code in the event is client defined. The source of - the event (debug element that generated the event) identifies the debug model - from which the event was generated. The debug platform and user interface - ignores model specific debug events.</p> - <p>A data field has been added to debug events to allow clients to store application - specific data in debug events.<br> - </p> - <h4>Process Factories<br> - </h4> - <p>The debug platform provides an extension point (<code>org.eclipse.debug.core.processFactories</code>) - for contributing process factories. A process factory can be used to override - default process creation for a launch configuration when the debug plug-in - creates a new process. A launch configuration can specify a process factory - to use when creating a process, via the launch configuration attribute<code> - DebugPlugin.ATTR_PROCESS_FACTORY_ID</code>.</p> - <h4>Launch Termination Notification<br> - </h4> - <p>The debug platform provides a mechanism for launch listeners to be notified - when a launch terminates. A launch is a container of processes and debug targets. - When all of the contained targets and processes terminate, a terminate notification - is sent to those listeners implementing <code>ILaunchesListener2</code>.</p> - <h4>Breakpoint Manager Enablement<br> - </h4> - <p>The breakpoint manager defines the methods <code>setEnabled(boolean)</code> - and <code>isEnabled()</code>. When the breakpoint manager is disabled, debuggers - should ignore all registered breakpoints. The debug platform also provides - a new listener mechanism, <code>IBreakpointManagerListener</code> which allows - clients to register with the breakpoint manager to be notified when its enablement - changes.</p> -</blockquote> -</body> -</html> diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java deleted file mode 100644 index ef418b410..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java +++ /dev/null @@ -1,717 +0,0 @@ - /******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationListener; -import org.eclipse.debug.core.ILaunchListener; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.IStatusHandler; -import org.eclipse.debug.core.model.IStackFrame; -import org.eclipse.debug.core.sourcelookup.containers.DefaultSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Directs source lookup among a collection of source lookup participants, - * and a common collection of source containers. - * Each source lookup participant is a source locator itself, which allows - * more than one source locator to participate in source lookup for a - * launch. Each source lookup participant searches for source in the source - * containers managed by this director, and each participant is notified - * of changes in the source containers (i.e. when the set of source - * containers changes). - * <p> - * When a source director is intilaized, it adds it self as a launch listener, - * and automatically disposes itself when its associated launch is removed - * from the launch manager. If a source director is instantiated by a client - * that is not part of a launch, that client is responsible for disposing - * the source director. - * </p> - * <p> - * This class is yet experimental. - * </p> - * <p> - * Clients may subclass this class. - * </p> - * @since 3.0 - * @see org.eclipse.debug.core.model.ISourceLocator - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer - * @see org.eclipse.debug.core.sourcelookup.ISourceContainerType - * @see org.eclipse.debug.core.sourcelookup.ISourcePathComputer - * @see org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant - */ -public abstract class AbstractSourceLookupDirector implements ISourceLookupDirector, ILaunchConfigurationListener, ILaunchListener { - - // source locator type identifire - protected String fId; - //ISourceLocatorParticipants that are listening for container changes - protected ArrayList fParticipants = new ArrayList(); - //list of current source containers - protected ISourceContainer[] fSourceContainers = null; - //the launch config associated with this director - protected ILaunchConfiguration fConfig; - //whether duplicates should be searched for or not - protected boolean fDuplicates = false; - // source path computer, or null if default - protected ISourcePathComputer fComputer = null; - /** - * Cache of resolved source elements when duplicates exist. - * Keys are the duplicates, values are the source element to use. - */ - protected Map fResolvedElements = null; - - protected static final IStatus fPromptStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 200, "", null); //$NON-NLS-1$//$NON-NLS-2$ - protected static final IStatus fResolveDuplicatesStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 205, "", null); //$NON-NLS-1$//$NON-NLS-2$ - - // XML nodes & attributes for persistence - protected static final String DIRECTOR_ROOT_NODE = "sourceLookupDirector"; //$NON-NLS-1$ - protected static final String CONTAINERS_NODE = "sourceContainers"; //$NON-NLS-1$ - protected static final String DUPLICATES_ATTR = "duplicates"; //$NON-NLS-1$ - protected static final String CONTAINER_NODE = "container"; //$NON-NLS-1$ - protected static final String CONTAINER_TYPE_ATTR = "typeId"; //$NON-NLS-1$ - protected static final String CONTAINER_MEMENTO_ATTR = "memento"; //$NON-NLS-1$ - - class SourceLookupQuery implements ISafeRunnable { - - private List fSourceElements = new ArrayList(); - private Object fElement = null; - - SourceLookupQuery(Object element) { - fElement = element; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - DebugPlugin.log(exception); - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - MultiStatus multiStatus = null; - CoreException single = null; - for(int i=0; i < fParticipants.size(); i++) { - Object[] sourceArray; - try { - sourceArray = ((ISourceLookupParticipant)fParticipants.get(i)).findSourceElements(fElement); - if (sourceArray !=null && sourceArray.length > 0) { - if (isFindDuplicates()) { - for(int j=0; j<sourceArray.length; j++) - if(!checkDuplicate(sourceArray[j], fSourceElements)) - fSourceElements.add(sourceArray[j]); - } else { - fSourceElements.add(sourceArray[0]); - return; - } - } - } catch (CoreException e) { - if (single == null) { - single = e; - } else if (multiStatus == null) { - multiStatus = new MultiStatus(DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, new IStatus[]{single.getStatus()}, SourceLookupMessages.getString("AbstractSourceLookupDirector.19"), null); //$NON-NLS-1$ - multiStatus.add(e.getStatus()); - } else { - multiStatus.add(e.getStatus()); - } - } - } - if (fSourceElements.isEmpty()) { - // throw exception if there was one - if (multiStatus != null) { - throw new CoreException(multiStatus); - } else if (single != null) { - throw single; - } - } - } - - public List getSourceElements() { - return fSourceElements; - } - - public void dispose() { - fElement = null; - fSourceElements = null; - } - - } - - /** - * Constructs source lookup director - */ - public AbstractSourceLookupDirector() { - } - - /** - * Sets the type identifier for this source locator's type - * - * @param id corresponds to source locator type identifier for a - * persistable source locator - */ - public void setId(String id) { - fId = id; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.IPersistableSourceLocator2#dispose() - */ - public void dispose() { - ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - launchManager.removeLaunchConfigurationListener(this); - launchManager.removeLaunchListener(this); - Iterator iterator = fParticipants.iterator(); - while (iterator.hasNext()) { - ISourceLookupParticipant participant = (ISourceLookupParticipant) iterator.next(); - //director may also be a participant - if(participant != this) - participant.dispose(); - } - fParticipants.clear(); - if (fSourceContainers != null) { - for (int i = 0; i < fSourceContainers.length; i++) { - fSourceContainers[i].dispose(); - } - } - fSourceContainers = null; - fResolvedElements = null; - } - - /** - * Throws an exception with the given message and underlying exception. - * - * @param message error message - * @param exception underlying exception, or <code>null</code> - * @throws CoreException - */ - protected void abort(String message, Throwable exception) throws CoreException { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, message, exception); - throw new CoreException(status); - } - - /** - * Constructs source containers from a list of container mementos. - * - * @param list the list of nodes to be parsed - * @exception CoreException if parsing encounters an error - * @return a list of source containers - */ - private List parseSourceContainers(NodeList list) throws CoreException { - List containers = new ArrayList(); - for (int i=0; i < list.getLength(); i++) { - if(!(list.item(i).getNodeType() == Node.ELEMENT_NODE)) - continue; - Element element = (Element)list.item(i); - String typeId = element.getAttribute(CONTAINER_TYPE_ATTR); - if (typeId == null || typeId.equals("")) { //$NON-NLS-1$ - abort(SourceLookupMessages.getString("AbstractSourceLookupDirector.11"), null); //$NON-NLS-1$ - } - ISourceContainerType type = DebugPlugin.getDefault().getLaunchManager().getSourceContainerType(typeId); - if(type == null) { - abort(MessageFormat.format(SourceLookupMessages.getString("AbstractSourceLookupDirector.12"), new String[]{typeId}), null); //$NON-NLS-1$ - } - String memento = element.getAttribute(CONTAINER_MEMENTO_ATTR); - if (memento == null || memento.equals("")) { //$NON-NLS-1$ - abort(SourceLookupMessages.getString("AbstractSourceLookupDirector.13"), null); //$NON-NLS-1$ - } - ISourceContainer container = type.createSourceContainer(memento); - containers.add(container); - } - return containers; - } - - /** - * Registers the given source lookup participant. Has no effect if an identical - * participant is already registered. Paticipants receive notification - * when the source containers associated with this source director change. - * - * @param participant the particiapant to register - */ - private void addSourceLookupParticipant(ISourceLookupParticipant participant) { - if (!fParticipants.contains(participant)) { - fParticipants.add(participant); - participant.init(this); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#getSourceContainers() - */ - public ISourceContainer[] getSourceContainers() { - if (fSourceContainers == null) { - return new ISourceContainer[0]; - } - ISourceContainer[] copy = new ISourceContainer[fSourceContainers.length]; - System.arraycopy(fSourceContainers, 0, copy, 0, fSourceContainers.length); - return copy; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#isFindDuplicates() - */ - public boolean isFindDuplicates() { - return fDuplicates; - } - - /** - * Sets whether source containers should be searched exhaustively for - * applicable source elements or if only the first match should be located. - * - * @param duplicates whether source containers should be searched exhaustively for - * applicable source elements or if only the first match should be located - */ - public void setFindDuplicates(boolean duplicates) { - fDuplicates = duplicates; - } - - /** - * Removes the given participant from the list of registered partipants. - * Has no effect if an identical participant is not already registered. - * - * @param participant the participant to remove - */ - private void removeSourceLookupParticipant(ISourceLookupParticipant participant) { - if (fParticipants.remove(participant)) { - participant.dispose(); - } - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationAdded(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationAdded(ILaunchConfiguration configuration) { - } - - /* (non-Javadoc) - * - * Updates source containers in repsonse to changes in underlying launch - * configuration. Only responds to changes in non-working copies. - * - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationChanged(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationChanged(ILaunchConfiguration configuration) { - if (fConfig == null || configuration.isWorkingCopy()) { - return; - } - if(fConfig.equals(configuration)) { - try{ - String locatorMemento = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO,(String)null); - if (locatorMemento == null) { - initializeDefaults(configuration); - } else { - initializeFromMemento(locatorMemento, configuration); - } - } catch (CoreException e){ - } - } - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationRemoved(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationRemoved(ILaunchConfiguration configuration) { - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IPersistableSourceLocator#getMemento() - */ - public String getMemento() throws CoreException { - Document doc = DebugPlugin.newDocument(); - Element rootNode = doc.createElement(DIRECTOR_ROOT_NODE); - doc.appendChild(rootNode); - - Element pathNode = doc.createElement(CONTAINERS_NODE); - if(fDuplicates) { - pathNode.setAttribute(DUPLICATES_ATTR, "true"); //$NON-NLS-1$ - } else { - pathNode.setAttribute(DUPLICATES_ATTR, "false"); //$NON-NLS-1$ - } - rootNode.appendChild(pathNode); - if(fSourceContainers !=null){ - for(int i=0; i<fSourceContainers.length; i++){ - Element node = doc.createElement(CONTAINER_NODE); - ISourceContainer container = fSourceContainers[i]; - ISourceContainerType type = container.getType(); - node.setAttribute(CONTAINER_TYPE_ATTR, type.getId()); - node.setAttribute(CONTAINER_MEMENTO_ATTR, type.getMemento(container)); - pathNode.appendChild(node); - } - } - return DebugPlugin.serializeDocument(doc); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeFromMemento(java.lang.String) - */ - public void initializeFromMemento(String memento) throws CoreException { - doInitializeFromMemento(memento, true); - } - - /** - * Initializes this source lookup director from the given memento. - * Disposes itself before initialization if specified. - * - * @param memento source locator memento - * @param dispose whether to dispose any current source containers and participants - * before initializing - * @throws CoreException if an exception occurrs during initialization - */ - protected void doInitializeFromMemento(String memento, boolean dispose) throws CoreException { - if (dispose) { - dispose(); - } - Element rootElement = DebugPlugin.parseDocument(memento); - if (!rootElement.getNodeName().equalsIgnoreCase(DIRECTOR_ROOT_NODE)) { - abort(SourceLookupMessages.getString("AbstractSourceLookupDirector.14"), null); //$NON-NLS-1$ - } - NodeList list = rootElement.getChildNodes(); - int length = list.getLength(); - for (int i = 0; i < length; ++i) { - Node node = list.item(i); - short type = node.getNodeType(); - if (type == Node.ELEMENT_NODE) { - Element entry = (Element) node; - if(entry.getNodeName().equalsIgnoreCase(CONTAINERS_NODE)){ - setFindDuplicates("true".equals(entry.getAttribute(DUPLICATES_ATTR))); //$NON-NLS-1$ - NodeList children = entry.getChildNodes(); - List containers = parseSourceContainers(children); - setSourceContainers((ISourceContainer[]) containers.toArray(new ISourceContainer[containers.size()])); - } - } - } - initializeParticipants(); - } - - /** - * Sets the source containers used by this source lookup - * director. - * - * @param containers source containers to search - */ - public void setSourceContainers(ISourceContainer[] containers) { - ISourceContainer[] old = getSourceContainers(); - for (int i = 0; i < old.length; i++) { - old[i].dispose(); - } - fSourceContainers = containers; - for (int i = 0; i < containers.length; i++) { - ISourceContainer container = containers[i]; - container.init(this); - } - // clear resolved duplicates - fResolvedElements = null; - // notify participants - ISourceLookupParticipant[] participants = getParticipants(); - for (int i = 0; i < participants.length; i++) { - ISourceLookupParticipant participant = participants[i]; - participant.sourceContainersChanged(this); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(org.eclipse.debug.core.model.IStackFrame) - * Would be better to accept Object so this can be used for breakpoints and other objects. - */ - public Object getSourceElement(IStackFrame stackFrame) { - return getSourceElement((Object)stackFrame); - } - - /** - * Performs a source lookup query for the given element - * returning the source elements associated with the element. - * - * @param element stack frame - * @return list of associated source elements - */ - protected List doSourceLookup(Object element) { - SourceLookupQuery query = new SourceLookupQuery(element); - Platform.run(query); - List sources = query.getSourceElements(); - query.dispose(); - return sources; - } - - /** - * Returns the source element to associate with the given element. - * This method is called when more than one source element has been found - * for an element, and allows the source director to select a single - * source element to associate with the element. - * <p> - * Subclasses should override this method as appropriate. For example, - * to prompt the user to choose a source element. - * </p> - * @param element the debug artifact for which source is being searched for - * @param sources the source elements found for the given element - * @return a single source element for the given element - */ - public Object resolveSourceElement(Object element, List sources) { - // check the duplicates cache first - Iterator duplicates = sources.iterator(); - while (duplicates.hasNext()) { - Object dup = duplicates.next(); - Object resolved = getCachedElement(dup); - if (resolved != null) { - return resolved; - } - } - // consult a status handler - IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(fPromptStatus); - if (prompter != null) { - try { - Object result = prompter.handleStatus(fResolveDuplicatesStatus, new Object[]{element, sources}); - if (result != null) { - cacheResolvedElement(sources, result); - return result; - } - } catch (CoreException e) { - } - } - return sources.get(0); - } - - /** - * Checks if the object being added to the list of sources is a duplicate of what's already in the list - * @param sourceToAdd the new source file to be added - * @param sources the list that the source will be compared against - * @return true if it is already in the list, false if it is a new object - */ - private boolean checkDuplicate(Object sourceToAdd, List sources){ - if(sources.size() == 0) - return false; - Iterator iterator = sources.iterator(); - while(iterator.hasNext()) - if(iterator.next().equals(sourceToAdd)) - return true; - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.IPersistableSourceLookupDirector#initializeFromMemento(java.lang.String, org.eclipse.debug.core.ILaunchConfiguration) - */ - public void initializeFromMemento(String memento, ILaunchConfiguration configuration) throws CoreException { - dispose(); - setLaunchConfiguration(configuration); - doInitializeFromMemento(memento, false); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeDefaults(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void initializeDefaults(ILaunchConfiguration configuration) throws CoreException { - dispose(); - setLaunchConfiguration(configuration); - setSourceContainers(new ISourceContainer[]{new DefaultSourceContainer()}); - initializeParticipants(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#getLaunchConfiguration() - */ - public ILaunchConfiguration getLaunchConfiguration() { - return fConfig; - } - - /** - * Sets the launch configuration associated with this source lookup - * director. If the given configuration is a working copy, this director - * will respond to changes the working copy. If the given configuration - * is a persisted launch configration, this director will respond to changes - * in the persisted launch configuration. - * - * @param configuration launch configuration to associate with this - * source lookup director, or <code>null</code> if none - */ - protected void setLaunchConfiguration(ILaunchConfiguration configuration) { - fConfig = configuration; - ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - launchManager.addLaunchConfigurationListener(this); - launchManager.addLaunchListener(this); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchListener#launchAdded(org.eclipse.debug.core.ILaunch) - */ - public void launchAdded(ILaunch launch) { - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchListener#launchChanged(org.eclipse.debug.core.ILaunch) - */ - public void launchChanged(ILaunch launch) { - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchListener#launchRemoved(org.eclipse.debug.core.ILaunch) - */ - public void launchRemoved(ILaunch launch) { - if (this.equals(launch.getSourceLocator())) { - dispose(); - } - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#getParticipants() - */ - public ISourceLookupParticipant[] getParticipants() { - return (ISourceLookupParticipant[]) fParticipants.toArray(new ISourceLookupParticipant[fParticipants.size()]); - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#supportsSourceContainerType(org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType) - */ - public boolean supportsSourceContainerType(ISourceContainerType type) { - return true; - } - - /** - * Caches the resolved source element to use when one of the following - * duplicates is found. - * - * @param duplicates duplicates source elemnets - * @param sourceElement chosen source element to use in place of the - * duplicates - */ - protected void cacheResolvedElement(List duplicates, Object sourceElement) { - if (fResolvedElements == null) { - fResolvedElements = new HashMap(10); - } - Iterator iterator = duplicates.iterator(); - while (iterator.hasNext()) { - Object dup = iterator.next(); - fResolvedElements.put(dup, sourceElement); - } - - } - - /** - * Returns the cached source element to use when the given duplicate - * is encountered. - * - * @param duplicate duplicates source element - * @return element to use in the duplicate's place - */ - protected Object getCachedElement(Object duplicate) { - if (fResolvedElements != null) { - return fResolvedElements.get(duplicate); - } - return null; - } - - /** - * Clears any cached source element associated with the given duplicate - * is source elemnet. - * - * @param duplicate duplicate source element to cache resolved results - * for - */ - protected void clearCachedElement(Object duplicate) { - if (fResolvedElements != null) { - fResolvedElements.remove(duplicate); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#clearSourceElements(java.lang.Object) - */ - public void clearSourceElements(Object element) { - List list = doSourceLookup(element); - if (list.size() > 0) { - Iterator iterator = list.iterator(); - while (iterator.hasNext()) { - clearCachedElement(iterator.next()); - } - } - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#addParticipants(org.eclipse.debug.internal.core.sourcelookup.ISourceLookupParticipant[]) - */ - public void addParticipants(ISourceLookupParticipant[] participants) { - for (int i = 0; i < participants.length; i++) { - ISourceLookupParticipant participant = participants[i]; - addSourceLookupParticipant(participant); - participant.sourceContainersChanged(this); - } - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#removeParticipants(org.eclipse.debug.internal.core.sourcelookup.ISourceLookupParticipant[]) - */ - public void removeParticipants(ISourceLookupParticipant[] participants) { - for (int i = 0; i < participants.length; i++) { - removeSourceLookupParticipant(participants[i]); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#getId() - */ - public String getId() { - return fId; - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceLookupDirector#getSourcePathComputer() - */ - public ISourcePathComputer getSourcePathComputer() { - if (fComputer == null && getLaunchConfiguration() != null) { - try { - return DebugPlugin.getDefault().getLaunchManager().getSourcePathComputer(getLaunchConfiguration()); - } catch (CoreException e) { - } - } - return fComputer; - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceLookupDirector#setSourcePathComputer(org.eclipse.debug.core.sourcelookup.ISourcePathComputer) - */ - public void setSourcePathComputer(ISourcePathComputer computer) { - fComputer = computer; - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceLookupDirector#findSourceElements(java.lang.Object) - */ - public Object[] findSourceElements(Object object) throws CoreException { - SourceLookupQuery query = new SourceLookupQuery(object); - Platform.run(query); - List sources = query.getSourceElements(); - query.dispose(); - return sources.toArray(); - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceLookupDirector#getSourceElement(java.lang.Object) - */ - public Object getSourceElement(Object element) { - List sources = doSourceLookup(element); - if(sources.size() == 1) { - return sources.get(0); - } else if(sources.size() > 1) { - return resolveSourceElement(element, sources); - } else { - return null; - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java deleted file mode 100644 index 8e54d1199..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupParticipant.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; - - -/** - * Common super class for implementations of source lookup participants. - * <p> - * Clients implementing source lookup participants should subclass this class. - * </p> - * @since 3.0 - */ -public abstract class AbstractSourceLookupParticipant implements ISourceLookupParticipant { - - private ISourceLookupDirector fDirector; - - protected static final Object[] EMPTY = new Object[0]; - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupParticipant#init(org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector) - */ - public void init(ISourceLookupDirector director) { - fDirector = director; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupParticipant#dispose() - */ - public void dispose() { - fDirector = null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupParticipant#findSourceElements(java.lang.Object) - */ - public Object[] findSourceElements(Object object) throws CoreException { - List results = null; - if (isFindDuplicates()) { - results = new ArrayList(); - } - String name = getSourceName(object); - if (name != null) { - ISourceContainer[] containers = getSourceContainers(); - for (int i = 0; i < containers.length; i++) { - ISourceContainer container = getDelegateContainer(containers[i]); - if (container != null) { - Object[] objects = container.findSourceElements(name); - if (objects.length > 0) { - if (isFindDuplicates()) { - for (int j = 0; j < objects.length; j++) { - results.add(objects[j]); - } - } else { - if (objects.length == 1) { - return objects; - } - return new Object[]{objects[0]}; - } - } - } - } - } - if (results == null) { - return EMPTY; - } - return results.toArray(); - } - - /** - * Returns the source container to search in place of the given source - * container, or <code>null</code> if the given source container is not - * to be searched. The default implementation does not translate source - * containers. Subclasses should override if required. - * - * @param container the source container about to be searched (proxy) - * @return the source container to be searched (delegate), or <code>null</code> - * if the source container should not be searched - */ - protected ISourceContainer getDelegateContainer(ISourceContainer container) { - return container; - } - - /** - * Returns the source lookup director this participant is registered with - * or <code>null</code> if none. - * - * @return the source lookup director this participant is registered with - * or <code>null</code> if none - */ - protected ISourceLookupDirector getDirector() { - return fDirector; - } - - /** - * Returns whether this participant's source lookup director is configured - * to search for duplicate source elements. - * - * @return whether this participant's source lookup director is configured - * to search for duplicate source elements - */ - protected boolean isFindDuplicates() { - return getDirector().isFindDuplicates(); - } - - /** - * Returns the source containers currently registered with this participant's - * source lookup director. - * - * @return the source containers currently registered with this participant's - * source lookup director - */ - protected ISourceContainer[] getSourceContainers() { - return getDirector().getSourceContainers(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupParticipant#sourceContainersChanged(org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector) - */ - public void sourceContainersChanged(ISourceLookupDirector director) { - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/IPersistableSourceLocator2.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/IPersistableSourceLocator2.java deleted file mode 100644 index 2e986321a..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/IPersistableSourceLocator2.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.model.IPersistableSourceLocator; - -/** - * Extensions to the <code>IPersistableSourceLocator</code> interface. - * - * @see org.eclipse.debug.core.model.IPersistableSourceLocator - * @since 3.0 - */ -public interface IPersistableSourceLocator2 extends IPersistableSourceLocator { - - /** - * Initializes this source locator based on the given - * memento, for the given launch configuration. This method - * is called instead of <code>initializeFrom(String memento)</code> - * defined in <code>IPersistableSourceLocator</code> when a source - * locator implements this interface. - * - * @param memento a memento to initialize this source locator - * @param configuration the launch configuration this source locator is - * being created for - * @exception CoreException on failure to initialize - */ - public void initializeFromMemento(String memento, ILaunchConfiguration configuration) throws CoreException; - - /** - * Disposes this source locator. This method is called when a source - * locator's associated launch is removed from the launch manager. - */ - public void dispose(); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainer.java deleted file mode 100644 index ee146a7f2..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainer.java +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; - -/** - * A source container is a container of source code. A source container is - * capable of searching for source elements by name. For example, a source - * container may be a project or a directory capable of searching for files - * by name. A source container may be a composite container - i.e. contain - * other source containers. - * <p> - * When a source container is created and added to a source director, the - * source container's <code>dispose()</code> method is called when the - * source director is disposed. Clients creating source containers for other - * purposes must dispose of containers themselves. - * </p> - * - * @see ISourceLookupParticipant - * @see ISourceContainerType - * @since 3.0 - */ -public interface ISourceContainer extends IAdaptable { - - /** - * Notifiation this source container has been added to the given - * source lookup director. - * - * @param director the director this container has been added to - */ - public void init(ISourceLookupDirector director); - - /** - * Returns a collection of source elements in this container corresponding to the - * given name. Returns an empty collection if no source elements are found. - * This source container's source lookup director specifies if duplicate - * source elements should be searched for, via <code>isFindDuplicates()</code>. - * When <code>false</code> the returned collection should contain at most one - * source element. If this is a composite container, the containers contained - * by this container are also searched. - * <p> - * The format of the given name is implementation specific but generally conforms - * to the format of a file name. If a source container does not recognize the - * name format provided, an empty collection should be returned. A source container - * may or may not require names to be fully qualified (i.e. be qualified with directory - * names). - * </p> - * @param name the name of the source element to search for - * @return a collection of source elements corresponding to the given name - * @exception CoreException if an exception occurrs while searching for source elements - */ - public Object[] findSourceElements(String name) throws CoreException; - - /** - * The name of this source container that can be used for presentation purposes. - * For example, the name of a project. - * - * @return the name of this source container - */ - public String getName(); - - /** - * Returns the source containers this container is composed of. An empty - * collection is returned if this container is not a composite container. - * For example, a workspace source container may be composed of project source - * containers. - * - * @return the source containers this container is composed of, possibly - * an empty collection - * @exception CoreException if unable to retrieve source containers - */ - public ISourceContainer[] getSourceContainers() throws CoreException; - - /** - * Returns whether this container is a composite container. A composite - * container is composed of other source containers. For example, a workspace - * source container may be composed of project source containers. - * - * @return whether this container is a composite container - */ - public boolean isComposite(); - - /** - * Returns this container's type. - * - * @return this container's type - */ - public ISourceContainerType getType(); - - /** - * Disposes this source container. This method is called when the source - * director associated with this source container is disposed. - */ - public void dispose(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainerType.java deleted file mode 100644 index b788d8963..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainerType.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - - - -/** - * A source container type represents a kind of container of source code. - * For example, a source container type may be a project or a directory. A specific - * project or directory is represented by an instance of a source container type, - * which is called a source container (<code>ISourceContainer</code>). - * <p> - * A source container type is contributed via the <code>sourceContainerTypes</code> - * extension point, providing a delegate to the work specific to the contributed - * type. Following is an example contribution. - * <pre> - * <extension point="org.eclipse.debug.core.sourceContainerTypes"> - * <sourceContainerType - * name="Project" - * class="org.eclipse.debug.internal.core.sourcelookup.containers.ProjectSourceContainerType" - * id="org.eclipse.debug.core.containerType.project" - * description="A project in the workspace"> - * </sourceContainerType> - * </extension> - * </pre> - * </p> - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer - * @see org.eclipse.debug.core.sourcelookup.ISourceContainerTypeDelegate - * @since 3.0 - */ -public interface ISourceContainerType extends ISourceContainerTypeDelegate { - - /** - * Returns the name of this source container type that can be used for - * presentation purposes. For example, <code>Working Set</code> or - * <code>Project</code>. The value returned is - * identical to the name specified in plugin.xml by the <code>name</code> - * attribute. - * - * @return the name of this source container type - */ - public String getName(); - - /** - * Returns the unique identifier associated with this source container type. - * The value returned is identical to the identifier specified in plugin.xml by - * the <code>id</code> attribute. - * - * @return the unique identifier associated with this source container type - */ - public String getId(); - - /** - * Returns a short description of this source container type that can be used - * for presenetation purposes, or <code>null</code> if none. - * - * @return a short description of this source container type, or <code>null</code> - */ - public String getDescription(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainerTypeDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainerTypeDelegate.java deleted file mode 100644 index 75ca4a2ba..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceContainerTypeDelegate.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; - -/** - * A source container type delegate represents a kind of container of source code. - * For example, a source container type may be a project or a directory. A specific - * project or directory is represented by an instance of a source container type, - * which is called a source container (<code>ISourceContainer</code>). - * <p> - * A source container type delegate is contributed via the - * <code>sourceContainerTypes</code> extension point. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer - * @see org.eclipse.debug.core.sourcelookup.ISourceContainerType - * @since 3.0 - */ -public interface ISourceContainerTypeDelegate { - - /** - * Creates and returns a new source container of this type - * corresponding to the given memento. - * - * @param memento a memento for a source conatiner of this source container type - * @return a source container corresponding to the given memento - * @exception CoreException if unable to construct a source container based - * on the given memento - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException; - - /** - * Constructs and returns a memento for the given source container. A memento - * can be used to reconstruct a source container. - * - * @param container The container for which a memento should be created. The - * container must of this source container type. - * @return a memento for the source container - * @exception CoreException if unable to create a memento - */ - public String getMemento(ISourceContainer container) throws CoreException; - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java deleted file mode 100644 index 5cc46ab9a..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java +++ /dev/null @@ -1,182 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; - -/** - * A source lookup director directs the source lookup process - * among a set of participants and source containers. - * <p> - * Clients may implement this interface. An astract implementation - * is provided by <code>AbstractSourceLookupDirector</code>, which - * clients should subclass. - * </p> - * @since 3.0 - */ -public interface ISourceLookupDirector extends IPersistableSourceLocator2 { - - /** - * Returns the launch configuration associated with this source - * lookup director, or <code>null</code> if none. - * - * @return the launch configuration associated with this source - * lookup director, or <code>null</code> if none - */ - public ILaunchConfiguration getLaunchConfiguration(); - - /** - * Returns the source lookup participants currently registered with - * this director, possibly an empty collection. - * - * @return the source lookup participants currently registered with - * this director, possibly an empty collection - */ - public ISourceLookupParticipant[] getParticipants(); - - /** - * Returns the source containers currently registered with this - * director, possibly an empty collection. - * - * @return the source containers currently registered with this - * director, possibly an empty collection - */ - public ISourceContainer[] getSourceContainers(); - - /** - * Sets the source containers this source lookup director - * should search when looking for source, possibly an empty collection. - * - * @param containers the source containers this source lookup director - * should search when looking for source, possibly an empty collection - */ - public void setSourceContainers(ISourceContainer[] containers); - - /** - * Returns whether to search exhaustively for all source elements - * with the same name in all registered source containers, or - * whether to stop searching when the first source element matching - * the required name is found. - * - * @return whether to search exhaustively for all source elements - * with the same name - */ - public boolean isFindDuplicates(); - - /** - * Sets whether to search exhaustively for all source elements - * with the same name in all registered source containers, or - * whether to stop searching when the first source element matching - * the required name is found. - * - * @param findDuplicates whether to search exhaustively for all source elements - * with the same name - */ - public void setFindDuplicates(boolean findDuplicates); - - /** - * Notifies this source lookup director that it should initialize - * its set of source lookup participants. - */ - public void initializeParticipants(); - - /** - * Returns whether this source director supports the given type - * of source location. - * - * @param type source container type - * @return whether this source director supports the given type - * of source location - */ - public boolean supportsSourceContainerType(ISourceContainerType type); - - /** - * Clears any source lookup results associated with the given - * debug artifact, such that a subsequent lookup will force a new search - * to be performed. - * - * @param element debug artifact to clear source lookup results for - */ - public void clearSourceElements(Object element); - - /** - * Adds the given source lookup participants to this director. - * - * @param participants participants to add - */ - public void addParticipants(ISourceLookupParticipant[] participants); - - /** - * Removes the given source lookup participants from this director. - * - * @param participants participants to remove - */ - public void removeParticipants(ISourceLookupParticipant[] participants); - - /** - * Returns the identifier of this type of source locator. - * - * @return the identifier of this type of source locator - */ - public String getId(); - - /** - * Returns the source path computer to use with this source lookup - * director, possibly <code>null</code>. By default, the source path - * computer returned is the one associated with this director's launch - * configuration's type. However, the source path computer can be specified - * programmatically by calling <code>setSourcePathComputer(...)</code>. - * - * @return the source path computer to use with this source lookup - * director, possibly <code>null</code> - */ - public ISourcePathComputer getSourcePathComputer(); - - /** - * Sets the source path computer for this source lookup director. - * This method can be used to override the default source path computer - * for a launch configuration type. When <code>null</code> is specified - * the default source path computer will be used (i.e. the one assocaited - * with this director's launch configuration's type). - * - * @param computer source path computer or <code>null</code> - */ - public void setSourcePathComputer(ISourcePathComputer computer); - - /** - * Returns a collection of source elements corresponding to the given debug - * artifact (for example, a stack frame or breakpoint). Returns an empty - * collection if no source elements are found. - * This participant's source lookup director specifies if duplicate - * source elements should be searched for, via <code>isFindDuplicates()</code>. - * When <code>false</code> the returned collection should contain at most one - * source element. - * - * @param object the debug artifact for which source needs to be found (e.g., stack frame) - * @return a collection of source elements corresponding to the given - * debug artifact, possibly empty - * @exception CoreException if an exception occurrs while searching for source - */ - public Object[] findSourceElements(Object object) throws CoreException; - - /** - * Returns a source element that corresponds to the given debug artifact, or - * <code>null</code> if a source element could not be located. This is a - * generalization of <code>getSourceElement(IStackFrame)</code> to allow - * source to be found for other types of elements. - * - * @param element the debug artifact for which to locate source - * @return an object representing a source element. - */ - public Object getSourceElement(Object element); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupParticipant.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupParticipant.java deleted file mode 100644 index 34aa354ff..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupParticipant.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; - -/** - * A source lookup participant participates in source lookup by searching an ordered - * list of source containers for source elements corresponding to a debug artifact. - * For example, a participant may be asked to find source corresponding to a stack - * frame or breakpoint. An implementation of a source lookup participant is debug - * model specific, since it must convert the debug model artifact (stack frame, - * breakpoint, etc.), into a source name that can be recognized by a source container - * (<code>ISourceContainer</code>), to search for source elements. Source containers - * are generally debug model independent, whereas source lookup participants are - * debug model specific. - * <p> - * Clients may implement this interface. An abstract implementation is - * provided by <code>AbstractSourceLookupParticipant</code>, which clients - * should subclass. - * </p> - * @since 3.0 - */ -public interface ISourceLookupParticipant { - - /** - * Notification this participant has been added to the specified - * source lookup director. - * - * @param director the source lookup director that this participant - * has been added to - */ - public void init(ISourceLookupDirector director); - - /** - * Returns a collection of source elements corresponding to the given debug - * artifact (for example, a stack frame or breakpoint). Returns an empty - * collection if no source elements are found. - * This participant's source lookup director specifies if duplicate - * source elements should be searched for, via <code>isFindDuplicates()</code>. - * When <code>false</code> the returned collection should contain at most one - * source element. - * <p> - * If the given debug artifact is not recognized by this participant, an empty - * collection is returned. Otherwise, this participant generates a source name - * from the given artifact and performs a search for associated source elements - * in its source containers. - * </p> - * @param object the debug artifact for which source needs to be found (e.g., stack frame) - * @return a collection of source elements corresponding to the given - * debug artifact, possibly empty - * @exception CoreException if an exception occurrs while searching for source - */ - public Object[] findSourceElements(Object object) throws CoreException; - - /** - * Returns the source file name associated with the given debug artifact that - * source needs to be found for, or <code>null</code> if none. - * - * @param object the debug artifact for which source needs to be found (e.g., stack frame) - * @return the source file name associated with the given debug artifact, - * or <code>null</code> if none. - * @throws CoreException if unable to determine a source file name - */ - public String getSourceName(Object object) throws CoreException; - - /** - * Disposes this source lookup participant. This method is called when - * the source lookup director assocaited with this participant is - * disposed. - */ - public void dispose(); - - /** - * Notification that the source lookup containers in the given source - * lookup director have changed. - * - * @param director source lookup director that is directing this - * participant - */ - public void sourceContainersChanged(ISourceLookupDirector director); -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourcePathComputer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourcePathComputer.java deleted file mode 100644 index 39e7467ca..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourcePathComputer.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.debug.core.DebugPlugin; - -/** - * A source path computer computes the default source lookup path (set of source - * containers that should be considered) for a launch configuration. - * <p> - * A source path computer is contributed in plug-in XML via the - * <code>sourcePathComputers</code> extension point, that provides a delegate - * to compute the path specific to a launch configuration. Following - * is an example contribution. - * <pre> - * <extension point="org.eclipse.debug.core.sourcePathComputers"> - * <sourcePathComputer - * id="org.eclipse.example.exampleSourcePathComputer" - * class="org.eclipse.example.SourcePathComputer"> - * </sourcePathComputer> - * </extension> - * </pre> - * </p> - * <p> - * A source path computer can be associated with a launch configuration type - * via the <code>sourcePathComputerId</code> attribute of a launch configuration - * type extension. As well, a launch configuration can specify its own - * source path computer to use via the <code>ATTR_SOURCE_PATH_COMPUTER_ID</code> - * attribute. - * </p> - * @since 3.0 - */ -public interface ISourcePathComputer extends ISourcePathComputerDelegate { - - /** - * Launch configuration attribute to specify a source path computer - * that should be used for a launch configuration. The value is an identifer - * of a source path computer extension, or unspecified (<code>null</code>), if the - * default source path computer should be used. A default source path computer - * can be associated with a launch configuration type. - */ - public static final String ATTR_SOURCE_PATH_COMPUTER_ID = DebugPlugin.getUniqueIdentifier() + ".SOURCE_PATH_COMPUTER_ID"; //$NON-NLS-1$ - - /** - * Returns the unique identifier for this source path computer. - * - * @return the unique identifier for this source path computer - */ - public String getId(); - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourcePathComputerDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourcePathComputerDelegate.java deleted file mode 100644 index c65ec91c9..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourcePathComputerDelegate.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.ILaunchConfiguration; - -/** - * A source path computer delegate computes the default source lookup path - * (set of source containers that should be considered) for a launch - * configuration. - * <p> - * A source path computer is contributed in plug-in XML via the - * <code>sourcePathComputers</code> extension point, providing a delegate - * to compute the default source lookup path specific to a launch - * configuration. - * </p> - * <p> - * Clients may implement this interface. - * </p> - * @see org.eclipse.debug.core.sourcelookup.ISourcePathComputer - * @since 3.0 - */ -public interface ISourcePathComputerDelegate { - - /** - * Returns a default collection source containers to be considered for the - * given launch configuration. The collection returned represents the default - * source lookup path for the given configuration. - * - * @param configuration the launch configuration for which a default source lookup path - * is to be computed - * @param monitor a progress monitor to be used in case of long operations - * @return a default collection source containers to be considered for the - * given launch configuration - * @exception CoreException if unable to compute a default source lookup path - */ - public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException; - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/AbstractSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/AbstractSourceContainer.java deleted file mode 100644 index 09c40c345..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/AbstractSourceContainer.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector; - -/** - * Common function for source containers. - * <p> - * Clients implementing source containers should subclass this class. - * </p> - * @since 3.0 - */ -public abstract class AbstractSourceContainer extends PlatformObject implements ISourceContainer { - - public static final Object[] EMPTY = new Object[0]; - - private ISourceLookupDirector fDirector; - - /** - * Throws an exception with the given message and underlying exception. - * - * @param message error message - * @param exception underlying exception, or <code>null</code> - * @throws CoreException - */ - protected void abort(String message, Throwable exception) throws CoreException { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, message, exception); - throw new CoreException(status); - } - - /* (non-Javadoc) - * - * By default, do nothing. Subclasses should override as requried. - * - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#dispose() - */ - public void dispose() { - fDirector = null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getSourceContainers() - */ - public ISourceContainer[] getSourceContainers() throws CoreException { - return new ISourceContainer[0]; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#isComposite() - */ - public boolean isComposite() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#init(org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector) - */ - public void init(ISourceLookupDirector director) { - fDirector = director; - } - - /** - * Returns the source lookup director this source container registered - * in, or <code>null</code> if none. - * - * @return the source lookup director this source container registered - * in, or <code>null</code> if none - */ - protected ISourceLookupDirector getDirector() { - return fDirector; - } - - /** - * Returns whether this container's source lookup director is configured - * to search for duplicate source elements. - * - * @return whether this container's source lookup director is configured - * to search for duplicate source elements - */ - protected boolean isFindDuplicates() { - return getDirector().isFindDuplicates(); - } - - /** - * Returns the source container type identified by the given id, - * or <code>null</code> if none. - * - * @param id source container type identifier - * @return source container type or <code>null</code> - */ - protected ISourceContainerType getSourceContainerType(String id) { - return DebugPlugin.getDefault().getLaunchManager().getSourceContainerType(id); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/AbstractSourceContainerTypeDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/AbstractSourceContainerTypeDelegate.java deleted file mode 100644 index 9d07e21c9..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/AbstractSourceContainerTypeDelegate.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainerTypeDelegate; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Common function for source container type delegates. - * <p> - * Clients implementing source container delegates should subclass this class. - * </p> - * @since 3.0 - */ -public abstract class AbstractSourceContainerTypeDelegate implements ISourceContainerTypeDelegate { - - /** - * Throws an exception with the given message and underlying exception. - * - * @param message error message - * @param exception underlying exception, or <code>null</code> - * @throws CoreException - */ - protected void abort(String message, Throwable exception) throws CoreException { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, message, exception); - throw new CoreException(status); - } - - /** - * Creates and returns a new XML document. - * - * @return a new XML document - * @throws CoreException if unable to create a new document - */ - protected Document newDocument()throws CoreException { - return DebugPlugin.newDocument(); - } - - /** - * Returns the given XML document as a string. - * - * @param document document to serialize - * @return the given XML document as a string - * @throws CoreException if unable to serialize the document - */ - protected String serializeDocument(Document document) throws CoreException { - return DebugPlugin.serializeDocument(document); - } - - /** - * Parses the given XML document, returning its root element. - * - * @param document XML document as a string - * @return the document's root element - * @throws CoreException if unable to parse the document - */ - protected Element parseDocument(String document) throws CoreException { - return DebugPlugin.parseDocument(document); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ArchiveSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ArchiveSourceContainer.java deleted file mode 100644 index 0d311228a..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ArchiveSourceContainer.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector; - -/** - * Archive source container for an archive in the workspace. Returns instances - * of <code>ZipEntryStorage</code> as source elemetns. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ -public class ArchiveSourceContainer extends AbstractSourceContainer { - - private IFile fFile; - private boolean fDetectRoot; - private ExternalArchiveSourceContainer fDelegateContainer; - - /** - * Unique identifier for the archive source container type - * (value <code>org.eclipse.debug.core.containerType.archive</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.archive"; //$NON-NLS-1$ - - /** - * Creates an archive source container on the given file. - * - * @param archive archive in the workspace - * @param detectRootPath whether a root path should be detected. When - * <code>true</code>, searching is performed relative to a root path - * within the archive based on fully qualified file names. The root - * path is automatically determined when the first successful search - * is performed. For example, when searching for a file named - * <code>a/b/c.d</code>, and an entry in the archive named - * <code>r/a/b/c.d</code> exists, the root path is set to <code>r</code>. - * From that point on, searching is performed relative to <code>r</code>. - * When <code>false</code>, searching is performed by - * matching file names as suffixes to the entries in the archive. - */ - public ArchiveSourceContainer(IFile archive, boolean detectRootPath) { - fFile = archive; - fDetectRoot = detectRootPath; - if (archive.exists() && archive.getLocation() != null) { - fDelegateContainer = new ExternalArchiveSourceContainer(archive.getLocation().toOSString(), detectRootPath); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() - */ - public String getName() { - return fFile.getName(); - } - - /** - * Returns the associated file in the workspace. - * - * @return associated file in the workspace - */ - public IFile getFile() { - return fFile; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - return obj instanceof ArchiveSourceContainer && - ((ArchiveSourceContainer)obj).getName().equals(getName()); - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getName().hashCode(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#findSourceElements(java.lang.String) - */ - public Object[] findSourceElements(String name) throws CoreException { - ExternalArchiveSourceContainer container = getDelegateContainer(); - if (container != null) { - return container.findSourceElements(name); - } - return EMPTY; - } - - /** - * Returns the underlying external archive source container. - * - * @return underlying external archive source container - * @since 3.0.1.1 - */ - private ExternalArchiveSourceContainer getDelegateContainer() { - return fDelegateContainer; - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#init(org.eclipse.debug.core.sourcelookup.ISourceLookupDirector) - */ - public void init(ISourceLookupDirector director) { - super.init(director); - if (fDelegateContainer != null) { - fDelegateContainer.init(director); - } - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#dispose() - */ - public void dispose() { - super.dispose(); - if (fDelegateContainer != null) { - fDelegateContainer.dispose(); - } - } - - /** - * Returns whether root paths are automatically detected in this - * archive source container. - * - * @return whether root paths are automatically detected in this - * archive source container - * @since 3.0.1.1 - */ - public boolean isDetectRoot() { - return fDetectRoot; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/CompositeSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/CompositeSourceContainer.java deleted file mode 100644 index 7ab80f92c..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/CompositeSourceContainer.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; - -/** - * A source container of source containers. - * <p> - * Clients implementing composite source containers should subclass - * this class. - * </p> - * @since 3.0 - */ -public abstract class CompositeSourceContainer extends AbstractSourceContainer { - - private ISourceContainer[] fContainers; - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#isComposite() - */ - public boolean isComposite() { - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#findSourceElements(java.lang.String) - */ - public Object[] findSourceElements(String name) throws CoreException { - return findSourceElements(name, getSourceContainers()); - } - - /** - * Returns a collection of source elements in the given containers corresponding to - * the given name. Returns an empty collection if no source elements are found. - * This source container's source lookup director specifies if duplicate - * source elements should be searched for, via <code>isFindDuplicates()</code>. - * When <code>false</code> the returned collection should contain at most one - * source element. If this is a composite container, the containers contained - * by this container are also searched. - * <p> - * The format of the given name is implementation specific but generally conforms - * to the format of a file name. If a source container does not recognize the - * name format provided, an empty collection should be returned. A source container - * may or may not require names to be fully qualified (i.e. be qualified with directory - * names). - * </p> - * @param name the name of the source element to search for - * @param containers the containers to search - * @return a collection of source elements corresponding to the given name - * @exception CoreException if an exception occurrs while searching for source elements - */ - protected Object[] findSourceElements(String name, ISourceContainer[] containers) throws CoreException { - List results = null; - CoreException single = null; - MultiStatus multiStatus = null; - if (isFindDuplicates()) { - results = new ArrayList(); - } - for (int i = 0; i < containers.length; i++) { - ISourceContainer container = containers[i]; - try { - Object[] objects = container.findSourceElements(name); - if (objects.length > 0) { - if (isFindDuplicates()) { - for (int j = 0; j < objects.length; j++) { - results.add(objects[j]); - } - } else { - if (objects.length == 1) { - return objects; - } - return new Object[]{objects[0]}; - } - } - } catch (CoreException e) { - if (single == null) { - single = e; - } else if (multiStatus == null) { - multiStatus = new MultiStatus(DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, new IStatus[]{single.getStatus()}, SourceLookupMessages.getString("CompositeSourceContainer.0"), null); //$NON-NLS-1$ - multiStatus.add(e.getStatus()); - } else { - multiStatus.add(e.getStatus()); - } - } - } - if (results == null) { - if (multiStatus != null) { - throw new CoreException(multiStatus); - } else if (single != null) { - throw single; - } - return EMPTY; - } - return results.toArray(); - } - - /** - * Creates the source containers in this composite container. - * Subclasses should override this methods. - * - * @throws CoreException if unable to create the containers - */ - protected abstract ISourceContainer[] createSourceContainers() throws CoreException; - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getSourceContainers() - */ - public synchronized ISourceContainer[] getSourceContainers() throws CoreException { - if (fContainers == null) { - fContainers = createSourceContainers(); - for (int i = 0; i < fContainers.length; i++) { - ISourceContainer container = fContainers[i]; - container.init(getDirector()); - } - } - return fContainers; - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#dispose() - */ - public void dispose() { - super.dispose(); - if (fContainers != null) { - for (int i = 0; i < fContainers.length; i++) { - ISourceContainer container = fContainers[i]; - container.dispose(); - } - } - fContainers = null; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/DefaultSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/DefaultSourceContainer.java deleted file mode 100644 index f3f5c6b82..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/DefaultSourceContainer.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector; -import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; - -/** - * A source container that computers the default source lookup path - * for a launch configuration on each launch using a launch configuration's - * associated source path computer. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ -public class DefaultSourceContainer extends CompositeSourceContainer { - - /** - * Unique identifier for the default source container type - * (value <code>org.eclipse.debug.core.containerType.default</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.default"; //$NON-NLS-1$ - - /** - * Constructs a default source container. - */ - public DefaultSourceContainer() { - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - return obj instanceof DefaultSourceContainer; - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getClass().hashCode(); - } - - /** - * Returns the launch configuration for which a default source lookup - * path will be computed, or <code>null</code> if none. - * - * @return the launch configuration for which a default source lookup - * path will be computed, or <code>null</code> - */ - protected ILaunchConfiguration getLaunchConfiguration() { - ISourceLookupDirector director = getDirector(); - if (director != null) { - return director.getLaunchConfiguration(); - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - - /** - * Returns the source path computer to use, or <code>null</code> - * if none. - * - * @return the source path computer to use, or <code>null</code> - * if none - */ - private ISourcePathComputer getSourcePathComputer() { - return getDirector().getSourcePathComputer(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() - */ - public String getName() { - return SourceLookupMessages.getString("DefaultSourceContainer.0"); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.containers.CompositeSourceContainer#createSourceContainers() - */ - protected ISourceContainer[] createSourceContainers() throws CoreException { - ISourcePathComputer sourcePathComputer = getSourcePathComputer(); - if (sourcePathComputer == null) { - return new ISourceContainer[0]; - } - return sourcePathComputer.computeSourceContainers(getLaunchConfiguration(), null); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/DirectorySourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/DirectorySourceContainer.java deleted file mode 100644 index a6d85e83c..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/DirectorySourceContainer.java +++ /dev/null @@ -1,178 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; - -/** - * A directory in the local file system. Source elements returned - * from <code>findSourceElements(...)</code> are instances - * of <code>LocalFileStorage</code>. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ - -public class DirectorySourceContainer extends CompositeSourceContainer { - - // root directory - private File fDirectory; - // whether to search subfolders - private boolean fSubfolders = false; - /** - * Unique identifier for the directory source container type - * (value <code>org.eclipse.debug.core.containerType.directory</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.directory"; //$NON-NLS-1$ - - /** - * Consutructs an external folder container for the - * directory identified by the given path. - * - * @param dirPath path to a directory in the local file system - * @param subfolders whether folders within the root directory - * should be searched for source elements - */ - public DirectorySourceContainer(IPath dirPath, boolean subfolders) { - this(dirPath.toFile(), subfolders); - } - - /** - * Consutructs an external folder container for the - * directory identified by the given file. - * - * @param dir a directory in the local file system - * @param subfolders whether folders within the root directory - * should be searched for source elements - */ - public DirectorySourceContainer(File dir, boolean subfolders) { - fDirectory = dir; - fSubfolders = subfolders; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() - */ - public String getName() { - return fDirectory.getName(); - } - - /** - * Returns the root directory in the local file system associated - * with this source container. - * - * @return the root directory in the local file system associated - * with this source container - */ - public File getDirectory() { - return fDirectory; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#findSourceElements(java.lang.String) - */ - public Object[] findSourceElements(String name) throws CoreException { - ArrayList sources = new ArrayList(); - File directory = getDirectory(); - File file = new File(directory, name); - if (file.exists() && file.isFile()) { - sources.add(new LocalFileStorage(file)); - } - - //check subfolders - if ((isFindDuplicates() && fSubfolders) || (sources.isEmpty() && fSubfolders)) { - ISourceContainer[] containers = getSourceContainers(); - for (int i=0; i < containers.length; i++) { - Object[] objects = containers[i].findSourceElements(name); - if (objects == null || objects.length == 0) { - continue; - } - if (isFindDuplicates()) { - for(int j=0; j < objects.length; j++) - sources.add(objects[j]); - } else { - sources.add(objects[0]); - break; - } - } - } - - if(sources.isEmpty()) - return EMPTY; - return sources.toArray(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#isComposite() - */ - public boolean isComposite() { - return fSubfolders; - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (obj instanceof DirectorySourceContainer) { - DirectorySourceContainer container = (DirectorySourceContainer) obj; - return container.getDirectory().equals(getDirectory()); - } - return false; - } - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getDirectory().hashCode(); - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.containers.CompositeSourceContainer#createSourceContainers() - */ - protected ISourceContainer[] createSourceContainers() throws CoreException { - if (isComposite()) { - String[] files = fDirectory.list(); - if (files != null) { - List dirs = new ArrayList(); - for (int i = 0; i < files.length; i++) { - String name = files[i]; - File file = new File(getDirectory(), name); - if (file.exists() && file.isDirectory()) { - dirs.add(new DirectorySourceContainer(file, true)); - } - } - ISourceContainer[] containers = (ISourceContainer[]) dirs.toArray(new ISourceContainer[dirs.size()]); - for (int i = 0; i < containers.length; i++) { - ISourceContainer container = containers[i]; - container.init(getDirector()); - } - return containers; - } - } - return new ISourceContainer[0]; - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ExternalArchiveSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ExternalArchiveSourceContainer.java deleted file mode 100644 index dfa3ed052..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ExternalArchiveSourceContainer.java +++ /dev/null @@ -1,245 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupUtils; - -/** - * An archive in the local file system. Returns instances - * of <code>ZipEntryStorage</code> as source elemetns. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ -public class ExternalArchiveSourceContainer extends AbstractSourceContainer { - - private boolean fDetectRoots = false; - private Map fRoots = new HashMap(5); - private String fArchivePath = null; - /** - * Unique identifier for the external archive source container type - * (value <code>org.eclipse.debug.core.containerType.externalArchive</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.externalArchive"; //$NON-NLS-1$ - - /** - * Creates an archive source container on the archive at the - * specified location in the local file system. - * - * @param archivePath path to the archive in the local file system - * @param detectRootPaths whether root container paths should be detected. When - * <code>true</code>, searching is performed relative to a root path - * within the archive based on fully qualified file names. A root - * path is automatically determined for each file type when the first - * successful search is performed. For example, when searching for a file - * named <code>a/b/c.d</code>, and an entry in the archive named - * <code>r/a/b/c.d</code> exists, the root path is set to <code>r</code> - * for file type <code>d</code>. - * From that point on, searching is performed relative to <code>r</code> - * for files of type <code>d</code>. - * When searching for an unqualified file name, root containers are not - * considered. - * When <code>false</code>, searching is performed by - * matching file names as suffixes to the entries in the archive. - */ - public ExternalArchiveSourceContainer(String archivePath, boolean detectRootPaths) { - fArchivePath = archivePath; - fDetectRoots = detectRootPaths; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#findSourceElements(java.lang.String) - */ - public Object[] findSourceElements(String name) throws CoreException { - name = name.replace('\\', '/'); - ZipFile file = getArchive(); - synchronized (file) { - boolean isQualfied = name.indexOf('/') > 0; - if (fDetectRoots && isQualfied) { - String root = getRoot(file, name); - if (root != null) { - if (root.length() > 0) { - name = root + name; - } - ZipEntry entry = file.getEntry(name); - if (entry != null) { - return new Object[]{new ZipEntryStorage(file, entry)}; - } - } - } else { - // try exact match - ZipEntry entry = file.getEntry(name); - if (entry != null) { - // can't be any dups if there is an exact match - return new Object[]{new ZipEntryStorage(file, entry)}; - } - // search - Enumeration entries = file.entries(); - List matches = null; - while (entries.hasMoreElements()) { - entry = (ZipEntry)entries.nextElement(); - String entryName = entry.getName(); - if (entryName.endsWith(name)) { - if (isQualfied || entryName.length() == name.length() || entryName.charAt(entryName.length() - name.length() - 1) == '/') { - if (isFindDuplicates()) { - if (matches == null) { - matches = new ArrayList(); - } - matches.add(new ZipEntryStorage(file, entry)); - } else { - return new Object[]{new ZipEntryStorage(file, entry)}; - } - } - } - } - if (matches != null) { - return matches.toArray(); - } - } - } - return EMPTY; - } - - /** - * Returns the root path in this archive for the given file name, based - * on its type, or <code>null</code> if none. Detects a root if a root has - * not yet been detected for the given file type. - * - * @param file zip file to search in - * @param name file name - * @exception CoreException if an exception occurrs while detecting the root - */ - private String getRoot(ZipFile file, String name) throws CoreException { - int index = name.lastIndexOf('.'); - String fileType = null; - if (index >= 0) { - fileType = name.substring(index); - } else { - // no filetype, use "" as key - fileType = ""; //$NON-NLS-1$ - } - String root = (String) fRoots.get(fileType); - if (root == null) { - root = detectRoot(file, name); - if (root != null) { - fRoots.put(fileType, root); - } - } - return root; - } - - /** - * Detects and returns the root path in this archive by searching for an entry - * with the given name, as a suffix. - * - * @param file zip file to search in - * @param name entry to search for - * @return root - * @exception CoreException if an exception occurrs while detecting the root - */ - private String detectRoot(ZipFile file, String name) throws CoreException { - synchronized (file) { - Enumeration entries = file.entries(); - try { - while (entries.hasMoreElements()) { - ZipEntry entry = (ZipEntry)entries.nextElement(); - String entryName = entry.getName(); - if (entryName.endsWith(name)) { - int rootLength = entryName.length() - name.length(); - if (rootLength > 0) { - return entryName.substring(0, rootLength); - } - return ""; //$NON-NLS-1$ - } - } - } catch (IllegalStateException e) { - abort(MessageFormat.format(SourceLookupMessages.getString("ExternalArchiveSourceContainer.1"), new String[] {getName()}), e); //$NON-NLS-1$ - } - } - return null; - } - - /** - * Returns the archive to search in. - * - * @throws CoreException if unable to access the archive - */ - private ZipFile getArchive() throws CoreException { - try { - return SourceLookupUtils.getZipFile(fArchivePath); - } catch (IOException e) { - abort(MessageFormat.format(SourceLookupMessages.getString("ExternalArchiveSourceContainer.2"), new String[]{fArchivePath}), e); //$NON-NLS-1$ - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() - */ - public String getName() { - return fArchivePath; - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - - /** - * Returns whether root paths are automatically detected in this - * archive source container. - * - * @return whether root paths are automatically detected in this - * archive source container - */ - public boolean isDetectRoot() { - return fDetectRoots; - } - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - return obj instanceof ExternalArchiveSourceContainer && - ((ExternalArchiveSourceContainer)obj).getName().equals(getName()); - } - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getName().hashCode(); - } - - /* - * (non-Javadoc) - * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#dispose() - */ - public void dispose() { - super.dispose(); - fRoots.clear(); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/FolderSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/FolderSourceContainer.java deleted file mode 100644 index 3310f9f31..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/FolderSourceContainer.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.internal.core.sourcelookup.containers.*; - -/** - * A folder in the workspace. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ -public class FolderSourceContainer extends ContainerSourceContainer { - - /** - * Unique identifier for the folder source container type - * (value <code>org.eclipse.debug.core.containerType.folder</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.folder"; //$NON-NLS-1$ - - - /** - * Constructs a source container on the given folder. - * - * @param folder the folder to search for source in - * @param subfolders whether to search nested folders - */ - public FolderSourceContainer(IContainer folder, boolean subfolders) { - super(folder, subfolders); - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/LocalFileStorage.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/LocalFileStorage.java deleted file mode 100644 index dbdf75fbc..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/LocalFileStorage.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.core.resources.IStorage; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; - -/** - * Implementation of storage for a local file - * (<code>java.io.File</code>). - * <p> - * This class may be instantiated; it is not intended to be subclassed. - * </p> - * @see IStorage - * @since 3.0 - */ -public class LocalFileStorage extends PlatformObject implements IStorage { - - /** - * The file this storage refers to. - */ - private File fFile; - - /** - * Constructs and returns storage for the given file. - * - * @param file a local file - */ - public LocalFileStorage(File file){ - setFile(file); - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#getContents() - */ - public InputStream getContents() throws CoreException { - try { - return new FileInputStream(getFile()); - } catch (IOException e){ - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, SourceLookupMessages.getString("LocalFileStorage.0"), e)); //$NON-NLS-1$ - } - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#getFullPath() - */ - public IPath getFullPath() { - try { - return new Path(getFile().getCanonicalPath()); - } catch (IOException e) { - DebugPlugin.log(e); - return null; - } - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#getName() - */ - public String getName() { - return getFile().getName(); - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#isReadOnly() - */ - public boolean isReadOnly() { - return true; - } - - /** - * Sets the file associated with this storage - * - * @param file a local file - */ - private void setFile(File file) { - fFile = file; - } - - /** - * Returns the file asscoiated with this storage - * - * @return file - */ - public File getFile() { - return fFile; - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object object) { - return object instanceof LocalFileStorage && - getFile().equals(((LocalFileStorage)object).getFile()); - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getFile().hashCode(); - } -}
\ No newline at end of file diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ProjectSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ProjectSourceContainer.java deleted file mode 100644 index ce0361e43..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ProjectSourceContainer.java +++ /dev/null @@ -1,110 +0,0 @@ - /******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.internal.core.sourcelookup.containers.*; - -/** - * A project in the workspace. Source is searched for in the root project - * folder and all folders within the project recursively. Optionally, - * referenced projects may be searched as well. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ -public class ProjectSourceContainer extends ContainerSourceContainer { - - boolean fReferencedProjects=false; - /** - * Unique identifier for the project source container type - * (value <code>org.eclipse.debug.core.containerType.project</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.project"; //$NON-NLS-1$ - - /** - * Constructs a project source container. - * - * @param project the project to search for source in - * @param referenced whether referenced projects should be considered - */ - public ProjectSourceContainer(IProject project, boolean referenced) { - super(project, true); - fReferencedProjects = referenced; - } - - /** - * Returns whether referenced projects are considered. - * - * @return whether referenced projects are considered - */ - public boolean isSearchReferencedProjects() { - return fReferencedProjects; - } - - /** - * Returns the project this source container references. - * - * @return the project this source container references - */ - public IProject getProject() { - return (IProject) getContainer(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#isComposite() - */ - public boolean isComposite() { - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.containers.CompositeSourceContainer#createSourceContainers() - */ - protected ISourceContainer[] createSourceContainers() throws CoreException { - if (getProject().isOpen()) { - if (isSearchReferencedProjects()) { - IProject project = getProject(); - IProject[] projects = project.getReferencedProjects(); - ISourceContainer[] folders = super.createSourceContainers(); - List all = new ArrayList(folders.length + projects.length); - for (int i = 0; i < folders.length; i++) { - all.add(folders[i]); - } - for (int i = 0; i < projects.length; i++) { - if (project.exists() && project.isOpen()) { - ProjectSourceContainer container = new ProjectSourceContainer(projects[i], true); - container.init(getDirector()); - all.add(container); - } - } - return (ISourceContainer[]) all.toArray(new ISourceContainer[all.size()]); - } - return super.createSourceContainers(); - } - return new ISourceContainer[0]; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/WorkspaceSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/WorkspaceSourceContainer.java deleted file mode 100644 index 786a55ecd..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/WorkspaceSourceContainer.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; - -/** - * All projects in the workspace. - * <p> - * Clients may instantiate this class. This class is not intended to - * be subclassed. - * </p> - * @since 3.0 - */ -public class WorkspaceSourceContainer extends CompositeSourceContainer { - - /** - * Unique identifier for the workspace source container type - * (value <code>org.eclipse.debug.core.containerType.workspace</code>). - */ - public static final String TYPE_ID = DebugPlugin.getUniqueIdentifier() + ".containerType.workspace"; //$NON-NLS-1$ - - public WorkspaceSourceContainer() { - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() - */ - public String getName() { - return SourceLookupMessages.getString("WorkspaceSourceContainer.0"); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - return obj instanceof WorkspaceSourceContainer; - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return ResourcesPlugin.getWorkspace().hashCode(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() - */ - public ISourceContainerType getType() { - return getSourceContainerType(TYPE_ID); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.containers.CompositeSourceContainer#createSourceContainers() - */ - protected ISourceContainer[] createSourceContainers() throws CoreException { - IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - ISourceContainer[] containers = new ISourceContainer[projects.length]; - for (int i = 0; i < projects.length; i++) { - ISourceContainer container = new ProjectSourceContainer(projects[i], false); - container.init(getDirector()); - containers[i] = container; - } - return containers; - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ZipEntryStorage.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ZipEntryStorage.java deleted file mode 100644 index e5ad45a72..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/ZipEntryStorage.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.core.sourcelookup.containers; - - -import java.io.IOException; -import java.io.InputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.eclipse.core.resources.IStorage; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; - -/** - * Storage implementation for zip entries. - * <p> - * This class may be instantiated; it is not intended to be subclassed. - * </p> - * @see IStorage - * @since 3.0 - */ -public class ZipEntryStorage extends PlatformObject implements IStorage { - - /** - * Zip file associated with zip entry - */ - private ZipFile fArchive; - - /** - * Zip entry - */ - private ZipEntry fZipEntry; - - /** - * Constructs a new storage implementation for the - * given zip entry in the specified zip file - * - * @param archive zip file - * @param entry zip entry - */ - public ZipEntryStorage(ZipFile archive, ZipEntry entry) { - setArchive(archive); - setZipEntry(entry); - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#getContents() - */ - public InputStream getContents() throws CoreException { - try { - return getArchive().getInputStream(getZipEntry()); - } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, SourceLookupMessages.getString("ZipEntryStorage.0"), e)); //$NON-NLS-1$ - } - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#getFullPath() - */ - public IPath getFullPath() { - return new Path(getArchive().getName()).append(getZipEntry().getName()); - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#getName() - */ - public String getName() { - int index = getZipEntry().getName().lastIndexOf('\\'); - if (index == -1) { - index = getZipEntry().getName().lastIndexOf('/'); - } - if (index == -1) { - return getZipEntry().getName(); - } - return getZipEntry().getName().substring(index + 1); - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IStorage#isReadOnly() - */ - public boolean isReadOnly() { - return true; - } - - /** - * Sets the archive containing the zip entry. - * - * @param archive a zip file - */ - private void setArchive(ZipFile archive) { - fArchive = archive; - } - - /** - * Returns the archive containing the zip entry. - * - * @return zip file - */ - public ZipFile getArchive() { - return fArchive; - } - - /** - * Sets the entry that contains the source. - * - * @param entry the entry that contains the source - */ - private void setZipEntry(ZipEntry entry) { - fZipEntry = entry; - } - - /** - * Returns the entry that contains the source - * - * @return zip entry - */ - public ZipEntry getZipEntry() { - return fZipEntry; - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object object) { - return object instanceof ZipEntryStorage && - getArchive().equals(((ZipEntryStorage)object).getArchive()) && - getZipEntry().getName().equals(((ZipEntryStorage)object).getZipEntry().getName()); - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getZipEntry().getName().hashCode(); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/package.html b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/package.html deleted file mode 100644 index 7125fb5a2..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/containers/package.html +++ /dev/null @@ -1,20 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> - -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<title>Eclipse Debug Platform</title> -</head> - -<body bgcolor="#FFFFFF"> - -<p>Provides implementations of common source containers supporting source lookup.</p> - -<h2>Package Specification</h2> - -<p>This package provides implementations of common source containers, such as - archives, folders, and projects.</p> - -<blockquote> </blockquote> -</body> -</html> diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/package.html b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/package.html deleted file mode 100644 index 8866be6cc..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/package.html +++ /dev/null @@ -1,34 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> - -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<title>Eclipse Debug Platform</title> -</head> - -<body bgcolor="#FFFFFF"> - -<p>Provides support for source lookup.</p> - -<h2>Package Specification</h2> - -<p>This package provides classes and interfaces to support source lookup. A source - lookup director is a persistable source locator that directs source lookup among - a collection of source lookup participants and a collection of source containers. - Each source lookup participant is a source locator itself, which allows more - than one source locator to participate in source lookup for a launch. Each source - lookup participant searches for source in the source containers managed by its - director, and each participant is notified of changes in the set of source containers - being searched.</p> -<p>A source lookup participant participates in source lookup by searching an ordered - list of source containers for source elements corresponding to a debug artifact. - For example, a participant may be asked to find source corresponding to a stack - frame or breakpoint. An implementation of a source lookup participant is debug - model specific, since it must convert the debug model artifact (stack frame, - breakpoint, etc.), into a source name that can be recognized by a source container, - to search for source elements. Source containers are generally debug model independent, - whereas source lookup participants are debug model specific.</p> - -<blockquote> </blockquote> -</body> -</html> diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java deleted file mode 100644 index 4b8932d3b..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java +++ /dev/null @@ -1,1017 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IMarkerDelta; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IBreakpointListener; -import org.eclipse.debug.core.IBreakpointManager; -import org.eclipse.debug.core.IBreakpointManagerListener; -import org.eclipse.debug.core.IBreakpointsListener; -import org.eclipse.debug.core.model.IBreakpoint; - -/** - * The breakpoint manager manages all registered breakpoints - * for the debug plugin. It is instantiated by the debug plugin at startup. - * - * @see IBreakpointManager - */ -public class BreakpointManager implements IBreakpointManager, IResourceChangeListener { - - /** - * Constants for breakpoint add/remove/change updates - */ - private final static int ADDED = 0; - private final static int REMOVED = 1; - private final static int CHANGED = 2; - - /** - * String constants corresponding to XML extension keys - */ - private final static String CLASS = "class"; //$NON-NLS-1$ - - /** - * Attribute name for the <code>"markerType"</code> attribute of - * a breakpoint extension. - */ - private static final String MARKER_TYPE= "markerType"; //$NON-NLS-1$ - - /** - * Attribute name for the <code>"name"</code> attribute of a - * breakpoint extension. - */ - private static final String TYPE_NAME= "name"; //$NON-NLS-1$ - - /** - * Preference constant used to persist the auto group - */ - private static final String PREF_AUTO_GROUP = "AUTO_GROUP"; //$NON-NLS-1$ - - /** - * A collection of breakpoints registered with this manager. - */ - private Vector fBreakpoints= null; - - /** - * Collection of breakpoints being added currently. Used to - * suppress change notication of "REGISTERED" attribute when - * being added. - */ - private List fSuppressChange = new ArrayList(); - - /** - * A table of breakpoint extension points, keyed by - * marker type - * key: a marker type - * value: the breakpoint extension which corresponds to that marker type - */ - private HashMap fBreakpointExtensions; - - /** - * Collection of markers that associates markers to breakpoints - * key: a marker - * value: the breakpoint which contains that marker - */ - private HashMap fMarkersToBreakpoints; - - /** - * Collection of breakpoint listeners. - */ - private ListenerList fBreakpointListeners= new ListenerList(6); - - /** - * Collection of (multi) breakpoint listeners. - */ - private ListenerList fBreakpointsListeners= new ListenerList(6); - - /** - * Singleton resource delta visitor which handles marker - * additions, changes, and removals. - */ - private static BreakpointManagerVisitor fgVisitor; - - /** - * Whether or not this breakpoint manager is enabled. - */ - private boolean fEnabled= true; - - /** - * Collection of breakpoint manager listeners which are - * notified when this manager's enablement changes. - */ - private ListenerList fBreakpointManagerListeners= new ListenerList(2); - - /** - * Constructs a new breakpoint manager. - */ - public BreakpointManager() { - fMarkersToBreakpoints= new HashMap(10); - fBreakpointExtensions= new HashMap(15); - } - - /** - * Loads all the breakpoints on the given resource. - * - * @param resource the resource which contains the breakpoints - * @param notify whether to notify of the breakpoint additions - */ - private void loadBreakpoints(IResource resource, boolean notify) throws CoreException { - initBreakpointExtensions(); - IMarker[] markers= getPersistedMarkers(resource); - List added = new ArrayList(); - for (int i = 0; i < markers.length; i++) { - IMarker marker= markers[i]; - try { - IBreakpoint breakpoint = createBreakpoint(marker); - if (breakpoint.isRegistered()) { - added.add(breakpoint); - } - } catch (DebugException e) { - DebugPlugin.log(e); - } - } - addBreakpoints((IBreakpoint[])added.toArray(new IBreakpoint[added.size()]), notify, true); - } - - /** - * Returns the persisted markers associated with the given resource. - * - * Delete any invalid breakpoint markers. This is done at startup rather - * than shutdown, since the changes made at shutdown are not persisted as - * the workspace state has already been saved. See bug 7683. - * - * Since the <code>TRANSIENT</code> marker attribute/feature has been added, - * we no longer have to manully delete non-persisted markers - the platform - * does this for us (at shutdown, transient markers are not saved). However, - * the code is still present to delete non-persisted markers from old - * workspaces. - */ - protected IMarker[] getPersistedMarkers(IResource resource) throws CoreException { - IMarker[] markers= resource.findMarkers(IBreakpoint.BREAKPOINT_MARKER, true, IResource.DEPTH_INFINITE); - final List delete = new ArrayList(); - List persisted= new ArrayList(); - for (int i = 0; i < markers.length; i++) { - IMarker marker= markers[i]; - // ensure the marker has a valid model identifier attribute - // and delete the breakpoint if not - String modelId = marker.getAttribute(IBreakpoint.ID, null); - if (modelId == null) { - // marker with old/invalid format - delete - delete.add(marker); - } else if (!marker.getAttribute(IBreakpoint.PERSISTED, true)) { - // the breakpoint is marked as not to be persisted, - // schedule for deletion - delete.add(marker); - } else { - persisted.add(marker); - } - } - // delete any markers that are not to be restored - if (!delete.isEmpty()) { - IWorkspaceRunnable wr = new IWorkspaceRunnable() { - public void run(IProgressMonitor pm) throws CoreException { - ResourcesPlugin.getWorkspace().deleteMarkers((IMarker[])delete.toArray(new IMarker[delete.size()])); - } - }; - new BreakpointManagerJob(wr).schedule(); - } - return (IMarker[])persisted.toArray(new IMarker[persisted.size()]); - } - - /** - * Removes this manager as a resource change listener - * and removes all breakpoint listeners. - */ - public void shutdown() { - getWorkspace().removeResourceChangeListener(this); - fBreakpointListeners.removeAll(); - } - - /** - * Find the defined breakpoint extensions and cache them for use in recreating - * breakpoints from markers. - */ - private void initBreakpointExtensions() { - IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_BREAKPOINTS); - IConfigurationElement[] elements = ep.getConfigurationElements(); - for (int i= 0; i < elements.length; i++) { - String markerType = elements[i].getAttribute(MARKER_TYPE); - String className = elements[i].getAttribute(CLASS); - if (markerType == null) { - invalidBreakpointExtension(MessageFormat.format(DebugCoreMessages.getString("BreakpointManager.Breakpoint_extension_{0}_missing_required_attribute__markerType_1"), new String[]{elements[i].getDeclaringExtension().getUniqueIdentifier()})); //$NON-NLS-1$ - } else if (className == null){ - invalidBreakpointExtension(MessageFormat.format(DebugCoreMessages.getString("BreakpointManager.Breakpoint_extension_{0}_missing_required_attribute__class_2"), new String[]{elements[i].getDeclaringExtension().getUniqueIdentifier()})); //$NON-NLS-1$ - } else { - fBreakpointExtensions.put(markerType, elements[i]); - } - } - } - - private void invalidBreakpointExtension(String message) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, message, null); - DebugPlugin.log(status); - } - - /** - * Convenience method to get the workspace - */ - private IWorkspace getWorkspace() { - return ResourcesPlugin.getWorkspace(); - } - - /** - * @see IBreakpointManager#getBreakpoint(IMarker) - */ - public IBreakpoint getBreakpoint(IMarker marker) { - // ensure that breakpoints are initialized - getBreakpoints0(); - return (IBreakpoint)fMarkersToBreakpoints.get(marker); - } - - /** - * @see IBreakpointManager#getBreakpoints() - */ - public IBreakpoint[] getBreakpoints() { - Vector breakpoints= getBreakpoints0(); - IBreakpoint[] temp= new IBreakpoint[breakpoints.size()]; - breakpoints.copyInto(temp); - return temp; - } - - /** - * The BreakpointManager waits to load the breakpoints - * of the workspace until a request is made to retrieve the - * breakpoints. - */ - private Vector getBreakpoints0() { - if (fBreakpoints == null) { - initializeBreakpoints(); - } - return fBreakpoints; - } - - /** - * @see IBreakpointManager#getBreakpoints(String) - */ - public IBreakpoint[] getBreakpoints(String modelIdentifier) { - Vector allBreakpoints= getBreakpoints0(); - ArrayList temp= new ArrayList(allBreakpoints.size()); - Iterator breakpoints= allBreakpoints.iterator(); - while (breakpoints.hasNext()) { - IBreakpoint breakpoint= (IBreakpoint) breakpoints.next(); - String id= breakpoint.getModelIdentifier(); - if (id != null && id.equals(modelIdentifier)) { - temp.add(breakpoint); - } - } - return (IBreakpoint[]) temp.toArray(new IBreakpoint[temp.size()]); - } - - /** - * Loads the list of breakpoints from the breakpoint markers in the - * workspace. Start listening to resource deltas. - */ - private void initializeBreakpoints() { - setBreakpoints(new Vector(10)); - try { - loadBreakpoints(getWorkspace().getRoot(), false); - getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_BUILD); - } catch (CoreException ce) { - DebugPlugin.log(ce); - setBreakpoints(new Vector(0)); - } - } - - /** - * @see IBreakpointManager#isRegistered(IBreakpoint) - */ - public boolean isRegistered(IBreakpoint breakpoint) { - return getBreakpoints0().contains(breakpoint); - } - - - /** - * @see IBreakpointManager#removeBreakpoint(IBreakpoint, boolean) - */ - public void removeBreakpoint(IBreakpoint breakpoint, boolean delete) throws CoreException { - removeBreakpoints(new IBreakpoint[]{breakpoint}, delete); - } - - /** - * @see IBreakpointManager#removeBreakpoints(IBreakpoint[], boolean) - */ - public void removeBreakpoints(IBreakpoint[] breakpoints, final boolean delete) throws CoreException { - final List remove = new ArrayList(breakpoints.length); - for (int i = 0; i < breakpoints.length; i++) { - IBreakpoint breakpoint = breakpoints[i]; - if (getBreakpoints0().contains(breakpoint)) { - remove.add(breakpoint); - } - } - if (!remove.isEmpty()) { - Iterator iter = remove.iterator(); - while (iter.hasNext()) { - IBreakpoint breakpoint = (IBreakpoint)iter.next(); - getBreakpoints0().remove(breakpoint); - fMarkersToBreakpoints.remove(breakpoint.getMarker()); - } - fireUpdate(remove, null, REMOVED); - IWorkspaceRunnable r = new IWorkspaceRunnable() { - public void run(IProgressMonitor montitor) throws CoreException { - Iterator innerIter = remove.iterator(); - while (innerIter.hasNext()) { - IBreakpoint breakpoint = (IBreakpoint)innerIter.next(); - if (delete) { - breakpoint.delete(); - } else { - // if the breakpoint is being removed from the manager - // because the project is closing, the breakpoint should - // remain as registered, otherwise, the breakpoint should - // be marked as deregistered - IMarker marker = breakpoint.getMarker(); - if (marker.exists()) { - IProject project = breakpoint.getMarker().getResource().getProject(); - if (project == null || project.isOpen()) { - breakpoint.setRegistered(false); - } - } - } - } - } - }; - getWorkspace().run(r, null, 0, null); - } - } - - /** - * Create a breakpoint for the given marker. The created breakpoint - * is of the type specified in the breakpoint extension associated - * with the given marker type. - * - * @return a breakpoint on this marker - * @exception DebugException if breakpoint creation fails. Reasons for - * failure include: - * <ol> - * <li>The breakpoint manager cannot determine what kind of breakpoint - * to instantiate for the given marker type</li> - * <li>A lower level exception occurred while accessing the given marker</li> - * </ol> - */ - private IBreakpoint createBreakpoint(IMarker marker) throws DebugException { - IBreakpoint breakpoint= (IBreakpoint) fMarkersToBreakpoints.get(marker); - if (breakpoint != null) { - return breakpoint; - } - try { - IConfigurationElement config = (IConfigurationElement)fBreakpointExtensions.get(marker.getType()); - if (config == null) { - throw new DebugException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.CONFIGURATION_INVALID, MessageFormat.format(DebugCoreMessages.getString("BreakpointManager.Missing_breakpoint_definition"), new String[] {marker.getType()}), null)); //$NON-NLS-1$ - } - Object object = config.createExecutableExtension(CLASS); - if (object instanceof IBreakpoint) { - breakpoint = (IBreakpoint)object; - breakpoint.setMarker(marker); - } else { - invalidBreakpointExtension(MessageFormat.format(DebugCoreMessages.getString("BreakpointManager.Class_{0}_specified_by_breakpoint_extension_{1}_does_not_implement_required_interface_IBreakpoint._3"), new String[]{config.getAttribute(CLASS), config.getDeclaringExtension().getUniqueIdentifier()})); //$NON-NLS-1$ - } - return breakpoint; - } catch (CoreException e) { - throw new DebugException(e.getStatus()); - } - } - - /** - * @see IBreakpointManager#addBreakpoint(IBreakpoint) - */ - public void addBreakpoint(IBreakpoint breakpoint) throws CoreException { - addBreakpoints(new IBreakpoint[]{breakpoint}); - } - - /** - * @see IBreakpointManager#addBreakpoints(IBreakpoint[]) - */ - public void addBreakpoints(IBreakpoint[] breakpoints) throws CoreException { - addBreakpoints(breakpoints, true, false); - } - - /** - * Registers the given breakpoints and notifies listeners if specified. - * - * @param breakpoints the breakpoints to register - * @param notify whether to notify listeners of the add - * @param loading whether the given breakpoints are being automatically loaded - * from previously persisted markers - */ - private void addBreakpoints(IBreakpoint[] breakpoints, boolean notify, final boolean loading) throws CoreException { - List added = new ArrayList(breakpoints.length); - final List update = new ArrayList(); - final String autoGroup = getAutoGroup(); - for (int i = 0; i < breakpoints.length; i++) { - IBreakpoint breakpoint = breakpoints[i]; - if (!getBreakpoints0().contains(breakpoint)) { - verifyBreakpoint(breakpoint); - if (autoGroup == null && breakpoint.isRegistered()) { - // If notify == false, the breakpoints are just being added at startup - added.add(breakpoint); - getBreakpoints0().add(breakpoint); - fMarkersToBreakpoints.put(breakpoint.getMarker(), breakpoint); - } else { - // need to update the 'registered' and/or 'group' attributes - update.add(breakpoint); - } - } - } - if (notify) { - fireUpdate(added, null, ADDED); - } - if (!update.isEmpty()) { - IWorkspaceRunnable r = new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - Iterator iter = update.iterator(); - while (iter.hasNext()) { - IBreakpoint breakpoint = (IBreakpoint)iter.next(); - getBreakpoints0().add(breakpoint); - breakpoint.setRegistered(true); - if (!loading && autoGroup != null && autoGroup.length() > 0 && breakpoint.getGroup() == null) { - breakpoint.setGroup(autoGroup); - } - fMarkersToBreakpoints.put(breakpoint.getMarker(), breakpoint); - } - } - }; - // Need to suppress change notification, since this is really - // an add notification - fSuppressChange.addAll(update); - getWorkspace().run(r, null, 0, null); - fSuppressChange.removeAll(update); - if (notify) { - fireUpdate(update, null, ADDED); - } - } - } - - /** - * Returns whether change notification is to be suppressed for the given breakpoint. - * Used when adding breakpoints and changing the "REGISTERED" attribute. - * - * @param breakpoint - * @return boolean whether change notification is suppressed - */ - protected boolean isChangeSuppressed(IBreakpoint breakpoint) { - return fSuppressChange.contains(breakpoint); - } - - /** - * @see IBreakpointManager#fireBreakpointChanged(IBreakpoint) - */ - public void fireBreakpointChanged(IBreakpoint breakpoint) { - if (getBreakpoints0().contains(breakpoint)) { - List changed = new ArrayList(); - changed.add(breakpoint); - fireUpdate(changed, null, CHANGED); - } - } - - /** - * Verifies that the breakpoint marker has the minimal required attributes, - * and throws a debug exception if not. - */ - private void verifyBreakpoint(IBreakpoint breakpoint) throws DebugException { - try { - String id= breakpoint.getModelIdentifier(); - if (id == null) { - throw new DebugException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.CONFIGURATION_INVALID, DebugCoreMessages.getString("BreakpointManager.Missing_model_identifier"), null)); //$NON-NLS-1$ - } - } catch (CoreException e) { - throw new DebugException(e.getStatus()); - } - } - - /** - * A resource has changed. Traverses the delta for breakpoint changes. - */ - public void resourceChanged(IResourceChangeEvent event) { - IResourceDelta delta= event.getDelta(); - if (delta != null) { - try { - if (fgVisitor == null) { - fgVisitor= new BreakpointManagerVisitor(); - } - delta.accept(fgVisitor); - fgVisitor.update(); - } catch (CoreException ce) { - DebugPlugin.log(ce); - } - } - } - - /** - * Visitor for handling resource deltas - */ - class BreakpointManagerVisitor implements IResourceDeltaVisitor { - /** - * Moved markers - */ - private List fMoved = new ArrayList(); - /** - * Removed breakpoints - */ - private List fRemoved = new ArrayList(); - /** - * Changed breakpoints and associated marker deltas - */ - private List fChanged = new ArrayList(); - private List fChangedDeltas = new ArrayList(); - - /** - * Resets the visitor for a delta traversal - empties - * collections of removed/changed breakpoints. - */ - protected void reset() { - fMoved.clear(); - fRemoved.clear(); - fChanged.clear(); - fChangedDeltas.clear(); - } - - /** - * Performs updates on accumlated changes, and fires change notification after - * a traversal. Accumlated updates are reset. - */ - public void update() { - if (!fMoved.isEmpty()) { - // delete moved markers - IWorkspaceRunnable wRunnable= new IWorkspaceRunnable() { - public void run(IProgressMonitor monitor) throws CoreException { - getWorkspace().deleteMarkers((IMarker[])fMoved.toArray(new IMarker[fMoved.size()])); - } - }; - try { - getWorkspace().run(wRunnable, null, 0, null); - } catch (CoreException e) { - } - } - if (!fRemoved.isEmpty()) { - try { - removeBreakpoints((IBreakpoint[])fRemoved.toArray(new IBreakpoint[fRemoved.size()]), false); - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - if (!fChanged.isEmpty()) { - fireUpdate(fChanged, fChangedDeltas, CHANGED); - } - reset(); - } - - /** - * @see IResourceDeltaVisitor#visit(IResourceDelta) - */ - public boolean visit(IResourceDelta delta) { - if (delta == null) { - return false; - } - if (0 != (delta.getFlags() & IResourceDelta.OPEN) && 0 == (delta.getFlags() & IResourceDelta.MOVED_FROM)) { - handleProjectResourceOpenStateChange(delta.getResource()); - return false; - } - IMarkerDelta[] markerDeltas= delta.getMarkerDeltas(); - for (int i= 0; i < markerDeltas.length; i++) { - IMarkerDelta markerDelta= markerDeltas[i]; - if (markerDelta.isSubtypeOf(IBreakpoint.BREAKPOINT_MARKER)) { - switch (markerDelta.getKind()) { - case IResourceDelta.ADDED : - handleAddBreakpoint(delta, markerDelta.getMarker()); - break; - case IResourceDelta.REMOVED : - handleRemoveBreakpoint(markerDelta.getMarker()); - break; - case IResourceDelta.CHANGED : - handleChangeBreakpoint(markerDelta.getMarker(), markerDelta); - break; - } - } - } - - return true; - } - - /** - * Wrapper for handling adds - */ - protected void handleAddBreakpoint(IResourceDelta rDelta, final IMarker marker) { - if (0 != (rDelta.getFlags() & IResourceDelta.MOVED_FROM)) { - // This breakpoint has actually been moved - already removed - // from the Breakpoint manager during the remove callback. - // Schedule the marker associated with the new resource for deletion. - if (getBreakpoint(marker) == null) { - fMoved.add(marker); - } - } else { - // do nothing - we do not add until explicitly added - } - } - - /** - * Wrapper for handling removes - */ - protected void handleRemoveBreakpoint(IMarker marker) { - IBreakpoint breakpoint= getBreakpoint(marker); - if (breakpoint != null) { - fRemoved.add(breakpoint); - } - } - - /** - * Wrapper for handling changes - */ - protected void handleChangeBreakpoint(IMarker marker, IMarkerDelta delta) { - final IBreakpoint breakpoint= getBreakpoint(marker); - if (breakpoint != null && isRegistered(breakpoint) && !isChangeSuppressed(breakpoint)) { - fChanged.add(breakpoint); - fChangedDeltas.add(delta); - } - } - - /** - * A project has been opened or closed. Updates the breakpoints for - * that project - */ - private void handleProjectResourceOpenStateChange(final IResource project) { - if (!project.isAccessible()) { - //closed - Enumeration breakpoints= ((Vector)getBreakpoints0().clone()).elements(); - while (breakpoints.hasMoreElements()) { - IBreakpoint breakpoint= (IBreakpoint) breakpoints.nextElement(); - IResource markerResource= breakpoint.getMarker().getResource(); - if (project.getFullPath().isPrefixOf(markerResource.getFullPath())) { - fRemoved.add(breakpoint); - } - } - return; - } - try { - loadBreakpoints(project, true); - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - } - - /** - * @see IBreakpointManager#addBreakpointListener(IBreakpointListener) - */ - public void addBreakpointListener(IBreakpointListener listener) { - fBreakpointListeners.add(listener); - } - - /** - * @see IBreakpointManager#removeBreakpointListener(IBreakpointListener) - */ - public void removeBreakpointListener(IBreakpointListener listener) { - fBreakpointListeners.remove(listener); - } - - /** - * Notifies listeners of the adds/removes/changes - * - * @param breakpoints associated breakpoints - * @param deltas or <code>null</code> - * @param update type of change - */ - private void fireUpdate(List breakpoints, List deltas, int update) { - if (breakpoints.isEmpty()) { - return; - } - IBreakpoint[] bpArray = (IBreakpoint[])breakpoints.toArray(new IBreakpoint[breakpoints.size()]); - IMarkerDelta[] deltaArray = new IMarkerDelta[bpArray.length]; - if (deltas != null) { - deltaArray = (IMarkerDelta[])deltas.toArray(deltaArray); - } - // single listeners - getBreakpointNotifier().notify(bpArray, deltaArray, update); - - // multi listeners - getBreakpointsNotifier().notify(bpArray, deltaArray, update); - } - - protected void setBreakpoints(Vector breakpoints) { - fBreakpoints = breakpoints; - } - - /** - * @see IBreakpointManager#hasBreakpoints() - */ - public boolean hasBreakpoints() { - return !getBreakpoints0().isEmpty(); - } - - /** - * @see org.eclipse.debug.core.IBreakpointManager#addBreakpointListener(org.eclipse.debug.core.IBreakpointsListener) - */ - public void addBreakpointListener(IBreakpointsListener listener) { - fBreakpointsListeners.add(listener); - } - - /** - * @see org.eclipse.debug.core.IBreakpointManager#removeBreakpointListener(org.eclipse.debug.core.IBreakpointsListener) - */ - public void removeBreakpointListener(IBreakpointsListener listener) { - fBreakpointsListeners.remove(listener); - } - - private BreakpointNotifier getBreakpointNotifier() { - return new BreakpointNotifier(); - } - - /** - * Notifies breakpoint listener (single breakpoint) in a safe runnable to - * handle exceptions. - */ - class BreakpointNotifier implements ISafeRunnable { - - private IBreakpointListener fListener; - private int fType; - private IMarkerDelta fDelta; - private IBreakpoint fBreakpoint; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._4"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.breakpointAdded(fBreakpoint); - break; - case REMOVED: - fListener.breakpointRemoved(fBreakpoint, fDelta); - break; - case CHANGED: - fListener.breakpointChanged(fBreakpoint, fDelta); - break; - } - } - - /** - * Notifies the listeners of the add/change/remove - * - * @param breakpoints the breakpoints that changed - * @param deltas the deltas associated with the change - * @param update the type of change - */ - public void notify(IBreakpoint[] breakpoints, IMarkerDelta[] deltas, int update) { - fType = update; - Object[] copiedListeners= fBreakpointListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IBreakpointListener)copiedListeners[i]; - for (int j = 0; j < breakpoints.length; j++) { - fBreakpoint = breakpoints[j]; - fDelta = deltas[j]; - Platform.run(this); - } - } - fListener = null; - fDelta = null; - fBreakpoint = null; - } - } - - private BreakpointsNotifier getBreakpointsNotifier() { - return new BreakpointsNotifier(); - } - - /** - * Notifies breakpoint listener (multiple breakpoints) in a safe runnable to - * handle exceptions. - */ - class BreakpointsNotifier implements ISafeRunnable { - - private IBreakpointsListener fListener; - private int fType; - private IMarkerDelta[] fDeltas; - private IBreakpoint[] fNotifierBreakpoints; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._5"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.breakpointsAdded(fNotifierBreakpoints); - break; - case REMOVED: - fListener.breakpointsRemoved(fNotifierBreakpoints, fDeltas); - break; - case CHANGED: - fListener.breakpointsChanged(fNotifierBreakpoints, fDeltas); - break; - } - } - - /** - * Notifies the listeners of the adds/changes/removes - * - * @param breakpoints the breakpoints that changed - * @param deltas the deltas associated with the changed breakpoints - * @param update the type of change - */ - public void notify(IBreakpoint[] breakpoints, IMarkerDelta[] deltas, int update) { - fType = update; - fNotifierBreakpoints = breakpoints; - fDeltas = deltas; - Object[] copiedListeners = fBreakpointsListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IBreakpointsListener)copiedListeners[i]; - Platform.run(this); - } - fDeltas = null; - fNotifierBreakpoints = null; - fListener = null; - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#isEnabled() - */ - public boolean isEnabled() { - return fEnabled; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#setEnabled(boolean) - */ - public void setEnabled(boolean enabled) { - fEnabled= enabled; - new BreakpointManagerNotifier().notify(enabled); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#addBreakpointManagerListener(org.eclipse.debug.core.IBreakpointManagerListener) - */ - public void addBreakpointManagerListener(IBreakpointManagerListener listener) { - fBreakpointManagerListeners.add(listener); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#removeBreakpointManagerListener(org.eclipse.debug.core.IBreakpointManagerListener) - */ - public void removeBreakpointManagerListener(IBreakpointManagerListener listener) { - fBreakpointManagerListeners.remove(listener); - } - - /** - * Notifies breakpoint manager listeners in a safe runnable to - * handle exceptions. - */ - class BreakpointManagerNotifier implements ISafeRunnable { - - private IBreakpointManagerListener fListener; - private boolean fManagerEnabled; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._5"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - fListener.breakpointManagerEnablementChanged(fManagerEnabled); - } - - /** - * Notifies the listeners of the adds/changes/removes - * - * @param breakpoints the breakpoints that changed - * @param deltas the deltas associated with the changed breakpoints - * @param update the type of change - */ - public void notify(boolean enabled) { - fManagerEnabled= enabled; - Object[] copiedListeners = fBreakpointManagerListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IBreakpointManagerListener)copiedListeners[i]; - Platform.run(this); - } - fListener = null; - } - } - - class BreakpointManagerJob extends Job { - - private final IWorkspaceRunnable fRunnable; - - public BreakpointManagerJob (IWorkspaceRunnable wRunnable) { - super("breakpoint manager job"); //$NON-NLS-1$ - fRunnable= wRunnable; - setSystem(true); - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) - */ - protected IStatus run(IProgressMonitor monitor) { - try { - getWorkspace().run(fRunnable, null, 0, null); - } catch (CoreException ce) { - DebugPlugin.log(ce); - } - return new Status(IStatus.OK, DebugPlugin.getUniqueIdentifier(), IStatus.OK, "", null); //$NON-NLS-1$ - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#getTypeName(org.eclipse.debug.core.model.IBreakpoint) - */ - public String getTypeName(IBreakpoint breakpoint) { - String typeName= null; - IMarker marker = breakpoint.getMarker(); - if (marker != null) { - try { - IConfigurationElement element = (IConfigurationElement) fBreakpointExtensions.get(marker.getType()); - if (element != null) { - typeName= element.getAttribute(TYPE_NAME); - } - } catch (CoreException e) { - } - } - return typeName; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#setAutoGroup(java.lang.String) - */ - public void setAutoGroup(String group) { - if (group == null) { - group= ""; //$NON-NLS-1$ - } - DebugPlugin.getDefault().getPluginPreferences().setValue(PREF_AUTO_GROUP, group); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IBreakpointManager#getAutoGroup() - */ - public String getAutoGroup() { - return DebugPlugin.getDefault().getPluginPreferences().getString(PREF_AUTO_GROUP); - } -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ContributedDelegate.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ContributedDelegate.java deleted file mode 100644 index 3caf3a72c..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ContributedDelegate.java +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.text.MessageFormat; -import java.util.HashSet; -import java.util.Set; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; - -/** - * A placeholder for a launch delegate contributed for a launch mode for an - * existing launch configuration type. - */ -public class ContributedDelegate { - - /** - * The configuration element of the extension. - */ - private IConfigurationElement fElement; - - /** - * Modes this delegate supports. - */ - private Set fModes; - - /** - * Delegate, or <code>null</code> if not yet instantiated. - */ - private ILaunchConfigurationDelegate fDelegate; - - /** - * Constructs a new contributed delegate on the - * given configuration element. - * - * @param element configuration element - */ - protected ContributedDelegate(IConfigurationElement element) { - setConfigurationElement(element); - } - - /** - * Sets this delegate's configuration element. - * - * @param element this delegate's configuration element - */ - private void setConfigurationElement(IConfigurationElement element) { - fElement = element; - } - - /** - * Returns this delegate's configuration element. - * - * @return this delegate's configuration element - */ - protected IConfigurationElement getConfigurationElement() { - return fElement; - } - - /** - * Returns the set of modes specified in the configuration data. - * - * @return the set of modes specified in the configuration data - */ - protected Set getModes() { - if (fModes == null) { - String modes= getConfigurationElement().getAttribute("modes"); //$NON-NLS-1$ - if (modes == null) { - return new HashSet(0); - } - String[] strings = modes.split(","); //$NON-NLS-1$ - fModes = new HashSet(3); - for (int i = 0; i < strings.length; i++) { - String string = strings[i]; - fModes.add(string.trim()); - } - } - return fModes; - } - - /** - * Returns the type identifier of launch configuration type this delegate is - * contributed to. - */ - protected String getLaunchConfigurationType() { - return getConfigurationElement().getAttribute("type"); //$NON-NLS-1$ - } - - protected ILaunchConfigurationDelegate getDelegate() throws CoreException { - if (fDelegate == null) { - Object object = getConfigurationElement().createExecutableExtension("delegate"); //$NON-NLS-1$ - if (object instanceof ILaunchConfigurationDelegate) { - fDelegate = (ILaunchConfigurationDelegate)object; - } else { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationType.Launch_delegate_for_{0}_does_not_implement_required_interface_ILaunchConfigurationDelegate._1"), new String[]{getIdentifier()}), null)); //$NON-NLS-1$ - } - } - return fDelegate; - } - - /** - * Returns the identifier of this extension point. - */ - protected String getIdentifier() { - return getConfigurationElement().getAttribute("id"); //$NON-NLS-1$ - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java deleted file mode 100644 index f5fa326f4..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class DebugCoreMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.debug.internal.core.DebugCoreMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private DebugCoreMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties deleted file mode 100644 index 8742aaded..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugCoreMessages.properties +++ /dev/null @@ -1,95 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2004 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -Breakpoint.no_associated_marker=Breakpoint does not have an associated marker. - -BreakpointManager.Missing_breakpoint_definition=Missing breakpoint definition for marker type {0} -BreakpointManager.Missing_model_identifier=Breakpoint missing debug model identifier -BreakpointManager.Breakpoint_extension_{0}_missing_required_attribute__markerType_1=Breakpoint extension {0} missing required attribute: markerType -BreakpointManager.Breakpoint_extension_{0}_missing_required_attribute__class_2=Breakpoint extension {0} missing required attribute: class -BreakpointManager.Class_{0}_specified_by_breakpoint_extension_{1}_does_not_implement_required_interface_IBreakpoint._3=Class {0} specified by breakpoint extension {1} does not implement required interface IBreakpoint. -BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._4=An exception occurred during breakpoint change notification. -BreakpointManager.An_exception_occurred_during_breakpoint_change_notification._5=An exception occurred during breakpoint change notification. - -DebugEvent.illegal_detail=detail is not one of the allowed constants, see IDebugEventConstants -DebugEvent.illegal_kind=kind is not one of the allowed constants, see IDebugEventConstants - -DebugPlugin.Invalid_status_handler_extension__{0}_2=Invalid status handler extension: {0} -DebugPlugin.Debug_async_queue_1=Debug async queue -DebugPlugin.Exception_occurred_executing_command_line._1=Exception occurred executing command line. -DebugPlugin.Eclipse_runtime_does_not_support_working_directory_2=Eclipse runtime does not support working directory -DebugPlugin.Registered_status_handler_{0}_does_not_implement_required_interface_IStatusHandler._1=Registered status handler {0} does not implement required interface IStatusHandler. -DebugPlugin.An_exception_occurred_while_dispatching_debug_events._2=An exception occurred while dispatching debug events. -DebugPlugin.An_exception_occurred_while_filtering_debug_events._3=An exception occurred while filtering debug events. -DebugPlugin.31=Invalid process factory extension contributed by {0}; id: {1} -DebugPlugin.0=Exception processing debug async queue - -EnvironmentVariableResolver.0=Environment variable not specified - -InputStreamMonitor.label=Input Stream Monitor - -Launch.terminate_failed=Terminate failed - -LaunchConfiguration.Exception_occurred_creating_launch_configuration_memento_9=Exception occurred creating launch configuration memento -LaunchConfiguration.Exception_occurred_parsing_memento_5=Exception occurred parsing memento -LaunchConfiguration.Failed_to_delete_launch_configuration._1=Failed to delete launch configuration. -LaunchConfiguration.Invalid_launch_configuration_memento__missing_path_attribute_3=Invalid launch configuration memento: missing path attribute -LaunchConfiguration.Invalid_launch_configuration_memento__missing_local_attribute_4=Invalid launch configuration memento: missing local attribute -LaunchConfiguration.Unable_to_restore_location_for_launch_configuration_from_memento__{0}_1=Unable to restore location for launch configuration from memento: {0} -LaunchConfiguration.Unable_to_generate_memento_for_{0},_shared_file_does_not_exist._1=Unable to generate memento for {0}, shared file does not exist. -LaunchConfiguration.13=Incompatible launch mode: expecting {0} instead of {1} -LaunchConfigurationDelegate.6=Searching for errors -LaunchConfigurationDelegate.7=Searching for errors in - -LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_boolean._3=Attribute {0} is not of type boolean. -LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_int._2=Attribute {0} is not of type int. -LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.lang.String._1=Attribute {0} is not of type java.lang.String. -LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.List._1=Attribute {0} is not of type java.util.List. -LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.Map._1=Attribute {0} is not of type java.util.Map. -LaunchConfigurationInfo.Invalid_launch_configuration_XML._10=Invalid launch configuration XML. -LaunchConfigurationInfo.missing_type=Launch configuration type id \"{0}\" does not exist.\nPossible causes:\n\tMissing specification of a launch type (missing plug-in)\n\tIncorrect launch configuration XML -LaunchConfigurationInfo.36=A null key has been specified for an attribute in this launch configuration - -LaunchConfigurationWorkingCopy.{0}_occurred_generating_launch_configuration_XML._1={0} occurred generating launch configuration XML. -LaunchConfigurationWorkingCopy.Specified_container_for_launch_configuration_does_not_exist_2=Specified container for launch configuration does not exist -LaunchConfigurationWorkingCopy.5=Unable to save launch configuration. - -LaunchManager.{0}_occurred_while_reading_launch_configuration_file_{1}._1={0} occurred while reading launch configuration file: {1}. -LaunchManager.Invalid_launch_configuration_index._18=Invalid launch configuration index. -LaunchManager.Invalid_source_locator_extentsion_defined_by_plug-in___{0}______id___not_specified_12=Invalid source locator extension defined by plug-in \"{0}\": \"id\" not specified -LaunchManager.does_not_exist=Launch configuration {0} at {1} does not exist. -LaunchManager.Source_locator_does_not_exist__{0}_13=Source locator does not exist: {0} -LaunchManager.Invalid_launch_configuration_comparator_extension_defined_by_plug-in_{0}_-_attribute_not_specified_1=Invalid launch configuration comparator extension defined by plug-in {0} - attribute not specified -LaunchManager.An_exception_occurred_during_launch_change_notification._1=An exception occurred during launch change notification. -LaunchManager.An_exception_occurred_during_launch_configuration_change_notification._3=An exception occurred during launch configuration change notification. -LaunchManager.30=Unable to retrieve shared launch configuration file for {0} - -LaunchMode.1=Required attribute {0} missing for launchMode extension. - -LogicalStructureType.7=Required attribute {0} missing for logicalStructureType extension. -LogicalStructureType.0=<Missing Description> - -OutputStreamMonitor.label=Output Stream Monitor - -ProcessMonitorJob.0=Process monitor - -RuntimeProcess.terminate_failed=Terminate failed -RuntimeProcess.Exit_value_not_available_until_process_terminates._1=Exit value not available until process terminates. - -ExpressionManager.An_exception_occurred_during_expression_change_notification._1=An exception occurred during expression change notification. - -LaunchConfigurationType.Launch_delegate_for_{0}_does_not_implement_required_interface_ILaunchConfigurationDelegate._1=Launch delegate for {0} does not implement required interface ILaunchConfigurationDelegate. -LaunchConfigurationType.9=Launch mode {0} not supported for configuration type {1} -LaunchConfigurationType.10=Launch delegate not registered for configuration type {0}, mode {1} - -MemoryRenderingManager.ErrorMsg = The selected rendering cannot be created: {0} -WatchExpression.0=(Watch expressions not supported) -NullStreamsProxy.0=Null Stream Monitor diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/EnvironmentVariableResolver.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/EnvironmentVariableResolver.java deleted file mode 100644 index e92c73a2c..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/EnvironmentVariableResolver.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.internal.core; - -import java.util.Map; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.variables.IDynamicVariable; -import org.eclipse.core.variables.IDynamicVariableResolver; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.osgi.service.environment.Constants; - -/** - * Resolves the value of environment variables. - */ -public class EnvironmentVariableResolver implements IDynamicVariableResolver { - - /* (non-Javadoc) - * @see org.eclipse.core.variables.IDynamicVariableResolver#resolveValue(org.eclipse.core.variables.IDynamicVariable, java.lang.String) - */ - public String resolveValue(IDynamicVariable variable, String argument) throws CoreException { - if (argument == null) { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), IStatus.ERROR, DebugCoreMessages.getString("EnvironmentVariableResolver.0"), null)); //$NON-NLS-1$ - } - Map map= DebugPlugin.getDefault().getLaunchManager().getNativeEnvironment(); - if (Platform.getOS().equals(Constants.OS_WIN32)) { - // On Win32, env variables are case insensitive, so we uppercase everything - // for map matches - argument= argument.toUpperCase(); - } - return (String) map.get(argument); - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java deleted file mode 100644 index e957c50eb..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java +++ /dev/null @@ -1,579 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Preferences; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; -import org.eclipse.debug.core.IExpressionListener; -import org.eclipse.debug.core.IExpressionManager; -import org.eclipse.debug.core.IExpressionsListener; -import org.eclipse.debug.core.model.IExpression; -import org.eclipse.debug.core.model.IWatchExpression; -import org.eclipse.debug.core.model.IWatchExpressionDelegate; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * The expression manager manages all registered expressions - * for the debug plugin. It is instantiated by the debug plugin - * at startup. - * - * @see IExpressionManager - */ -public class ExpressionManager implements IExpressionManager, IDebugEventSetListener { - - /** - * Collection of registered expressions. - */ - private Vector fExpressions = null; - - /** - * List of expression listeners - */ - private ListenerList fListeners = null; - - /** - * List of (multi) expressions listeners - */ - private ListenerList fExpressionsListeners = null; - - /** - * Mapping of debug model identifiers (String) to - * expression delegate extensions (IConfigurationElement) - */ - private Map fWatchExpressionDelegates= new HashMap(); - - // Constants for add/remove/change notification - private static final int ADDED = 1; - private static final int CHANGED = 2; - private static final int REMOVED = 3; - - // Preference for persisted watch expressions - private static final String PREF_WATCH_EXPRESSIONS= "prefWatchExpressions"; //$NON-NLS-1$ - // Persisted watch expression XML tags - private static final String WATCH_EXPRESSIONS_TAG= "watchExpressions"; //$NON-NLS-1$ - private static final String EXPRESSION_TAG= "expression"; //$NON-NLS-1$ - private static final String TEXT_TAG= "text"; //$NON-NLS-1$ - private static final String ENABLED_TAG= "enabled"; //$NON-NLS-1$ - // XML values - private static final String TRUE_VALUE= "true"; //$NON-NLS-1$ - private static final String FALSE_VALUE= "false"; //$NON-NLS-1$ - - public ExpressionManager() { - loadPersistedExpressions(); - loadWatchExpressionDelegates(); - } - - /** - * Loads the mapping of debug models to watch expression delegates - * from the org.eclipse.debug.core.watchExpressionDelegates - * extension point. - */ - private void loadWatchExpressionDelegates() { - IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), "watchExpressionDelegates"); //$NON-NLS-1$ - IConfigurationElement[] configurationElements = extensionPoint.getConfigurationElements(); - for (int i = 0; i < configurationElements.length; i++) { - IConfigurationElement element = configurationElements[i]; - if (element.getName().equals("watchExpressionDelegate")) { //$NON-NLS-1$ - String debugModel = element.getAttribute("debugModel"); //$NON-NLS-1$ - if (debugModel == null || debugModel.length() == 0) { - continue; - } - fWatchExpressionDelegates.put(debugModel, element); - } - } - } - - /** - * Returns a watch expression delegate specified for the given debug - * model via extension or <code>null</code> if no delegate is available. - * - * @param debugModel the unique identifier of a debug model - * @return a watch expression delegate associated with the given model - * or <code>null</code> if none - * @since 3.0 - */ - public IWatchExpressionDelegate newWatchExpressionDelegate(String debugModel) { - try { - IConfigurationElement element= (IConfigurationElement) fWatchExpressionDelegates.get(debugModel); - if (element != null) { - return (IWatchExpressionDelegate) element.createExecutableExtension("delegateClass"); //$NON-NLS-1$ - } - return null; - } catch (CoreException e) { - DebugPlugin.log(e); - return null; - } - } - - /** - * Loads any persisted watch expresions from the preferences. - * NOTE: It's important that no setter methods are called on - * the watchpoints which will fire change events as this - * will cause an infinite loop (see Bug 27281). - */ - private void loadPersistedExpressions() { - String expressionsString= DebugPlugin.getDefault().getPluginPreferences().getString(PREF_WATCH_EXPRESSIONS); - if (expressionsString.length() == 0) { - return; - } - Element root; - try { - root = DebugPlugin.parseDocument(expressionsString); - } catch (CoreException e) { - DebugPlugin.logMessage("An exception occurred while loading watch expressions.", e); //$NON-NLS-1$ - return; - } - if (!root.getNodeName().equals(WATCH_EXPRESSIONS_TAG)) { - DebugPlugin.logMessage("Invalid format encountered while loading watch expressions.", null); //$NON-NLS-1$ - return; - } - NodeList list= root.getChildNodes(); - boolean expressionsAdded= false; - for (int i= 0, numItems= list.getLength(); i < numItems; i++) { - Node node= list.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element= (Element) node; - if (!element.getNodeName().equals(EXPRESSION_TAG)) { - DebugPlugin.logMessage(MessageFormat.format("Invalid XML element encountered while loading watch expressions: {0}", new String[] {node.getNodeName()}), null); //$NON-NLS-1$ - continue; - } - String expressionText= element.getAttribute(TEXT_TAG); - if (expressionText.length() > 0) { - boolean enabled= TRUE_VALUE.equals(element.getAttribute(ENABLED_TAG)); - IWatchExpression expression= newWatchExpression(expressionText, enabled); - if (fExpressions == null) { - fExpressions= new Vector(list.getLength()); - } - fExpressions.add(expression); - expressionsAdded= true; - } else { - DebugPlugin.logMessage("Invalid expression entry encountered while loading watch expressions. Expression text is empty.", null); //$NON-NLS-1$ - } - } - } - if (expressionsAdded) { - DebugPlugin.getDefault().addDebugEventListener(this); - } - } - - /** - * Creates a new watch expression with the given expression - * and the given enablement; - * - * @param expressionText the text of the expression to be evaluated - * @param enabled whether or not the new expression should be enabled - * @return the new watch expression - */ - private IWatchExpression newWatchExpression(String expressionText, boolean enabled) { - return new WatchExpression(expressionText, enabled); - } - - /** - * @see IExpressionManager#newWatchExpression(String) - */ - public IWatchExpression newWatchExpression(String expressionText) { - return new WatchExpression(expressionText); - } - - /** - * Persists this manager's watch expressions as XML in the - * preference store. - */ - public void storeWatchExpressions() { - Preferences prefs= DebugPlugin.getDefault().getPluginPreferences(); - String expressionString= ""; //$NON-NLS-1$ - try { - expressionString= getWatchExpressionsAsXML(); - } catch (IOException e) { - DebugPlugin.log(e); - } catch (ParserConfigurationException e) { - DebugPlugin.log(e); - } catch (TransformerException e) { - DebugPlugin.log(e); - } - prefs.setValue(PREF_WATCH_EXPRESSIONS, expressionString); - DebugPlugin.getDefault().savePluginPreferences(); - } - - /** - * Returns this manager's watch expressions as XML. - * @return this manager's watch expressions as XML - * @throws IOException if an exception occurs while creating - * the XML document. - * @throws ParserConfigurationException if an exception occurs while creating - * the XML document. - * @throws TransformerException if an exception occurs while creating - * the XML document. - */ - private String getWatchExpressionsAsXML() throws IOException, ParserConfigurationException, TransformerException { - IExpression[] expressions= getExpressions(); - Document document= LaunchManager.getDocument(); - Element rootElement= document.createElement(WATCH_EXPRESSIONS_TAG); - document.appendChild(rootElement); - for (int i = 0; i < expressions.length; i++) { - IExpression expression= expressions[i]; - if (expression instanceof IWatchExpression) { - Element element= document.createElement(EXPRESSION_TAG); - element.setAttribute(TEXT_TAG, expression.getExpressionText()); - element.setAttribute(ENABLED_TAG, ((IWatchExpression) expression).isEnabled() ? TRUE_VALUE : FALSE_VALUE); - rootElement.appendChild(element); - } - } - return LaunchManager.serializeDocument(document); - } - - /** - * @see IExpressionManager#addExpression(IExpression) - */ - public void addExpression(IExpression expression) { - addExpressions(new IExpression[]{expression}); - } - - /** - * @see IExpressionManager#addExpressions(IExpression[]) - */ - public void addExpressions(IExpression[] expressions) { - if (fExpressions == null) { - fExpressions = new Vector(expressions.length); - } - boolean addedWatchExpression= false; - boolean wasEmpty = fExpressions.isEmpty(); - List added = new ArrayList(expressions.length); - for (int i = 0; i < expressions.length; i++) { - IExpression expression = expressions[i]; - if (fExpressions.indexOf(expression) == -1) { - added.add(expression); - fExpressions.add(expression); - if (expression instanceof IWatchExpression) { - addedWatchExpression= true; - } - } - } - if (wasEmpty) { - DebugPlugin.getDefault().addDebugEventListener(this); - } - if (!added.isEmpty()) { - fireUpdate((IExpression[])added.toArray(new IExpression[added.size()]), ADDED); - } - if (addedWatchExpression) { - storeWatchExpressions(); - } - } - - /** - * @see IExpressionManager#getExpressions() - */ - public IExpression[] getExpressions() { - if (fExpressions == null) { - return new IExpression[0]; - } - IExpression[] temp= new IExpression[fExpressions.size()]; - fExpressions.copyInto(temp); - return temp; - } - - /** - * @see IExpressionManager#getExpressions(String) - */ - public IExpression[] getExpressions(String modelIdentifier) { - if (fExpressions == null) { - return new IExpression[0]; - } - ArrayList temp= new ArrayList(fExpressions.size()); - Iterator iter= fExpressions.iterator(); - while (iter.hasNext()) { - IExpression expression= (IExpression) iter.next(); - String id= expression.getModelIdentifier(); - if (id != null && id.equals(modelIdentifier)) { - temp.add(expression); - } - } - return (IExpression[]) temp.toArray(new IExpression[temp.size()]); - } - - /** - * @see IExpressionManager#removeExpression(IExpression) - */ - public void removeExpression(IExpression expression) { - removeExpressions(new IExpression[] {expression}); - } - - /** - * @see IExpressionManager#removeExpressions(IExpression[]) - */ - public void removeExpressions(IExpression[] expressions) { - if (fExpressions == null) { - return; - } - List removed = new ArrayList(expressions.length); - for (int i = 0; i < expressions.length; i++) { - IExpression expression = expressions[i]; - if (fExpressions.remove(expression)) { - removed.add(expression); - expression.dispose(); - } - } - if (fExpressions.isEmpty()) { - DebugPlugin.getDefault().removeDebugEventListener(this); - } - if (!removed.isEmpty()) { - fireUpdate((IExpression[])removed.toArray(new IExpression[removed.size()]), REMOVED); - storeWatchExpressions(); - } - } - - /** - * @see IExpressionManager#addExpressionListener(IExpressionListener) - */ - public void addExpressionListener(IExpressionListener listener) { - if (fListeners == null) { - fListeners = new ListenerList(2); - } - fListeners.add(listener); - } - - /** - * @see IExpressionManager#removeExpressionListener(IExpressionListener) - */ - public void removeExpressionListener(IExpressionListener listener) { - if (fListeners == null) { - return; - } - fListeners.remove(listener); - } - - /** - * @see IDebugEventSetListener#handleDebugEvent(DebugEvent) - */ - public void handleDebugEvents(DebugEvent[] events) { - List changed = null; - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - if (event.getSource() instanceof IExpression) { - switch (event.getKind()) { - case DebugEvent.CHANGE: - if (changed == null) { - changed = new ArrayList(1); - } - changed.add(event.getSource()); - break; - default: - break; - } - } - } - if (changed != null) { - IExpression[] array = (IExpression[])changed.toArray(new IExpression[changed.size()]); - fireUpdate(array, CHANGED); - } - } - - /** - * The given watch expression has changed. Update the persisted - * expressions to store this change. - * - * @param expression the changed expression - */ - protected void watchExpressionChanged(IWatchExpression expression) { - if (fExpressions != null && fExpressions.contains(expression)) { - storeWatchExpressions(); - } - } - - /** - * Notifies listeners of the adds/removes/changes - * - * @param breakpoints associated breakpoints - * @param deltas or <code>null</code> - * @param update type of change - */ - private void fireUpdate(IExpression[] expressions, int update) { - // single listeners - getExpressionNotifier().notify(expressions, update); - - // multi listeners - getExpressionsNotifier().notify(expressions, update); - } - - /** - * @see IExpressionManager#hasExpressions() - */ - public boolean hasExpressions() { - return fExpressions != null && !fExpressions.isEmpty(); - } - - /** - * @see org.eclipse.debug.core.IExpressionManager#addExpressionListener(org.eclipse.debug.core.IExpressionsListener) - */ - public void addExpressionListener(IExpressionsListener listener) { - if (fExpressionsListeners == null) { - fExpressionsListeners = new ListenerList(2); - } - fExpressionsListeners.add(listener); - } - - /** - * @see org.eclipse.debug.core.IExpressionManager#removeExpressionListener(org.eclipse.debug.core.IExpressionsListener) - */ - public void removeExpressionListener(IExpressionsListener listener) { - if (fExpressionsListeners == null) { - return; - } - fExpressionsListeners.remove(listener); - } - - private ExpressionNotifier getExpressionNotifier() { - return new ExpressionNotifier(); - } - - /** - * Notifies an expression listener (single expression) in a safe runnable to - * handle exceptions. - */ - class ExpressionNotifier implements ISafeRunnable { - - private IExpressionListener fListener; - private int fType; - private IExpression fExpression; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("ExpressionManager.An_exception_occurred_during_expression_change_notification._1"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.expressionAdded(fExpression); - break; - case REMOVED: - fListener.expressionRemoved(fExpression); - break; - case CHANGED: - fListener.expressionChanged(fExpression); - break; - } - } - - /** - * Notifies listeners of the add/change/remove - * - * @param expression the expression that has changed - * @param update the type of change - */ - public void notify(IExpression[] expressions, int update) { - if (fListeners != null) { - fType = update; - Object[] copiedListeners= fListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IExpressionListener)copiedListeners[i]; - for (int j = 0; j < expressions.length; j++) { - fExpression = expressions[j]; - Platform.run(this); - } - } - } - fListener = null; - fExpression = null; - } - } - - private ExpressionsNotifier getExpressionsNotifier() { - return new ExpressionsNotifier(); - } - - /** - * Notifies an expression listener (multiple expressions) in a safe runnable - * to handle exceptions. - */ - class ExpressionsNotifier implements ISafeRunnable { - - private IExpressionsListener fListener; - private int fType; - private IExpression[] fNotifierExpressions; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("ExpressionManager.An_exception_occurred_during_expression_change_notification._1"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.expressionsAdded(fNotifierExpressions); - break; - case REMOVED: - fListener.expressionsRemoved(fNotifierExpressions); - break; - case CHANGED: - fListener.expressionsChanged(fNotifierExpressions); - break; - } - } - - /** - * Notifies listeners of the adds/changes/removes - * - * @param expressions the expressions that changed - * @param update the type of change - */ - public void notify(IExpression[] expressions, int update) { - if (fExpressionsListeners != null) { - fNotifierExpressions = expressions; - fType = update; - Object[] copiedListeners = fExpressionsListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IExpressionsListener)copiedListeners[i]; - Platform.run(this); - } - } - fNotifierExpressions = null; - fListener = null; - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java deleted file mode 100644 index 3c8da0692..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/InputStreamMonitor.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.IOException; -import java.io.OutputStream; -import java.util.Vector; - -import org.eclipse.debug.core.DebugPlugin; - -/** - * Writes to the input stream of a system process, - * queueing output if the stream is blocked. - * - * The input stream monitor writes to system in via - * an output stream. - */ -public class InputStreamMonitor { - - /** - * The stream which is being written to (connected to system in). - */ - private OutputStream fStream; - /** - * The queue of output. - */ - private Vector fQueue; - /** - * The thread which writes to the stream. - */ - private Thread fThread; - /** - * A lock for ensuring that writes to the queue are contiguous - */ - private Object fLock; - - /** - * Wether the underlying output stream has been closed - */ - private boolean fClosed = false; - - /** - * Creates an input stream monitor which writes - * to system in via the given output stream. - */ - public InputStreamMonitor(OutputStream stream) { - fStream= stream; - fQueue= new Vector(); - fLock= new Object(); - } - - /** - * Appends the given text to the stream, or - * queues the text to be written at a later time - * if the stream is blocked. - */ - public void write(String text) { - synchronized(fLock) { - fQueue.add(text); - fLock.notifyAll(); - } - } - - /** - * Starts a thread which writes the stream. - */ - public void startMonitoring() { - if (fThread == null) { - fThread= new Thread(new Runnable() { - public void run() { - write(); - } - }, DebugCoreMessages.getString("InputStreamMonitor.label")); //$NON-NLS-1$ - fThread.start(); - } - } - - /** - * Close all communications between this - * monitor and the underlying stream. - */ - public void close() { - if (fThread != null) { - Thread thread= fThread; - fThread= null; - thread.interrupt(); - } - } - - /** - * Continuously writes to the stream. - */ - protected void write() { - while (fThread != null) { - writeNext(); - } - if (!fClosed) { - try { - fStream.close(); - } catch (IOException e) { - DebugPlugin.log(e); - } - } - } - - /** - * Write the text in the queue to the stream. - */ - protected void writeNext() { - while (!fQueue.isEmpty() && !fClosed) { - String text = (String)fQueue.firstElement(); - fQueue.removeElementAt(0); - try { - fStream.write(text.getBytes()); - fStream.flush(); - } catch (IOException e) { - DebugPlugin.log(e); - } - } - try { - synchronized(fLock) { - fLock.wait(); - } - } catch (InterruptedException e) { - } - } - - /** - * Closes the output stream attached to the standard input stream of this - * monitor's process. - */ - public void closeInputStream() throws IOException { - if (!fClosed) { - fClosed = true; - fStream.close(); - } else { - throw new IOException(); - } - - } -} - 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 c1e1a1bca..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java +++ /dev/null @@ -1,602 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.IOException; -import java.io.StringReader; -import java.text.MessageFormat; -import java.util.List; -import java.util.Map; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -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.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; - -/** - * Launch configuration handle. - * - * @see ILaunchConfiguration - */ -public class LaunchConfiguration extends PlatformObject implements ILaunchConfiguration { - - /** - * Location this configuration is stored in. This - * is the key for a launch configuration handle. - */ - private IPath fLocation; - - /** - * Constructs a launch configuration in the given location. - * - * @param location path to where this launch configuration's - * underlying file is located - */ - protected LaunchConfiguration(IPath location) { - setLocation(location); - } - - /** - * 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(); - StringReader reader = new StringReader(memento); - InputSource source = new InputSource(reader); - root = parser.parse(source).getDocumentElement(); - - String localString = root.getAttribute("local"); //$NON-NLS-1$ - String path = root.getAttribute("path"); //$NON-NLS-1$ - - String message = null; - if (path == null) { - message = DebugCoreMessages.getString("LaunchConfiguration.Invalid_launch_configuration_memento__missing_path_attribute_3"); //$NON-NLS-1$ - } else if (localString == null) { - message = DebugCoreMessages.getString("LaunchConfiguration.Invalid_launch_configuration_memento__missing_local_attribute_4"); //$NON-NLS-1$ - } - if (message != null) { - IStatus s = newStatus(message, DebugException.INTERNAL_ERROR, null); - throw new CoreException(s); - } - - IPath location = null; - boolean local = (Boolean.valueOf(localString)).booleanValue(); - if (local) { - location = LaunchManager.LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH.append(path); - } else { - location = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)).getLocation(); - } - setLocation(location); - if (location == null) { - IStatus s = newStatus(MessageFormat.format(DebugCoreMessages.getString("LaunchConfiguration.Unable_to_restore_location_for_launch_configuration_from_memento__{0}_1"), new String[]{path}), DebugPlugin.INTERNAL_ERROR, null); //$NON-NLS-1$ - throw new CoreException(s); - } - return; - } catch (ParserConfigurationException e) { - ex = e; - } catch (SAXException e) { - ex = e; - } catch (IOException e) { - ex = e; - } - IStatus s = newStatus(DebugCoreMessages.getString("LaunchConfiguration.Exception_occurred_parsing_memento_5"), DebugException.INTERNAL_ERROR, ex); //$NON-NLS-1$ - throw new CoreException(s); - } - - /** - * 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); - } - - /** - * @see ILaunchConfiguration#launch(String, IProgressMonitor) - */ - public ILaunch launch(String mode, IProgressMonitor monitor) throws CoreException { - return launch(mode, monitor, false); - } - - /** - * 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); - } - } - } - - /** - * @see ILaunchConfiguration#supportsMode(String) - */ - public boolean supportsMode(String mode) throws CoreException { - return getType().supportsMode(mode); - } - - /** - * A configuration's name is that of the last segment - * in it's location (subtract the ".launch" extension). - * - * @see ILaunchConfiguration#getName() - */ - public String getName() { - return getLastLocationSegment(); - } - - private String getLastLocationSegment() { - String name = getLocation().lastSegment(); - if (name.length() > LAUNCH_CONFIGURATION_FILE_EXTENSION.length()) { - name = name.substring(0, name.length() - (LAUNCH_CONFIGURATION_FILE_EXTENSION.length() + 1)); - } - return name; - } - - /** - * @see ILaunchConfiguration#getLocation() - */ - public IPath getLocation() { - return fLocation; - } - - /** - * Sets the location of this configuration's underlying - * file. - * - * @param location the location of this configuration's underlying - * file - */ - private void setLocation(IPath location) { - fLocation = location; - } - - /** - * @see ILaunchConfiguration#exists() - */ - public boolean exists() { - return getLocation().toFile().exists(); - } - - /** - * @see ILaunchConfiguration#getAttribute(String, int) - */ - public int getAttribute(String attributeName, int defaultValue) throws CoreException { - return getInfo().getIntAttribute(attributeName, defaultValue); - } - - /** - * @see ILaunchConfiguration#getAttribute(String, String) - */ - public String getAttribute(String attributeName, String defaultValue) throws CoreException { - return getInfo().getStringAttribute(attributeName, defaultValue); - } - - /** - * @see ILaunchConfiguration#getAttribute(String, boolean) - */ - public boolean getAttribute(String attributeName, boolean defaultValue) throws CoreException { - return getInfo().getBooleanAttribute(attributeName, defaultValue); - } - - /** - * @see ILaunchConfiguration#getAttribute(String, List) - */ - public List getAttribute(String attributeName, List defaultValue) throws CoreException { - return getInfo().getListAttribute(attributeName, defaultValue); - } - - /** - * @see ILaunchConfiguration#getAttribute(String, Map) - */ - public Map getAttribute(String attributeName, Map defaultValue) throws CoreException { - return getInfo().getMapAttribute(attributeName, defaultValue); - } - - /** - * @see ILaunchConfiguration#getType() - */ - public ILaunchConfigurationType getType() throws CoreException { - return getInfo().getType(); - } - - /** - * @see ILaunchConfiguration#isLocal() - */ - public boolean isLocal() { - IPath localPath = LaunchManager.LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH; - return localPath.isPrefixOf(getLocation()); - } - - /** - * @see ILaunchConfiguration#getWorkingCopy() - */ - public ILaunchConfigurationWorkingCopy getWorkingCopy() throws CoreException { - return new LaunchConfigurationWorkingCopy(this); - } - - /** - * @see ILaunchConfiguration#copy(String name) - */ - public ILaunchConfigurationWorkingCopy copy(String name) throws CoreException { - ILaunchConfigurationWorkingCopy copy = new LaunchConfigurationWorkingCopy(this, name); - return copy; - } - - /** - * @see ILaunchConfiguration#isWorkingCopy() - */ - public boolean isWorkingCopy() { - return false; - } - - /** - * @see ILaunchConfiguration#delete() - */ - public void delete() throws CoreException { - if (exists()) { - if (isLocal()) { - if (!(getLocation().toFile().delete())) { - throw new DebugException( - new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfiguration.Failed_to_delete_launch_configuration._1"), null) //$NON-NLS-1$ - ); - } - // manually update the launch manager cache since there - // will be no resource delta - getLaunchManager().launchConfigurationDeleted(this); - } else { - // delete the resource using IFile API such that - // resource deltas are fired. - IFile file = getFile(); - if (file != null) { - // validate edit - if (file.isReadOnly()) { - IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] {file}, null); - if (!status.isOK()) { - throw new CoreException(status); - } - } - file.delete(true, null); - } else { - // Error - the exists test passed, but could not locate file - } - } - } - } - - /** - * 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 configuration delegate for this - * launch configuration, for the specified launch mode. - * - * @param mode launch mode - * @return launch configuration delegate - * @exception CoreException if the delegate was unable - * to be created - */ - protected ILaunchConfigurationDelegate getDelegate(String mode) throws CoreException { - return getType().getDelegate(mode); - } - - /** - * Returns the launch manager - * - * @return launch manager - */ - protected LaunchManager getLaunchManager() { - return (LaunchManager)DebugPlugin.getDefault().getLaunchManager(); - } - - /** - * @see ILaunchConfiguration#getMemento() - */ - public String getMemento() throws CoreException { - IPath relativePath = null; - if (isLocal()) { - IPath rootPath = LaunchManager.LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH; - IPath configPath = getLocation(); - relativePath = configPath.removeFirstSegments(rootPath.segmentCount()); - relativePath = relativePath.setDevice(null); - } else { - IFile file = getFile(); - if (file == null) { - // cannot generate memento - missing file - IStatus status = newStatus(MessageFormat.format(DebugCoreMessages.getString("LaunchConfiguration.Unable_to_generate_memento_for_{0},_shared_file_does_not_exist._1"), new String[]{getName()}), DebugException.INTERNAL_ERROR, null); //$NON-NLS-1$ - throw new CoreException(status); - } - relativePath = getFile().getFullPath(); - } - Exception e= null; - try { - Document doc = LaunchManager.getDocument(); - Element node = doc.createElement("launchConfiguration"); //$NON-NLS-1$ - doc.appendChild(node); - node.setAttribute("local", (new Boolean(isLocal())).toString()); //$NON-NLS-1$ - node.setAttribute("path", relativePath.toString()); //$NON-NLS-1$ - return LaunchManager.serializeDocument(doc); - } catch (IOException ioe) { - e= ioe; - } catch (ParserConfigurationException pce) { - e= pce; - } catch (TransformerException te) { - e= te; - } - if (e != null) { - IStatus status = newStatus(DebugCoreMessages.getString("LaunchConfiguration.Exception_occurred_creating_launch_configuration_memento_9"), DebugException.INTERNAL_ERROR, e); //$NON-NLS-1$ - throw new CoreException(status); - } - //execution will never reach here - return null; - - } - - /** - * @see ILaunchConfiguration#getFile() - */ - public IFile getFile() { - if (isLocal()) { - return null; - } - IFile[] files= ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(getLocation()); - if (files.length > 0) { - return files[0]; - } - return null; - } - - /** - * @see ILaunchConfiguration#contentsEqual(ILaunchConfiguration) - */ - public boolean contentsEqual(ILaunchConfiguration object) { - try { - if (object instanceof LaunchConfiguration) { - LaunchConfiguration otherConfig = (LaunchConfiguration) object; - return getName().equals(otherConfig.getName()) - && getType().equals(otherConfig.getType()) - && getLocation().equals(otherConfig.getLocation()) - && getInfo().equals(otherConfig.getInfo()); - } - return false; - } catch (CoreException ce) { - return false; - } - } - - /** - * 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; - } - ILaunchConfiguration config = (ILaunchConfiguration) object; - if (!config.isWorkingCopy()) { - return config.getLocation().equals(getLocation()); - } - } - return false; - } - - /** - * @see Object#hashCode() - */ - public int hashCode() { - return getLocation().hashCode(); - } - - /** - * Returns the container this launch configuration is - * stored in, or <code>null</code> if this launch configuration - * is stored locally. - * - * @return the container this launch configuration is - * stored in, or <code>null</code> if this launch configuration - * is stored locally - */ - protected IContainer getContainer() { - IFile file = getFile(); - if (file != null) { - return file.getParent(); - } - return null; - } - - /** - * @see org.eclipse.debug.core.ILaunchConfiguration#getCategory() - */ - public String getCategory() throws CoreException { - return getType().getCategory(); - } - - /** - * @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#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 { - // bug 28245 - force the delegate to load in case it is interested in launch notifications - ILaunchConfigurationDelegate delegate= getDelegate(mode); - 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.INTERNAL_ERROR, - MessageFormat.format(DebugCoreMessages.getString("LaunchConfiguration.13"), new String[]{mode, launch.getLaunchMode()}), null); //$NON-NLS-1$ - throw new CoreException(status); - } - } - - 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); - } - - - if (monitor == null) { - monitor= new NullProgressMonitor(); - } - // perform initial pre-launch sanity checks - if (delegate2 != null) { - if (!(delegate2.preLaunchCheck(this, mode, monitor))) { - // canceled - monitor.setCanceled(true); - return launch; - } - } - // preform pre-launch build - IProgressMonitor subMonitor = monitor; - if (build) { - subMonitor = new SubProgressMonitor(monitor, 100); - if (delegate2 != null) { - build = delegate2.buildForLaunch(this, mode, subMonitor); - } - if (build) { - ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, subMonitor); - } - subMonitor = new SubProgressMonitor(monitor, 100); - } - // final validation - if (delegate2 != null) { - if (!(delegate2.finalLaunchCheck(this, mode, subMonitor))) { - // canceled - monitor.setCanceled(true); - return launch; - } - } - - if (register) { - getLaunchManager().addLaunch(launch); - } - try { - initializeSourceLocator(launch); - delegate.launch(this, mode, launch, subMonitor); - } catch (CoreException e) { - // if there was an exception, and the launch is empty, remove it - if (!launch.hasChildren()) { - getLaunchManager().removeLaunch(launch); - } - throw e; - } - if (monitor.isCanceled()) { - getLaunchManager().removeLaunch(launch); - } - return launch; - } -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationComparator.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationComparator.java deleted file mode 100644 index 2032315f5..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationComparator.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.util.Comparator; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.debug.core.DebugPlugin; - -/** - * Proxy to a runtime classpath entry resolver extension. - */ -public class LaunchConfigurationComparator implements Comparator { - - private IConfigurationElement fConfigurationElement; - - private Comparator fDelegate; - - /** - * Constructs a new resolver on the given configuration element - */ - public LaunchConfigurationComparator(IConfigurationElement element) { - fConfigurationElement = element; - } - - /** - * Returns the resolver delegate (and creates if required) - */ - protected Comparator getComparator() { - if (fDelegate == null) { - try { - fDelegate = (Comparator)fConfigurationElement.createExecutableExtension("class"); //$NON-NLS-1$ - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - return fDelegate; - } - - - /** - * @see Comparator#compare(Object, Object) - */ - public int compare(Object o1, Object o2) { - return getComparator().compare(o1, o2); - } - - /** - * @see Object#equals(Object) - */ - public boolean equals(Object obj) { - return getComparator().equals(obj); - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationInfo.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationInfo.java deleted file mode 100644 index df35b7e69..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationInfo.java +++ /dev/null @@ -1,574 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * The information associated with a launch configuration - * handle. - */ -public class LaunchConfigurationInfo { - - /** - * This configurations attribute table. - * Keys are <code>String</code>s and values - * are one of <code>String</code>, <code>Integer</code>, - * or <code>Boolean</code>. - */ - private HashMap fAttributes; - - /** - * This launch configuration's type - */ - private ILaunchConfigurationType fType; - - /** - * Constructs a new empty info - */ - protected LaunchConfigurationInfo() { - setAttributeTable(new HashMap(10)); - } - - /** - * Returns this configuration's attribute table. - * - * @return attribute table - */ - private HashMap getAttributeTable() { - return fAttributes; - } - - /** - * Sets this configuration's attribute table. - * - * @param table attribute table - */ - private void setAttributeTable(HashMap table) { - fAttributes = table; - } - - /** - * Sets the attributes in this info to those in the given map. - * - * @param map - */ - protected void setAttributes(Map map) { - if (map == null) { - setAttributeTable(new HashMap()); - return; - } - Set entrySet = map.entrySet(); - HashMap attributes = new HashMap(entrySet.size()); - Iterator iter = entrySet.iterator(); - while (iter.hasNext()) { - Map.Entry entry = (Map.Entry)iter.next(); - attributes.put(entry.getKey(), entry.getValue()); - } - setAttributeTable(attributes); - } - - /** - * Returns the <code>String</code> attribute with the - * given key or the given default value if undefined. - * - * @return attribute specified by given key or the defaultValue - * if undefined - * @throws CoreException if the attribute with the given key exists - * but is not a <code>String</code> - */ - protected String getStringAttribute(String key, String defaultValue) throws CoreException { - Object attr = getAttributeTable().get(key); - if (attr != null) { - if (attr instanceof String) { - return (String)attr; - } - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.lang.String._1"), new String[] {key}), null //$NON-NLS-1$ - ) - ); - } - return defaultValue; - } - - /** - * Returns the <code>int</code> attribute with the - * given key or the given default value if undefined. - * - * @return attribute specified by given key or the defaultValue - * if undefined - * @throws CoreException if the attribute with the given key exists - * but is not an <code>int</code> - */ - protected int getIntAttribute(String key, int defaultValue) throws CoreException { - Object attr = getAttributeTable().get(key); - if (attr != null) { - if (attr instanceof Integer) { - return ((Integer)attr).intValue(); - } - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_int._2"), new String[] {key}), null //$NON-NLS-1$ - ) - ); - } - return defaultValue; - } - - /** - * Returns the <code>boolean</code> attribute with the - * given key or the given default value if undefined. - * - * @return attribute specified by given key or the defaultValue - * if undefined - * @throws CoreException if the attribute with the given key exists - * but is not a <code>boolean</code> - */ - protected boolean getBooleanAttribute(String key, boolean defaultValue) throws CoreException { - Object attr = getAttributeTable().get(key); - if (attr != null) { - if (attr instanceof Boolean) { - return ((Boolean)attr).booleanValue(); - } - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_boolean._3"), new String[] {key}), null //$NON-NLS-1$ - ) - ); - } - return defaultValue; - } - - /** - * Returns the <code>java.util.List</code> attribute with the - * given key or the given default value if undefined. - * - * @return attribute specified by given key or the defaultValue - * if undefined - * @throws CoreException if the attribute with the given key exists - * but is not a <code>java.util.List</code> - */ - protected List getListAttribute(String key, List defaultValue) throws CoreException { - Object attr = getAttributeTable().get(key); - if (attr != null) { - if (attr instanceof List) { - return (List)attr; - } - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.List._1"), new String[] {key}), null //$NON-NLS-1$ - ) - ); - } - return defaultValue; - } - - /** - * Returns the <code>java.util.Map</code> attribute with the - * given key or the given default value if undefined. - * - * @return attribute specified by given key or the defaultValue - * if undefined - * @throws CoreException if the attribute with the given key exists - * but is not a <code>java.util.Map</code> - */ - protected Map getMapAttribute(String key, Map defaultValue) throws CoreException { - Object attr = getAttributeTable().get(key); - if (attr != null) { - if (attr instanceof Map) { - return (Map)attr; - } - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.Map._1"), new String[] {key}), null //$NON-NLS-1$ - ) - ); - } - return defaultValue; - } - - /** - * Sets this configuration's type. - * - * @param type launch configuration type - */ - protected void setType(ILaunchConfigurationType type) { - fType = type; - } - - /** - * Returns this configuration's type. - * - * @return launch configuration type - */ - protected ILaunchConfigurationType getType() { - return fType; - } - - - /** - * Returns a copy of this info object - * - * @return copy of this info - */ - protected LaunchConfigurationInfo getCopy() { - LaunchConfigurationInfo copy = new LaunchConfigurationInfo(); - copy.setType(getType()); - copy.setAttributeTable(getAttributes()); - return copy; - } - - /** - * Returns a copy of this info's attribute map. - * - * @return a copy of this info's attribute map - */ - protected HashMap getAttributes() { - return (HashMap)getAttributeTable().clone(); - } - - /** - * Sets the given attribute to the given value. Only - * working copy's should use this API. - * - * @param key attribute key - * @param value attribute value - */ - protected void setAttribute(String key, Object value) { - if (value == null) { - getAttributeTable().remove(key); - } else { - getAttributeTable().put(key, value); - } - } - - /** - * Returns the content of this info as XML - * - * @return the content of this info as XML - * @throws CoreException if a attribute has been set with a null key - * @throws IOException if an exception occurs creating the XML - * @throws ParserConfigurationException if an exception occurs creating the XML - * @throws TransformerException if an exception occurs creating the XML - */ - protected String getAsXML() throws CoreException, IOException, ParserConfigurationException, TransformerException { - - Document doc = LaunchManager.getDocument(); - Element configRootElement = doc.createElement("launchConfiguration"); //$NON-NLS-1$ - doc.appendChild(configRootElement); - - configRootElement.setAttribute("type", getType().getIdentifier()); //$NON-NLS-1$ - - Iterator keys = getAttributeTable().keySet().iterator(); - while (keys.hasNext()) { - String key = (String)keys.next(); - if (key == null) { - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfigurationInfo.36"), null //$NON-NLS-1$ - ) - ); - } - Object value = getAttributeTable().get(key); - if (value == null) { - continue; - } - Element element = null; - String valueString = null; - if (value instanceof String) { - valueString = (String)value; - element = createKeyValueElement(doc, "stringAttribute", key, valueString); //$NON-NLS-1$ - } else if (value instanceof Integer) { - valueString = ((Integer)value).toString(); - element = createKeyValueElement(doc, "intAttribute", key, valueString); //$NON-NLS-1$ - } else if (value instanceof Boolean) { - valueString = ((Boolean)value).toString(); - element = createKeyValueElement(doc, "booleanAttribute", key, valueString); //$NON-NLS-1$ - } else if (value instanceof List) { - element = createListElement(doc, "listAttribute", key, (List)value); //$NON-NLS-1$ - } else if (value instanceof Map) { - element = createMapElement(doc, "mapAttribute", key, (Map)value); //$NON-NLS-1$ - } - configRootElement.appendChild(element); - } - - return LaunchManager.serializeDocument(doc); - } - - /** - * Helper method that creates a 'key value' element of the specified type with the - * specified attribute values. - */ - protected Element createKeyValueElement(Document doc, String elementType, String key, String value) { - Element element = doc.createElement(elementType); - element.setAttribute("key", key); //$NON-NLS-1$ - element.setAttribute("value", value); //$NON-NLS-1$ - return element; - } - - protected Element createListElement(Document doc, String elementType, String listKey, List list) { - Element listElement = doc.createElement(elementType); - listElement.setAttribute("key", listKey); //$NON-NLS-1$ - Iterator iterator = list.iterator(); - while (iterator.hasNext()) { - String value = (String) iterator.next(); - Element element = doc.createElement("listEntry"); //$NON-NLS-1$ - element.setAttribute("value", value); //$NON-NLS-1$ - listElement.appendChild(element); - } - return listElement; - } - - protected Element createMapElement(Document doc, String elementType, String mapKey, Map map) { - Element mapElement = doc.createElement(elementType); - mapElement.setAttribute("key", mapKey); //$NON-NLS-1$ - Iterator iterator = map.keySet().iterator(); - while (iterator.hasNext()) { - String key = (String) iterator.next(); - String value = (String) map.get(key); - Element element = doc.createElement("mapEntry"); //$NON-NLS-1$ - element.setAttribute("key", key); //$NON-NLS-1$ - element.setAttribute("value", value); //$NON-NLS-1$ - mapElement.appendChild(element); - } - return mapElement; - } - - protected void initializeFromXML(Element root) throws CoreException { - if (!root.getNodeName().equalsIgnoreCase("launchConfiguration")) { //$NON-NLS-1$ - throw getInvalidFormatDebugException(); - } - - // read type - String id = root.getAttribute("type"); //$NON-NLS-1$ - if (id == null) { - throw getInvalidFormatDebugException(); - } - - ILaunchConfigurationType type = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(id); - if (type == null) { - String message= MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.missing_type"), new Object[]{id}); //$NON-NLS-1$ - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.MISSING_LAUNCH_CONFIGURATION_TYPE, message, null) - ); - } - setType(type); - - NodeList list = root.getChildNodes(); - int length = list.getLength(); - for (int i = 0; i < length; ++i) { - Node node = list.item(i); - short nodeType = node.getNodeType(); - if (nodeType == Node.ELEMENT_NODE) { - Element element = (Element) node; - String nodeName = element.getNodeName(); - - if (nodeName.equalsIgnoreCase("stringAttribute")) { //$NON-NLS-1$ - setStringAttribute(element); - } else if (nodeName.equalsIgnoreCase("intAttribute")) { //$NON-NLS-1$ - setIntegerAttribute(element); - } else if (nodeName.equalsIgnoreCase("booleanAttribute")) { //$NON-NLS-1$ - setBooleanAttribute(element); - } else if (nodeName.equalsIgnoreCase("listAttribute")) { //$NON-NLS-1$ - setListAttribute(element); - } else if (nodeName.equalsIgnoreCase("mapAttribute")) { //$NON-NLS-1$ - setMapAttribute(element); - } - } - } - } - - protected void setStringAttribute(Element element) throws CoreException { - String key = getKeyAttribute(element); - String value = getValueAttribute(element); - setAttribute(key, value); - } - - protected void setIntegerAttribute(Element element) throws CoreException { - String key = getKeyAttribute(element); - String value = getValueAttribute(element); - setAttribute(key, new Integer(value)); - } - - protected void setBooleanAttribute(Element element) throws CoreException { - String key = getKeyAttribute(element); - String value = getValueAttribute(element); - setAttribute(key, new Boolean(value)); - } - - protected void setListAttribute(Element element) throws CoreException { - String listKey = element.getAttribute("key"); //$NON-NLS-1$ - NodeList nodeList = element.getChildNodes(); - int entryCount = nodeList.getLength(); - List list = new ArrayList(entryCount); - for (int i = 0; i < entryCount; i++) { - Node node = nodeList.item(i); - short type = node.getNodeType(); - if (type == Node.ELEMENT_NODE) { - Element subElement = (Element) node; - String nodeName = subElement.getNodeName(); - if (!nodeName.equalsIgnoreCase("listEntry")) { //$NON-NLS-1$ - throw getInvalidFormatDebugException(); - } - String value = getValueAttribute(subElement); - list.add(value); - } - } - setAttribute(listKey, list); - } - - protected void setMapAttribute(Element element) throws CoreException { - String mapKey = element.getAttribute("key"); //$NON-NLS-1$ - NodeList nodeList = element.getChildNodes(); - int entryCount = nodeList.getLength(); - Map map = new HashMap(entryCount); - for (int i = 0; i < entryCount; i++) { - Node node = nodeList.item(i); - short type = node.getNodeType(); - if (type == Node.ELEMENT_NODE) { - Element subElement = (Element) node; - String nodeName = subElement.getNodeName(); - if (!nodeName.equalsIgnoreCase("mapEntry")) { //$NON-NLS-1$ - throw getInvalidFormatDebugException(); - } - String key = getKeyAttribute(subElement); - String value = getValueAttribute(subElement); - map.put(key, value); - } - } - setAttribute(mapKey, map); - } - - protected String getKeyAttribute(Element element) throws CoreException { - String key = element.getAttribute("key"); //$NON-NLS-1$ - if (key == null) { - throw getInvalidFormatDebugException(); - } - return key; - } - - protected String getValueAttribute(Element element) throws CoreException { - String value = element.getAttribute("value"); //$NON-NLS-1$ - if (value == null) { - throw getInvalidFormatDebugException(); - } - return value; - } - - protected DebugException getInvalidFormatDebugException() { - return - new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfigurationInfo.Invalid_launch_configuration_XML._10"), null //$NON-NLS-1$ - ) - ); - } - - /** - * Two <code>LaunchConfigurationInfo</code> objects are equal if and only if they have the - * same type and they have the same set of attributes with the same values. - * - * @see Object#equals(Object) - */ - public boolean equals(Object obj) { - - // Make sure it's a LaunchConfigurationInfo object - if (!(obj instanceof LaunchConfigurationInfo)) { - return false; - } - - // Make sure the types are the same - LaunchConfigurationInfo other = (LaunchConfigurationInfo) obj; - if (!fType.getIdentifier().equals(other.getType().getIdentifier())) { - return false; - } - - // Make sure the attributes are the same - return compareAttributes(fAttributes, other.getAttributeTable()); - } - - /** - * Returns whether the two attribute maps are equal, consulting - * registered comparator extensions. - * - * @param map1 attribute map - * @param map2 attribute map - * @return whether the two attribute maps are equal - */ - protected boolean compareAttributes(HashMap map1, HashMap map2) { - LaunchManager manager = (LaunchManager)DebugPlugin.getDefault().getLaunchManager(); - if (map1.size() == map2.size()) { - Iterator attributes = map1.keySet().iterator(); - while (attributes.hasNext()) { - String key = (String)attributes.next(); - Object attr1 = map1.get(key); - Object attr2 = map2.get(key); - if (attr2 == null) { - return false; - } - Comparator comp = manager.getComparator(key); - if (comp == null) { - if (!attr1.equals(attr2)) { - return false; - } - } else { - if (comp.compare(attr1, attr2) != 0) { - return false; - } - } - } - return true; - } - return false; - } - - /** - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return fType.hashCode() + fAttributes.size(); - } - -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationType.java deleted file mode 100644 index 7a6873a24..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationType.java +++ /dev/null @@ -1,278 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.text.MessageFormat; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; -import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; - -/** - * A launch configuration type wrappers a configuration - * element for a <code>launchConfigurationType</code> - * extension. - */ -public class LaunchConfigurationType extends PlatformObject implements ILaunchConfigurationType { - - /** - * The configuration element of the extension. - */ - private IConfigurationElement fElement; - - /** - * Base modes this type supports. - */ - private Set fBaseModes; - - /** - * Modes that delegates have been contributed for - */ - private Set fContributedModes; - - /** - * The delegates for launch configurations of this type. - * Delegates are instantiated lazily as required. There may - * be different delegates for different modes (since 3.0). - * Map of mode -> delegate - */ - private Map fDelegates; - - /** - * Constructs a new launch configuration type on the - * given configuration element. - * - * @param element configuration element - */ - protected LaunchConfigurationType(IConfigurationElement element) { - setConfigurationElement(element); - } - - /** - * Sets this type's configuration element. - * - * @param element this type's configuration element - */ - private void setConfigurationElement(IConfigurationElement element) { - fElement = element; - } - - /** - * Returns this type's configuration element. - * - * @return this type's configuration element - */ - protected IConfigurationElement getConfigurationElement() { - return fElement; - } - - - /** - * @see ILaunchConfigurationType#supportsMode(String) - */ - public boolean supportsMode(String mode) { - return getBaseModes().contains(mode) || getContributedModes().contains(mode); - } - - /** - * Returns the set of modes specified in the configuration data. - * - * @return the set of modes specified in the configuration data - */ - protected Set getBaseModes() { - if (fBaseModes == null) { - String modes= getConfigurationElement().getAttribute("modes"); //$NON-NLS-1$ - if (modes == null) { - return new HashSet(0); - } - StringTokenizer tokenizer= new StringTokenizer(modes, ","); //$NON-NLS-1$ - fBaseModes = new HashSet(tokenizer.countTokens()); - while (tokenizer.hasMoreTokens()) { - fBaseModes.add(tokenizer.nextToken().trim()); - } - } - return fBaseModes; - } - - /** - * Returns the set of modes delegates have been contributed for - * - * @return the set of modes delegates have been contributed for - */ - protected Set getContributedModes() { - if (fContributedModes == null) { - fContributedModes = new HashSet(0); - // add modes for contributed delegates - List delegates = ((LaunchManager)DebugPlugin.getDefault().getLaunchManager()).getContributedDelegates(); - Iterator iterator = delegates.iterator(); - while (iterator.hasNext()) { - ContributedDelegate delegate = (ContributedDelegate)iterator.next(); - if (delegate.getLaunchConfigurationType().equals(getIdentifier())) { - fContributedModes.addAll(delegate.getModes()); - } - } - } - return fContributedModes; - } - - /** - * @see ILaunchConfigurationType#getName() - */ - public String getName() { - return getConfigurationElement().getAttribute("name"); //$NON-NLS-1$ - } - - /** - * @see ILaunchConfigurationType#getSourcePathComputer() - */ - public ISourcePathComputer getSourcePathComputer() { - String id = getConfigurationElement().getAttribute("sourcePathComputerId"); //$NON-NLS-1$ - if (id != null && id.length() > 0) { - return DebugPlugin.getDefault().getLaunchManager().getSourcePathComputer(id); - } - return null; - } - - /** - * @see ILaunchConfigurationType#getIdentifier() - */ - public String getIdentifier() { - return getConfigurationElement().getAttribute("id"); //$NON-NLS-1$ - } - - /** - * @see ILaunchConfigurationType#getCategory() - */ - public String getCategory() { - return getConfigurationElement().getAttribute("category"); //$NON-NLS-1$ - } - - /** - * @see ILaunchConfigurationType#getAttribute(String) - */ - public String getAttribute(String attributeName) { - return getConfigurationElement().getAttribute(attributeName); - } - - /** - * @see ILaunchConfigurationType#isPublic() - */ - public boolean isPublic() { - String publicString = getConfigurationElement().getAttribute("public"); //$NON-NLS-1$ - if (publicString != null) { - if (publicString.equalsIgnoreCase("false")) { //$NON-NLS-1$ - return false; - } - } - return true; - } - - /** - * @see ILaunchConfigurationType#newInstance(IContainer, String) - */ - public ILaunchConfigurationWorkingCopy newInstance(IContainer container, String name) { - return new LaunchConfigurationWorkingCopy(container, name, this); - } - - /** - * Returns the launch configuration delegate for launch - * configurations of this type. The first time this method - * is called, the delegate is instantiated. - * - * @see org.eclipse.debug.core.ILaunchConfigurationType#getDelegate() - * @return launch configuration delegate - * @exception CoreException if unable to instantiate the - * delegate - * @deprecated use <code>getDelegate(String)</code> to specify mode - */ - public ILaunchConfigurationDelegate getDelegate() throws CoreException { - return getDelegate(ILaunchManager.RUN_MODE); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationType#getDelegate(java.lang.String) - */ - public ILaunchConfigurationDelegate getDelegate(String mode) throws CoreException { - if (!supportsMode(mode)) { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationType.9"), new String[] {mode, getIdentifier()}), null)); //$NON-NLS-1$ - } - if (fDelegates == null) { - // initialize delegate table with base modes - fDelegates = new Hashtable(3); - } - ILaunchConfigurationDelegate delegate = (ILaunchConfigurationDelegate)fDelegates.get(mode); - if (delegate == null) { - Set modes = getBaseModes(); - if (modes.contains(mode)) { - Object object = getConfigurationElement().createExecutableExtension("delegate"); //$NON-NLS-1$ - if (object instanceof ILaunchConfigurationDelegate) { - Iterator iter = modes.iterator(); - while (iter.hasNext()) { - fDelegates.put(iter.next(), object); - } - return (ILaunchConfigurationDelegate)object; - } - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationType.Launch_delegate_for_{0}_does_not_implement_required_interface_ILaunchConfigurationDelegate._1"), new String[]{getName()}), null)); //$NON-NLS-1$ - } - // contributed modes - List contributed = ((LaunchManager)DebugPlugin.getDefault().getLaunchManager()).getContributedDelegates(); - Iterator iterator = contributed.iterator(); - while (iterator.hasNext()) { - ContributedDelegate contributedDelegate = (ContributedDelegate)iterator.next(); - if (getIdentifier().equals(contributedDelegate.getLaunchConfigurationType())) { - modes = contributedDelegate.getModes(); - if (modes.contains(mode)) { - delegate = contributedDelegate.getDelegate(); - Iterator modesIterator = modes.iterator(); - while (modesIterator.hasNext()) { - fDelegates.put(modesIterator.next(), delegate); - } - return delegate; - } - } - } - } else { - return delegate; - } - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationType.10"), new String[] {getIdentifier(), mode}), null)); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationType#getSourceLocatorId() - */ - public String getSourceLocatorId() { - return getAttribute("sourceLocatorId"); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationType#getPluginId() - */ - public String getPluginIdentifier() { - return fElement.getNamespace(); - } -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java deleted file mode 100644 index 4aa555ce5..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java +++ /dev/null @@ -1,595 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResourceRuleFactory; -import org.eclipse.core.resources.IWorkspaceRunnable; -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.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.MultiRule; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; - -/** - * A working copy launch configuration - */ -public class LaunchConfigurationWorkingCopy extends LaunchConfiguration implements ILaunchConfigurationWorkingCopy { - - /** - * Handle of original launch configuration this - * working copy is based on - */ - private LaunchConfiguration fOriginal; - - /** - * Working copy of attributes. - */ - private LaunchConfigurationInfo fInfo; - - /** - * Whether this working copy has been modified since - * it was created - */ - private boolean fDirty = false; - - /** - * The name for this configuration. - */ - private String fName; - - /** - * Indicates whether this working copy has been explicitly renamed. - */ - private boolean fRenamed = false; - - /** - * Suppress change notification until created - */ - private boolean fSuppressChange = true; - - /** - * The container this working copy will be - * stored in when saved. - */ - private IContainer fContainer; - - /** - * Constructs a working copy of the specified launch - * configuration. - * - * @param original launch configuration to make - * a working copy of - * @exception CoreException if unable to initialize this - * working copy's attributes based on the original configuration - */ - protected LaunchConfigurationWorkingCopy(LaunchConfiguration original) throws CoreException { - super(original.getLocation()); - setName(original.getName()); - copyFrom(original); - setOriginal(original); - fSuppressChange = false; - } - - /** - * Constructs a copy of the specified launch - * configuration, with the given (new) name. - * - * @param original launch configuration to make - * a working copy of - * @param name the new name for the copy of the launch - * configuration - * @exception CoreException if unable to initialize this - * working copy's attributes based on the original configuration - */ - protected LaunchConfigurationWorkingCopy(LaunchConfiguration original, String name) throws CoreException { - super(original.getLocation()); - copyFrom(original); - setName(name); - fSuppressChange = false; - } - - /** - * Constructs a new working copy to be created in the specified - * location. - * - * @param container the container that the configuration will be created in - * or <code>null</code> if to be local - * @param name the name of the new launch configuration - * @param type the type of this working copy - */ - protected LaunchConfigurationWorkingCopy(IContainer container, String name, ILaunchConfigurationType type) { - super((IPath)null); - setName(name); - setInfo(new LaunchConfigurationInfo()); - getInfo().setType(type); - setContainer(container); - fSuppressChange = false; - } - - /** - * @see ILaunchConfigurationWorkingCopy#isDirty() - */ - public boolean isDirty() { - return fDirty; - } - - /** - * @see ILaunchConfigurationWorkingCopy#doSave() - */ - public ILaunchConfiguration doSave() throws CoreException { - if (isDirty()) { - boolean useRunnable= true; - if (isLocal()) { - if (isMoved()) { - // If this config was moved from a shared location, saving - // it will delete the original from the workspace. Use runnable. - useRunnable= !isNew() && !getOriginal().isLocal(); - } else { - useRunnable= false; - } - } - - if (useRunnable) { - IWorkspaceRunnable wr = new IWorkspaceRunnable() { - public void run(IProgressMonitor pm) throws CoreException { - doSave0(); - } - }; - - ResourcesPlugin.getWorkspace().run(wr, getSchedulingRule(), 0, null); - } else { - //file is persisted in the metadata not the workspace - doSave0(); - } - - getLaunchManager().setMovedFromTo(null, null); - } - - return new LaunchConfiguration(getLocation()); - } - - /** - * Returns the scheduling rule to be used when saving this launch configuration. - * <code>null</code> is a valid scheduling rule. - * - * @return the scheduling rule to be used when saving this launch configuration - */ - private ISchedulingRule getSchedulingRule() { - List rules= new ArrayList(2); - IResourceRuleFactory fac = ResourcesPlugin.getWorkspace().getRuleFactory(); - if (!isLocal()) { - //working copy will be saved to a workspace location - create or modify - IFile[] files= ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(getLocation()); - if (files.length > 0) { - IFile file = files[0]; - ISchedulingRule rule = null; - if (file.exists()) { - rule = fac.modifyRule(file); - } else { - rule = fac.createRule(file); - } - rules.add(MultiRule.combine(rule, fac.validateEditRule(files))); - } - } - ILaunchConfiguration original = getOriginal(); - if (!isNew() && isMoved() && !original.isLocal()) { - IFile[] files= ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(original.getLocation()); - if (files.length > 0) { - rules.add(MultiRule.combine(fac.deleteRule(files[0]), fac.validateEditRule(files))); - } - } - if (rules.isEmpty()) { - return null; - } - return new MultiRule((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()])); - } - - private void doSave0() throws CoreException { - // set up from/to information if this is a move - boolean moved = (!isNew() && isMoved()); - if (moved) { - ILaunchConfiguration to = new LaunchConfiguration(getLocation()); - ILaunchConfiguration from = getOriginal(); - getLaunchManager().setMovedFromTo(from, to); - } - // delete the old file if this is not a new configuration - // or the file was renamed/moved - if (moved) { - getOriginal().delete(); - } - // write the new file - writeNewFile(); - resetDirty(); - } - - /** - * Writes the new configuration information to a file. - * - * @exception CoreException if writing the file fails - */ - protected void writeNewFile() throws CoreException { - String xml = null; - Exception e= null; - try { - xml = getInfo().getAsXML(); - } catch (IOException ioe) { - e= ioe; - } catch (ParserConfigurationException pce) { - e= pce; - } catch (TransformerException te) { - e= te; - } - if (e != null) { - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationWorkingCopy.{0}_occurred_generating_launch_configuration_XML._1"), new String[]{e.toString()}), null //$NON-NLS-1$ - ) - ); - } - - if (isLocal()) { - // use java.io to update configuration file - try { - boolean added = false; - File file = getLocation().toFile(); - File dir = getLocation().removeLastSegments(1).toFile(); - dir.mkdirs(); - if (!file.exists()) { - added = true; - file.createNewFile(); - } - FileOutputStream stream = new FileOutputStream(file); - stream.write(xml.getBytes("UTF8")); //$NON-NLS-1$ - stream.close(); - if (added) { - getLaunchManager().launchConfigurationAdded(new LaunchConfiguration(getLocation())); - } else { - getLaunchManager().launchConfigurationChanged(new LaunchConfiguration(getLocation())); - } - } catch (IOException ie) { - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationWorkingCopy.{0}_occurred_generating_launch_configuration_XML._1"), new String[]{ie.toString()}), null //$NON-NLS-1$ - ) - ); - } - } else { - // use resource API to update configuration file - IFile file = getFile(); - IContainer dir = file.getParent(); - if (!dir.exists()) { - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfigurationWorkingCopy.Specified_container_for_launch_configuration_does_not_exist_2"), null //$NON-NLS-1$ - ) - ); - } - ByteArrayInputStream stream = null; - try { - stream = new ByteArrayInputStream(xml.getBytes("UTF8")); //$NON-NLS-1$ - } catch (UnsupportedEncodingException ue) { - throw new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfigurationWorkingCopy.5"), null //$NON-NLS-1$ - )); - } - if (!file.exists()) { - file.create(stream, false, null); - } else { - // validate edit - if (file.isReadOnly()) { - IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] {file}, null); - if (!status.isOK()) { - throw new CoreException(status); - } - } - file.setContents(stream, false, false, null); - } - } - } - - /** - * @see ILaunchConfigurationWorkingCopy#setAttribute(String, int) - */ - public void setAttribute(String attributeName, int value) { - getInfo().setAttribute(attributeName, new Integer(value)); - setDirty(); - } - - /** - * @see ILaunchConfigurationWorkingCopy#setAttribute(String, String) - */ - public void setAttribute(String attributeName, String value) { - getInfo().setAttribute(attributeName, value); - setDirty(); - } - - /** - * @see ILaunchConfigurationWorkingCopy#setAttribute(String, boolean) - */ - public void setAttribute(String attributeName, boolean value) { - getInfo().setAttribute(attributeName, new Boolean(value)); - setDirty(); - } - - /** - * @see ILaunchConfigurationWorkingCopy#setAttribute(String, List) - */ - public void setAttribute(String attributeName, List value) { - getInfo().setAttribute(attributeName, value); - setDirty(); - } - - /** - * @see ILaunchConfigurationWorkingCopy#setAttribute(String, Map) - */ - public void setAttribute(String attributeName, Map value) { - getInfo().setAttribute(attributeName, value); - setDirty(); - } - - /** - * @see ILaunchConfigurationWorkingCopy#getOriginal() - */ - public ILaunchConfiguration getOriginal() { - return fOriginal; - } - - /** - * Sets the launch configuration this working copy - * is based on. Initializes the attributes of this - * working copy to the current values of the given - * configuration. - * - * @param originl the launch configuration this working - * copy is based on. - * @exception CoreException if unable to initialize this - * working copy based on the original's current attribute - * set - */ - private void copyFrom(LaunchConfiguration original) throws CoreException { - LaunchConfigurationInfo info = original.getInfo(); - setInfo(info.getCopy()); - setContainer(original.getContainer()); - resetDirty(); - } - - /** - * Sets the launch configuration this working copy - * is based on. - * - * @param original the launch configuration this working - * copy is based on. - */ - private void setOriginal(LaunchConfiguration original) { - fOriginal = original; - } - - /** - * Sets the working copy info object for this working copy. - * - * @param info a copy of attributes from this working copy's - * original launch configuration - */ - protected void setInfo(LaunchConfigurationInfo info) { - fInfo = info; - } - - /** - * @see ILaunchConfiguration#isWorkingCopy() - */ - public boolean isWorkingCopy() { - return true; - } - - /** - * A working copy keeps a local info object that is not - * cached with the launch manager. - * - * @see LaunchConfiguration#getInfo() - */ - protected LaunchConfigurationInfo getInfo() { - return fInfo; - } - - /** - * Sets this working copy's state to dirty. - * Notifies listeners that this working copy has - * changed. - */ - private void setDirty() { - fDirty = true; - if (!suppressChangeNotification()) { - getLaunchManager().getConfigurationNotifier().notify(this, LaunchManager.CHANGED); - } - } - - /** - * Sets this working copy's state to not dirty. - */ - private void resetDirty() { - fDirty = false; - } - - /** - * @see ILaunchConfigurationWorkingCopy#rename(String) - */ - public void rename(String name) { - if (!getName().equals(name)) { - setName(name); - fRenamed = isNew() || !(getOriginal().getName().equals(name)); - } - } - - /** - * Sets the new name for this configuration. - * - * @param name the new name for this configuration - */ - private void setName(String name) { - fName = name; - setDirty(); - } - - /** - * @see ILaunchConfiguration#getName() - */ - public String getName() { - return fName; - } - - /** - * @see ILaunchConfiguration#isLocal() - */ - public boolean isLocal() { - return getContainer() == null; - } - - /** - * Returns the location this launch configuration will reside at - * when saved. - * - * @see ILaunchConfiguration#getLocation() - */ - public IPath getLocation() { - if (isMoved()) { - IPath path = null; - if (isLocal()) { - path = LaunchManager.LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH; - } else { - path = getContainer().getLocation(); - } - path = path.append(getName() + "." + LAUNCH_CONFIGURATION_FILE_EXTENSION); //$NON-NLS-1$ - return path; - } - return getOriginal().getLocation(); - } - - /** - * Returns whether this working copy is new, or is a - * working copy of another launch configuration. - * - * @return whether this working copy is new, or is a - * working copy of another launch configuration - */ - protected boolean isNew() { - return getOriginal() == null; - } - - /** - * Returns whether this working copy is new or if its - * location has changed from that of its original. - * - * @return whether this working copy is new or if its - * location has changed from that of its original - */ - protected boolean isMoved() { - if (isNew() || fRenamed) { - return true; - } - IContainer newContainer = getContainer(); - IContainer originalContainer = ((LaunchConfiguration)getOriginal()).getContainer(); - if (newContainer == originalContainer) { - return false; - } - if (newContainer == null) { - return !originalContainer.equals(newContainer); - } - return !newContainer.equals(originalContainer); - } - - /** - * A working copy cannot generate a memento. - * - * @see ILaunchConfiguration#getMemento() - */ - public String getMemento() { - return null; - } - - /** - * Returns whether change notification should be - * suppressed - */ - protected boolean suppressChangeNotification() { - return fSuppressChange; - } - - /** - * @see ILaunchConfigurationWorkingCopy#setContainer(IContainer) - */ - public void setContainer(IContainer container) { - if (container == fContainer) { - return; - } - if (container != null) { - if (container.equals(fContainer)) { - return; - } - } else { - if (fContainer.equals(container)) { - return; - } - } - fContainer = container; - setDirty(); - } - - /** - * Returns the container this working copy will be - * stored in when saved, or <code>null</code> if - * this working copy is local. - * - * @return the container this working copy will be - * stored in when saved, or <code>null</code> if - * this working copy is local - */ - protected IContainer getContainer() { - return fContainer; - } - - /** - * @see org.eclipse.debug.core.ILaunchConfigurationWorkingCopy#setAttributes(java.util.Map) - */ - public void setAttributes(Map attributes) { - getInfo().setAttributes(attributes); - } - -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java deleted file mode 100644 index fdd819c38..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java +++ /dev/null @@ -1,1823 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Sebastian Davids - bug 50567 Eclipse native environment support on Win98 - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.variables.VariablesPlugin; -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.ILaunchConfigurationListener; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchListener; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.ILaunchMode; -import org.eclipse.debug.core.ILaunchesListener; -import org.eclipse.debug.core.ILaunchesListener2; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IPersistableSourceLocator; -import org.eclipse.debug.core.model.IProcess; -import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; -import org.eclipse.debug.internal.core.sourcelookup.SourceContainerType; -import org.eclipse.debug.internal.core.sourcelookup.SourcePathComputer; -import org.eclipse.osgi.service.environment.Constants; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * Manages launch configurations, launch configuration types, and registered launches. - * - * @see ILaunchManager - */ -/** - * LaunchManager - */ -public class LaunchManager extends PlatformObject implements ILaunchManager, IResourceChangeListener { - - /** - * Collection of defined launch configuration type - * extensions. - */ - private List fLaunchConfigurationTypes = null; - - /** - * Launch configuration cache. Keys are <code>LaunchConfiguration</code>, - * values are <code>LaunchConfigurationInfo</code>. - */ - private Map fLaunchConfigurations = new HashMap(10); - - /** - * A cache of launch configuration names currently in the workspace. - */ - private String[] fSortedConfigNames = null; - - /** - * Collection of all launch configurations in the workspace. - * <code>List</code> of <code>ILaunchConfiguration</code>. - */ - private List fLaunchConfigurationIndex = null; - - /** - * Launch configuration comparator extensions, - * keyed by attribute name. - */ - private Map fComparators = null; - - /** - * Registered launch modes, or <code>null</code> if not initialized. - * Keys are mode identifiers, values are <code>ILaunchMode</code>s. - */ - private Map fLaunchModes = null; - - /** - * List of contributed launch delegates (delegates contributed for existing - * launch configuration types). - */ - private List fContributedDelegates = null; - - /** - * Types of notifications - */ - public static final int ADDED = 0; - public static final int REMOVED= 1; - public static final int CHANGED= 2; - public static final int TERMINATE= 3; - - /** - * The collection of native environment variables on the user's system. Cached - * after being computed once as the environment cannot change. - */ - private static HashMap fgNativeEnv= null; - - /** - * Collection of launches - */ - private Vector fLaunches= new Vector(10); - - /** - * Set of launches for efficient 'isRegistered()' check - */ - private Set fLaunchSet = new HashSet(10); - - /** - * Collection of listeners - */ - private ListenerList fListeners= new ListenerList(5); - - /** - * Collection of "plural" listeners. - * @since 2.1 - */ - private ListenerList fLaunchesListeners = new ListenerList(5); - - /** - * Visitor used to process resource deltas, - * to update launch configuration index. - */ - private LaunchManagerVisitor fgVisitor; - - /** - * Whether this manager is listening for resouce change events - */ - private boolean fListening = false; - - /** - * Launch configuration listeners - */ - private ListenerList fLaunchConfigurationListeners = new ListenerList(5); - - /** - * Table of source locator extensions. Keys - * are identifiers, and values are associated - * configuration elements. - */ - private Map fSourceLocators = null; - - /** - * The handles of launch configurations being moved, or <code>null</code> - */ - private ILaunchConfiguration fFrom; - private ILaunchConfiguration fTo; - - /** - * Path to the local directory where local launch configurations - * are stored with the workspace. - */ - protected static final IPath LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH = - DebugPlugin.getDefault().getStateLocation().append(".launches"); //$NON-NLS-1$ - - - /** - * Map of source container type extensions. Keys are extension ids - * and values are associated configuration elements. - */ - private Map sourceContainerTypes; - - /** - * Map of source path computer extensions. Keys are extension ids - * and values are associated configuration elements. - */ - private Map sourcePathComputers; - - /** - * Serializes a XML document into a string - encoded in UTF8 format, - * with platform line separators. - * - * @param doc document to serialize - * @return the document as a string - * @throws TransformerException if an unrecoverable error occurs during the serialization - * @throws IOException if the encoding attempted to be used is not supported - */ - public static String serializeDocument(Document doc) throws TransformerException, IOException { - ByteArrayOutputStream s= new ByteArrayOutputStream(); - - TransformerFactory factory= TransformerFactory.newInstance(); - Transformer transformer= factory.newTransformer(); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$ - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ - - DOMSource source= new DOMSource(doc); - StreamResult outputTarget= new StreamResult(s); - transformer.transform(source, outputTarget); - - return s.toString("UTF8"); //$NON-NLS-1$ - } - - /** - * Returns a Document that can be used to build a DOM tree - * @return the Document - * @throws ParserConfigurationException if an exception occurs creating the document builder - * @since 3.0 - */ - public static Document getDocument() throws ParserConfigurationException { - DocumentBuilderFactory dfactory= DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder= dfactory.newDocumentBuilder(); - Document doc= docBuilder.newDocument(); - return doc; - } - - /** - * @see ILaunchManager#addLaunchListener(ILaunchListener) - */ - public void addLaunchListener(ILaunchListener listener) { - fListeners.add(listener); - } - - /** - * Returns a collection of all launch configuration handles in - * the workspace. This collection is initialized lazily. - * - * @return all launch configuration handles - */ - private List getAllLaunchConfigurations() { - if (fLaunchConfigurationIndex == null) { - try { - fLaunchConfigurationIndex = new ArrayList(20); - List configs = findLocalLaunchConfigurations(); - verifyConfigurations(configs, fLaunchConfigurationIndex); - configs = findLaunchConfigurations(getWorkspaceRoot()); - verifyConfigurations(configs, fLaunchConfigurationIndex); - } finally { - hookResourceChangeListener(); - } - } - return fLaunchConfigurationIndex; - } - - /** - * Starts listening for resource change events - */ - private synchronized void hookResourceChangeListener() { - if (!fListening) { - getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_DELETE); - fListening = true; - } - } - - /** - * Verify basic integrity of launch configurations in the given list, - * adding valid configs to the collection of all launch configurations. - * Exceptions are logged for invalid configs. - * - * @param verify the list of configs to verify - * @param valid the list to place valid configrations in - */ - protected void verifyConfigurations(List verify, List valid) { - Iterator configs = verify.iterator(); - while (configs.hasNext()) { - ILaunchConfiguration config = (ILaunchConfiguration)configs.next(); - if (isValid(config)) { - valid.add(config); - } - } - } - - /** - * Returns whether the given launch configuration passes a basic - * integritiy test by retrieving its type. - * - * @param config the configuration to verify - * @return whether the config meets basic integrity constraints - */ - protected boolean isValid(ILaunchConfiguration config) { - try { - config.getType(); - } catch (CoreException e) { - if (e.getStatus().getCode() != DebugException.MISSING_LAUNCH_CONFIGURATION_TYPE) { - // only log warnings due to something other than a missing - // launch config type - DebugPlugin.log(e); - } - return false; - } - return true; - } - - /** - * Clears all launch configurations (if any have been accessed) - */ - private void clearAllLaunchConfigurations() { - if (fLaunchConfigurationTypes != null) { - fLaunchConfigurationTypes.clear(); - } - if (fLaunchConfigurationIndex != null) { - fLaunchConfigurationIndex.clear(); - } - } - - /** - * @see ILaunchManager#removeLaunch(ILaunch) - */ - public void removeLaunch(ILaunch launch) { - if (internalRemoveLaunch(launch)) { - fireUpdate(launch, REMOVED); - fireUpdate(new ILaunch[] {launch}, REMOVED); - } - } - - /** - * Removes the given launch object from the collection of registered - * launches. Returns whether the launch was removed. - * - * @param launch the launch to remove - * @return whether the launch was removed - */ - protected synchronized boolean internalRemoveLaunch(ILaunch launch) { - if (launch == null) { - return false; - } - fLaunchSet.remove(launch); - return fLaunches.remove(launch); - } - - /** - * Fires notification to (single) listeners that a launch has been - * added/changed/removed.. - */ - public void fireUpdate(ILaunch launch, int update) { - getLaunchNotifier().notify(launch, update); - } - - /** - * Fires notification to (multi) listeners that a launch has been - * added/changed/removed. - */ - public void fireUpdate(ILaunch[] launches, int update) { - getLaunchesNotifier().notify(launches, update); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#isRegistered(org.eclipse.debug.core.ILaunch) - */ - public synchronized boolean isRegistered(ILaunch launch) { - return fLaunchSet.contains(launch); - } - - /** - * @see ILaunchManager#getDebugTargets() - */ - public IDebugTarget[] getDebugTargets() { - List allTargets= new ArrayList(fLaunches.size()); - if (fLaunches.size() > 0) { - Iterator e= fLaunches.iterator(); - while (e.hasNext()) { - IDebugTarget[] targets= ((ILaunch) e.next()).getDebugTargets(); - for (int i = 0; i < targets.length; i++) { - allTargets.add(targets[i]); - } - } - } - return (IDebugTarget[])allTargets.toArray(new IDebugTarget[allTargets.size()]); - } - - /** - * @see ILaunchManager#getLaunches() - */ - public ILaunch[] getLaunches() { - return (ILaunch[])fLaunches.toArray(new ILaunch[fLaunches.size()]); - } - - /** - * @see ILaunchManager#getProcesses() - */ - public IProcess[] getProcesses() { - List allProcesses= new ArrayList(fLaunches.size()); - Iterator e= fLaunches.iterator(); - while (e.hasNext()) { - IProcess[] processes= ((ILaunch) e.next()).getProcesses(); - for (int i= 0; i < processes.length; i++) { - allProcesses.add(processes[i]); - } - } - return (IProcess[])allProcesses.toArray(new IProcess[allProcesses.size()]); - } - - /** - * @see ILaunchManager#addLaunch(ILaunch) - */ - public void addLaunch(ILaunch launch) { - if (internalAddLaunch(launch)) { - fireUpdate(launch, ADDED); - fireUpdate(new ILaunch[] {launch}, ADDED); - } - } - - /** - * Adds the given launch object to the list of registered launches, - * and returns whether the launch was added. - * - * @param launch launch to register - * @return whether the launch was added - */ - protected synchronized boolean internalAddLaunch(ILaunch launch) { - if (fLaunches.contains(launch)) { - return false; - } - fLaunches.add(launch); - fLaunchSet.add(launch); - return true; - } - - /** - * @see ILaunchManager#removeLaunchListener(ILaunchListener) - */ - public void removeLaunchListener(ILaunchListener listener) { - fListeners.remove(listener); - } - - /** - * Return a LaunchConfigurationInfo object initialized from XML contained in - * the specified stream. Simply pass out any exceptions encountered so that - * caller can deal with them. This is important since caller may need access to the - * actual exception. - */ - protected LaunchConfigurationInfo createInfoFromXML(InputStream stream) throws CoreException, - ParserConfigurationException, - IOException, - SAXException { - Element root = null; - DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - root = parser.parse(new InputSource(stream)).getDocumentElement(); - LaunchConfigurationInfo info = new LaunchConfigurationInfo(); - info.initializeFromXML(root); - return info; - } - - /** - * Terminates/Disconnects any active debug targets/processes. - * Clears launch configuration types. - */ - public void shutdown() { - fListeners.removeAll(); - ILaunch[] launches = getLaunches(); - for (int i= 0; i < launches.length; i++) { - ILaunch launch= launches[i]; - try { - launch.terminate(); - } catch (DebugException e) { - DebugPlugin.log(e); - } - } - - clearAllLaunchConfigurations(); - - getWorkspace().removeResourceChangeListener(this); - } - - /** - * Returns the info object for the specified launch configuration. - * If the configuration exists, but is not yet in the cache, - * an info object is built and added to the cache. - * - * @exception CoreException if an exception occurs building - * the info object - * @exception DebugException if the config does not exist - */ - protected LaunchConfigurationInfo getInfo(ILaunchConfiguration config) throws CoreException { - LaunchConfigurationInfo info = (LaunchConfigurationInfo)fLaunchConfigurations.get(config); - if (info == null) { - if (config.exists()) { - InputStream stream = null; - try { - if (config.isLocal()) { - IPath path = config.getLocation(); - File file = path.toFile(); - stream = new FileInputStream(file); - } else { - IFile file = ((LaunchConfiguration) config).getFile(); - if (file == null) { - throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.30"), new String[] {config.getName()}), null); //$NON-NLS-1$ - } - stream = file.getContents(); - } - info = createInfoFromXML(stream); - fLaunchConfigurations.put(config, info); - } catch (FileNotFoundException e) { - throwException(config, e); - } catch (SAXException e) { - throwException(config, e); - } catch (ParserConfigurationException e) { - throwException(config, e); - } catch (IOException e) { - throwException(config, e); - } finally { - if (stream != null) { - try { - stream.close(); - } catch (IOException e) { - throwException(config, e); - } - } - } - - } else { - throw createDebugException( - MessageFormat.format(DebugCoreMessages.getString("LaunchManager.does_not_exist"), new String[]{config.getName(), config.getLocation().toOSString()}), null); //$NON-NLS-1$ - } - } - return info; - } - - /** - * Throws a debug exception with the given throwable that occurred - * while processing the given configuration. - */ - private void throwException(ILaunchConfiguration config, Throwable e) throws DebugException { - IPath path = config.getLocation(); - throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.{0}_occurred_while_reading_launch_configuration_file_{1}._1"), new String[]{e.toString(), path.toOSString()}), e); //$NON-NLS-1$ - } - - /** - * Return an instance of DebugException containing the specified message and Throwable. - */ - protected DebugException createDebugException(String message, Throwable throwable) { - return new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, message, throwable - ) - ); - } - - /** - * Removes the given launch configuration from the cache of configurations. - * When a local configuration is deleted, this method is called, as there will - * be no resource delta generated to auto-update the cache. - * - * @param configuration the configuration to remove - */ - private void removeInfo(ILaunchConfiguration configuration) { - fLaunchConfigurations.remove(configuration); - } - - /** - * @see ILaunchManager#getLaunchConfigurations() - */ - public ILaunchConfiguration[] getLaunchConfigurations() { - List allConfigs = getAllLaunchConfigurations(); - return (ILaunchConfiguration[])allConfigs.toArray(new ILaunchConfiguration[allConfigs.size()]); - } - - /** - * @see ILaunchManager#getLaunchConfigurations(ILaunchConfigurationType) - */ - public ILaunchConfiguration[] getLaunchConfigurations(ILaunchConfigurationType type) throws CoreException { - Iterator iter = getAllLaunchConfigurations().iterator(); - List configs = new ArrayList(); - while (iter.hasNext()) { - ILaunchConfiguration config = (ILaunchConfiguration)iter.next(); - if (config.getType().equals(type)) { - configs.add(config); - } - } - return (ILaunchConfiguration[])configs.toArray(new ILaunchConfiguration[configs.size()]); - } - - /** - * Returns all launch configurations that are stored as resources - * in the given project. - * - * @param project a project - * @return collection of launch configurations that are stored as resources - * in the given project - */ - protected List getLaunchConfigurations(IProject project) { - Iterator iter = getAllLaunchConfigurations().iterator(); - List configs = new ArrayList(); - while (iter.hasNext()) { - ILaunchConfiguration config = (ILaunchConfiguration)iter.next(); - IFile file = config.getFile(); - if (file != null && file.getProject().equals(project)) { - configs.add(config); - } - } - return configs; - } - - /** - * Returns all launch configurations that are stored locally. - * - * @return collection of launch configurations stored lcoally - */ - protected List getLocalLaunchConfigurations() { - Iterator iter = getAllLaunchConfigurations().iterator(); - List configs = new ArrayList(); - while (iter.hasNext()) { - ILaunchConfiguration config = (ILaunchConfiguration)iter.next(); - if (config.isLocal()) { - configs.add(config); - } - } - return configs; - } - - /** - * @see ILaunchManager#getLaunchConfiguration(IFile) - */ - public ILaunchConfiguration getLaunchConfiguration(IFile file) { - hookResourceChangeListener(); - return new LaunchConfiguration(file.getLocation()); - } - - /** - * @see ILaunchManager#getLaunchConfiguration(String) - */ - public ILaunchConfiguration getLaunchConfiguration(String memento) throws CoreException { - hookResourceChangeListener(); - return new LaunchConfiguration(memento); - } - - /** - * @see ILaunchManager#getLaunchConfigurationTypes() - */ - public ILaunchConfigurationType[] getLaunchConfigurationTypes() { - List types= getLaunchConfigurationTypeList(); - return (ILaunchConfigurationType[])types.toArray(new ILaunchConfigurationType[types.size()]); - } - - /** - * @see ILaunchManager#getLaunchConfigurationType(String) - */ - public ILaunchConfigurationType getLaunchConfigurationType(String id) { - Iterator iter = getLaunchConfigurationTypeList().iterator(); - while (iter.hasNext()) { - ILaunchConfigurationType type = (ILaunchConfigurationType)iter.next(); - if (type.getIdentifier().equals(id)) { - return type; - } - } - return null; - } - - private List getLaunchConfigurationTypeList() { - initializeLaunchConfigurationTypes(); - return fLaunchConfigurationTypes; - } - - private synchronized void initializeLaunchConfigurationTypes() { - if (fLaunchConfigurationTypes == null) { - hookResourceChangeListener(); - IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_CONFIGURATION_TYPES); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fLaunchConfigurationTypes= new ArrayList(infos.length); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - LaunchConfigurationType configType = new LaunchConfigurationType(configurationElement); - fLaunchConfigurationTypes.add(configType); - } - } - } - - /** - * Initializes contributed launch delegates (i.e. delegates contributed - * to an existing launch configuration type). - */ - private synchronized void initializeContributedDelegates() { - if (fContributedDelegates == null) { - IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_DELEGATES); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fContributedDelegates= new ArrayList(infos.length); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - ContributedDelegate delegate = new ContributedDelegate(configurationElement); - fContributedDelegates.add(delegate); - } - } - } - - /** - * Returns a list of launch delegates contributed for existing launch configuration - * types. - * - * @return list of ContributedDelegate - */ - protected List getContributedDelegates() { - initializeContributedDelegates(); - return fContributedDelegates; - } - /** - * Notifies the launch manager that a launch configuration - * has been deleted. The configuration is removed from the - * cache of infos and from the index of configurations by - * project, and listeners are notified. - * - * @param config the launch configuration that was deleted - */ - protected void launchConfigurationDeleted(ILaunchConfiguration config) { - removeInfo(config); - getAllLaunchConfigurations().remove(config); - getConfigurationNotifier().notify(config, REMOVED); - clearConfigNameCache(); - } - - /** - * Notifies the launch manager that a launch configuration - * has been added. The configuration is added to the index of - * configurations by project, and listeners are notified. - * - * @param config the launch configuration that was added - */ - protected void launchConfigurationAdded(ILaunchConfiguration config) { - if (config.isWorkingCopy()) { - return; - } - if (isValid(config)) { - List allConfigs = getAllLaunchConfigurations(); - if (!allConfigs.contains(config)) { - allConfigs.add(config); - getConfigurationNotifier().notify(config, ADDED); - clearConfigNameCache(); - } - } else { - launchConfigurationDeleted(config); - } - } - - /** - * Notifies the launch manager that a launch configuration - * has been changed. The configuration is removed from the - * cache of info objects such that the new attributes will - * be updated on the next access. Listeners are notified of - * the change. - * - * @param config the launch configuration that was changed - */ - protected void launchConfigurationChanged(ILaunchConfiguration config) { - removeInfo(config); - clearConfigNameCache(); - if (isValid(config)) { - // in case the config has been refreshed and it was removed from the - // index due to 'out of synch with local file system' (see bug 36147), - // add it back (will only add if required) - launchConfigurationAdded(config); - getConfigurationNotifier().notify(config, CHANGED); - } else { - launchConfigurationDeleted(config); - } - } - - /** - * @see ILaunchManager#isExistingLaunchConfigurationName(String) - */ - public boolean isExistingLaunchConfigurationName(String name) { - String[] sortedConfigNames = getAllSortedConfigNames(); - int index = Arrays.binarySearch(sortedConfigNames, name); - if (index < 0) { - return false; - } - return true; - } - - /** - * @see org.eclipse.debug.core.ILaunchManager#generateUniqueLaunchConfigurationNameFrom(String) - */ - public String generateUniqueLaunchConfigurationNameFrom(String baseName) { - int index = 1; - int length= baseName.length(); - int copyIndex = baseName.lastIndexOf(" ("); //$NON-NLS-1$ - if (copyIndex > -1 && length > copyIndex + 2 && baseName.charAt(length - 1) == ')') { - String trailer = baseName.substring(copyIndex + 2, length -1); - if (isNumber(trailer)) { - try { - index = Integer.parseInt(trailer); - baseName = baseName.substring(0, copyIndex); - } catch (NumberFormatException nfe) { - } - } - } - String newName = baseName; - - StringBuffer buffer= null; - while (isExistingLaunchConfigurationName(newName)) { - buffer = new StringBuffer(baseName); - buffer.append(" ("); //$NON-NLS-1$ - buffer.append(String.valueOf(index)); - index++; - buffer.append(')'); - newName = buffer.toString(); - } - - return newName; - } - - /** - * Returns whether the given String is composed solely of digits - */ - private boolean isNumber(String string) { - int numChars= string.length(); - if (numChars == 0) { - return false; - } - for (int i= 0; i < numChars; i++) { - if (!Character.isDigit(string.charAt(i))) { - return false; - } - } - return true; - } - - /** - * Return a sorted array of the names of all <code>ILaunchConfiguration</code>s in - * the workspace. These are cached, and cache is cleared when a new config is added, - * deleted or changed. - */ - protected String[] getAllSortedConfigNames() { - if (fSortedConfigNames == null) { - ILaunchConfiguration[] configs = getLaunchConfigurations(); - fSortedConfigNames = new String[configs.length]; - for (int i = 0; i < configs.length; i++) { - fSortedConfigNames[i] = configs[i].getName(); - } - Arrays.sort(fSortedConfigNames); - } - return fSortedConfigNames; - } - - /** - * The launch config name cache is cleared when a config is added, deleted or changed. - */ - protected void clearConfigNameCache() { - fSortedConfigNames = null; - } - - /** - * Finds and returns all local launch configurations. - * - * @return all local launch configurations - * @exception CoreException if there is a lower level - * IO exception - */ - protected List findLocalLaunchConfigurations() { - IPath containerPath = LOCAL_LAUNCH_CONFIGURATION_CONTAINER_PATH; - List configs = new ArrayList(10); - final File directory = containerPath.toFile(); - if (directory.isDirectory()) { - FilenameFilter filter = new FilenameFilter() { - public boolean accept(File dir, String name) { - return dir.equals(directory) && - name.endsWith(ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION); - } - }; - String[] files = directory.list(filter); - for (int i = 0; i < files.length; i++) { - LaunchConfiguration config = new LaunchConfiguration(containerPath.append(files[i])); - configs.add(config); - } - } - return configs; - } - - /** - * Finds and returns all launch configurations in the given - * container (and subcontainers) - * - * @param container the container to search - * @exception CoreException an exception occurs traversing - * the container. - * @return all launch configurations in the given container - */ - protected List findLaunchConfigurations(IContainer container) { - List list = new ArrayList(10); - if (container instanceof IProject && !((IProject)container).isOpen()) { - return list; - } - ResourceProxyVisitor visitor= new ResourceProxyVisitor(list); - try { - container.accept(visitor, IResource.NONE); - } catch (CoreException ce) { - //Closed project...should not be possible with previous check - } - Iterator iter = list.iterator(); - List configs = new ArrayList(list.size()); - while (iter.hasNext()) { - IFile file = (IFile)iter.next(); - configs.add(getLaunchConfiguration(file)); - } - return configs; - } - - /** - * Traverses the delta looking for added/removed/changed launch - * configuration files. - * - * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent) - */ - public void resourceChanged(IResourceChangeEvent event) { - IResourceDelta delta= event.getDelta(); - if (delta == null) { - // pre-delete - LaunchManagerVisitor visitor = getDeltaVisitor(); - IResource resource = event.getResource(); - if (resource instanceof IProject) { - IProject project = (IProject) resource; - visitor.preDelete(project); - } - } else { - try { - LaunchManagerVisitor visitor = getDeltaVisitor(); - delta.accept(visitor); - visitor.reset(); - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - } - - /** - * Returns the resource delta visitor for the launch manager. - * - * @return the resource delta visitor for the launch manager - */ - private LaunchManagerVisitor getDeltaVisitor() { - if (fgVisitor == null) { - fgVisitor= new LaunchManagerVisitor(); - } - return fgVisitor; - } - - /** - * Returns the launch configurations specified by the given - * XML document. - * - * @param root XML document - * @return list of launch configurations - * @exception IOException if an exception occurs reading the XML - */ - protected List getConfigsFromXML(Element root) throws CoreException { - DebugException invalidFormat = - new DebugException( - new Status( - IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchManager.Invalid_launch_configuration_index._18"), null //$NON-NLS-1$ - ) - ); - - if (!root.getNodeName().equalsIgnoreCase("launchConfigurations")) { //$NON-NLS-1$ - throw invalidFormat; - } - - // read each launch configuration - List configs = new ArrayList(4); - NodeList list = root.getChildNodes(); - int length = list.getLength(); - for (int i = 0; i < length; ++i) { - Node node = list.item(i); - short type = node.getNodeType(); - if (type == Node.ELEMENT_NODE) { - Element entry = (Element) node; - String nodeName = entry.getNodeName(); - if (!nodeName.equals("launchConfiguration")) { //$NON-NLS-1$ - throw invalidFormat; - } - String memento = entry.getAttribute("memento"); //$NON-NLS-1$ - if (memento == null) { - throw invalidFormat; - } - configs.add(getLaunchConfiguration(memento)); - } - } - return configs; - } - - /** - * The specified project has just opened - add all launch - * configs in the project to the index of all configs. - * - * @param project the project that has been opened - * @exception CoreException if reading the index fails - */ - protected void projectOpened(IProject project) { - List configs = findLaunchConfigurations(project); - if (!configs.isEmpty()) { - Iterator iterator = configs.iterator(); - while (iterator.hasNext()) { - ILaunchConfiguration config = (ILaunchConfiguration) iterator.next(); - launchConfigurationAdded(config); - } - } - } - - /** - * The specified project has just closed - remove its - * launch configurations from the cached index. - * - * @param project the project that has been closed - * @exception CoreException if writing the index fails - */ - protected void projectClosed(IProject project) { - List configs = getLaunchConfigurations(project); - if (!configs.isEmpty()) { - Iterator iterator = configs.iterator(); - while (iterator.hasNext()) { - ILaunchConfiguration configuration = (ILaunchConfiguration)iterator.next(); - launchConfigurationDeleted(configuration); - } - } - } - - /** - * Visitor for handling resource deltas. - */ - class LaunchManagerVisitor implements IResourceDeltaVisitor { - - /** - * Map of files to associated (shared) launch configs in a project - * that is going to be deleted. - */ - private Map fFileToConfig = new HashMap(); - - /** - * @see IResourceDeltaVisitor#visit(IResourceDelta) - */ - public boolean visit(IResourceDelta delta) { - if (delta == null) { - return false; - } - if (0 != (delta.getFlags() & IResourceDelta.OPEN)) { - if (delta.getResource() instanceof IProject) { - IProject project = (IProject)delta.getResource(); - - if (project.isOpen()) { - LaunchManager.this.projectOpened(project); - } else { - LaunchManager.this.projectClosed(project); - } - } - return false; - } - IResource resource = delta.getResource(); - if (resource instanceof IFile) { - IFile file = (IFile)resource; - if (ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION.equals(file.getFileExtension())) { - IPath configPath = file.getLocation(); - ILaunchConfiguration handle = null; - // If the file has already been deleted, reconstruct the handle from our cache - if (configPath == null) { - handle = (ILaunchConfiguration) fFileToConfig.get(file); - } else { - handle = new LaunchConfiguration(configPath); - } - if (handle != null) { - switch (delta.getKind()) { - case IResourceDelta.ADDED : - LaunchManager.this.launchConfigurationAdded(handle); - break; - case IResourceDelta.REMOVED : - LaunchManager.this.launchConfigurationDeleted(handle); - break; - case IResourceDelta.CHANGED : - LaunchManager.this.launchConfigurationChanged(handle); - break; - } - } - } - return false; - } else if (resource instanceof IContainer) { - return true; - } - return true; - } - - /** - * Builds a cache of configs that will be deleted in the given project - */ - public void preDelete(IProject project) { - List list = findLaunchConfigurations(project); - Iterator configs = list.iterator(); - while (configs.hasNext()) { - ILaunchConfiguration configuration = (ILaunchConfiguration) configs.next(); - IFile file = configuration.getFile(); - if (file != null) { - fFileToConfig.put(file, configuration); - } - } - } - - /** - * Resets this resource delta visitor for a new pass. - */ - public void reset() { - fFileToConfig.clear(); - } - } - - /** - * @see ILaunchManager#addLaunchConfigurationListener(ILaunchConfigurationListener) - */ - public void addLaunchConfigurationListener(ILaunchConfigurationListener listener) { - fLaunchConfigurationListeners.add(listener); - } - - /** - * @see ILaunchManager#removeLaunchConfigurationListener(ILaunchConfigurationListener) - */ - public void removeLaunchConfigurationListener(ILaunchConfigurationListener listener) { - fLaunchConfigurationListeners.remove(listener); - } - - /** - * Register source locators. - * - * @exception CoreException if an exception occurs reading - * the extensions - */ - private synchronized void initializeSourceLocators() { - if (fSourceLocators == null) { - IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_SOURCE_LOCATORS); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fSourceLocators= new HashMap(infos.length); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - String id = configurationElement.getAttribute("id"); //$NON-NLS-1$ - if (id != null) { - fSourceLocators.put(id,configurationElement); - } else { - // invalid status handler - IStatus s = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugException.INTERNAL_ERROR, - MessageFormat.format(DebugCoreMessages.getString("LaunchManager.Invalid_source_locator_extentsion_defined_by_plug-in___{0}______id___not_specified_12"), new String[] {configurationElement.getNamespace()} ), null); //$NON-NLS-1$ - DebugPlugin.log(s); - } - } - } - } - - - /** - * Load comparator extensions. - */ - private synchronized void initializeComparators() { - if (fComparators == null) { - IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_CONFIGURATION_COMPARATORS); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fComparators = new HashMap(infos.length); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - String attr = configurationElement.getAttribute("attribute"); //$NON-NLS-1$ - if (attr != null) { - fComparators.put(attr, new LaunchConfigurationComparator(configurationElement)); - } else { - // invalid status handler - IStatus s = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugException.INTERNAL_ERROR, - MessageFormat.format(DebugCoreMessages.getString("LaunchManager.Invalid_launch_configuration_comparator_extension_defined_by_plug-in_{0}_-_attribute_not_specified_1"), new String[] {configurationElement.getNamespace()}), null); //$NON-NLS-1$ - DebugPlugin.log(s); - } - } - } - } - - /** - * @see ILaunchManager#newSourceLocator(String) - */ - public IPersistableSourceLocator newSourceLocator(String identifier) throws CoreException { - initializeSourceLocators(); - IConfigurationElement config = (IConfigurationElement)fSourceLocators.get(identifier); - if (config == null) { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugException.INTERNAL_ERROR, - MessageFormat.format(DebugCoreMessages.getString("LaunchManager.Source_locator_does_not_exist__{0}_13"), new String[] {identifier} ), null)); //$NON-NLS-1$ - } - IPersistableSourceLocator sourceLocator = (IPersistableSourceLocator)config.createExecutableExtension("class"); //$NON-NLS-1$ - if (sourceLocator instanceof AbstractSourceLookupDirector) { - ((AbstractSourceLookupDirector)sourceLocator).setId(identifier); - } - return sourceLocator; - } - - /** - * Returns the comparator registered for the given attribute, or - * <code>null</code> if none. - * - * @param attributeName attribute for which a comparator is required - * @return comparator, or <code>null</code> if none - */ - protected Comparator getComparator(String attributeName) { - Map map = getComparators(); - return (Comparator)map.get(attributeName); - } - - /** - * Returns comparators, loading if required - */ - protected Map getComparators() { - initializeComparators(); - return fComparators; - } - - private IWorkspace getWorkspace() { - return ResourcesPlugin.getWorkspace(); - } - - private IWorkspaceRoot getWorkspaceRoot() { - return getWorkspace().getRoot(); - } - - /** - * @see org.eclipse.debug.core.ILaunchManager#addLaunches(org.eclipse.debug.core.ILaunch) - */ - public void addLaunches(ILaunch[] launches) { - List added = new ArrayList(launches.length); - for (int i = 0; i < launches.length; i++) { - if (internalAddLaunch(launches[i])) { - added.add(launches[i]); - } - } - if (!added.isEmpty()) { - ILaunch[] addedLaunches = (ILaunch[])added.toArray(new ILaunch[added.size()]); - fireUpdate(addedLaunches, ADDED); - for (int i = 0; i < addedLaunches.length; i++) { - fireUpdate(launches[i], ADDED); - } - } - } - - /** - * @see org.eclipse.debug.core.ILaunchManager#addLaunchListener(org.eclipse.debug.core.ILaunchesListener) - */ - public void addLaunchListener(ILaunchesListener listener) { - fLaunchesListeners.add(listener); - } - - /** - * @see org.eclipse.debug.core.ILaunchManager#removeLaunches(org.eclipse.debug.core.ILaunch) - */ - public void removeLaunches(ILaunch[] launches) { - List removed = new ArrayList(launches.length); - for (int i = 0; i < launches.length; i++) { - if (internalRemoveLaunch(launches[i])) { - removed.add(launches[i]); - } - } - if (!removed.isEmpty()) { - ILaunch[] removedLaunches = (ILaunch[])removed.toArray(new ILaunch[removed.size()]); - fireUpdate(removedLaunches, REMOVED); - for (int i = 0; i < removedLaunches.length; i++) { - fireUpdate(removedLaunches[i], REMOVED); - } - } - } - - /** - * @see org.eclipse.debug.core.ILaunchManager#removeLaunchListener(org.eclipse.debug.core.ILaunchesListener) - */ - public void removeLaunchListener(ILaunchesListener listener) { - fLaunchesListeners.remove(listener); - } - - /** - * Indicates the given launch configuration is being moved from the given - * location to the new location. - * - * @param from the location a launch configuration is being moved from, or - * <code>null</code> - * @param to the location a launch configuration is being moved to, - * or <code>null</code> - */ - protected void setMovedFromTo(ILaunchConfiguration from, ILaunchConfiguration to) { - fFrom = from; - fTo = to; - } - /** - * @see org.eclipse.debug.core.ILaunchManager#getMovedFrom(org.eclipse.debug.core.ILaunchConfiguration) - */ - public ILaunchConfiguration getMovedFrom(ILaunchConfiguration addedConfiguration) { - if (addedConfiguration.equals(fTo)) { - return fFrom; - } - return null; - } - - /** - * @see org.eclipse.debug.core.ILaunchManager#getMovedTo(org.eclipse.debug.core.ILaunchConfiguration) - */ - public ILaunchConfiguration getMovedTo(ILaunchConfiguration removedConfiguration) { - if (removedConfiguration.equals(fFrom)) { - return fTo; - } - return null; - } - - /** - * Collects files whose extension matches the launch configuration file - * extension. - */ - class ResourceProxyVisitor implements IResourceProxyVisitor { - - private List fList; - - protected ResourceProxyVisitor(List list) { - fList= list; - } - /** - * @see org.eclipse.core.resources.IResourceProxyVisitor#visit(org.eclipse.core.resources.IResourceProxy) - */ - public boolean visit(IResourceProxy proxy) { - if (proxy.getType() == IResource.FILE) { - if (ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION.equalsIgnoreCase(proxy.requestFullPath().getFileExtension())) { - fList.add(proxy.requestResource()); - } - return false; - } - return true; - } - } - - private LaunchNotifier getLaunchNotifier() { - return new LaunchNotifier(); - } - - /** - * Notifies a launch listener (single launch) in a safe runnable to handle - * exceptions. - */ - class LaunchNotifier implements ISafeRunnable { - - private ILaunchListener fListener; - private int fType; - private ILaunch fLaunch; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("LaunchManager.An_exception_occurred_during_launch_change_notification._1"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.launchAdded(fLaunch); - break; - case REMOVED: - fListener.launchRemoved(fLaunch); - break; - case CHANGED: - if (isRegistered(fLaunch)) { - fListener.launchChanged(fLaunch); - } - break; - } - } - - /** - * Notifies the given listener of the add/change/remove - * - * @param listener the listener to notify - * @param launch the launch that has changed - * @param update the type of change - */ - public void notify(ILaunch launch, int update) { - fLaunch = launch; - fType = update; - Object[] copiedListeners= fListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (ILaunchListener)copiedListeners[i]; - Platform.run(this); - } - fLaunch = null; - fListener = null; - } - } - - private LaunchesNotifier getLaunchesNotifier() { - return new LaunchesNotifier(); - } - - /** - * Notifies a launch listener (multiple launches) in a safe runnable to - * handle exceptions. - */ - class LaunchesNotifier implements ISafeRunnable { - - private ILaunchesListener fListener; - private int fType; - private ILaunch[] fNotifierLaunches; - private ILaunch[] fRegistered; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("LaunchManager.An_exception_occurred_during_launch_change_notification._1"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.launchesAdded(fNotifierLaunches); - break; - case REMOVED: - fListener.launchesRemoved(fNotifierLaunches); - break; - case CHANGED: - case TERMINATE: - if (fRegistered == null) { - List registered = null; - for (int j = 0; j < fNotifierLaunches.length; j++) { - if (isRegistered(fNotifierLaunches[j])) { - if (registered != null) { - registered.add(fNotifierLaunches[j]); - } - } else { - if (registered == null) { - registered = new ArrayList(fNotifierLaunches.length); - for (int k = 0; k < j; k++) { - registered.add(fNotifierLaunches[k]); - } - } - } - } - if (registered == null) { - fRegistered = fNotifierLaunches; - } else { - fRegistered = (ILaunch[])registered.toArray(new ILaunch[registered.size()]); - } - } - if (fRegistered.length > 0) { - if (fType == CHANGED) { - fListener.launchesChanged(fRegistered); - } - if (fType == TERMINATE && fListener instanceof ILaunchesListener2) { - ((ILaunchesListener2)fListener).launchesTerminated(fRegistered); - } - } - break; - } - } - - /** - * Notifies the given listener of the adds/changes/removes - * - * @param launches the launches that changed - * @param update the type of change - */ - public void notify(ILaunch[] launches, int update) { - fNotifierLaunches = launches; - fType = update; - fRegistered = null; - Object[] copiedListeners= fLaunchesListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (ILaunchesListener)copiedListeners[i]; - Platform.run(this); - } - fNotifierLaunches = null; - fRegistered = null; - fListener = null; - } - } - - protected ConfigurationNotifier getConfigurationNotifier() { - return new ConfigurationNotifier(); - } - - /** - * Notifies a launch config listener in a safe runnable to handle - * exceptions. - */ - class ConfigurationNotifier implements ISafeRunnable { - - private ILaunchConfigurationListener fListener; - private int fType; - private ILaunchConfiguration fConfiguration; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, DebugCoreMessages.getString("LaunchManager.An_exception_occurred_during_launch_configuration_change_notification._3"), exception); //$NON-NLS-1$ - DebugPlugin.log(status); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.launchConfigurationAdded(fConfiguration); - break; - case REMOVED: - fListener.launchConfigurationRemoved(fConfiguration); - break; - case CHANGED: - fListener.launchConfigurationChanged(fConfiguration); - break; - } - } - - /** - * Notifies the given listener of the add/change/remove - * - * @param configuration the configuration that has changed - * @param update the type of change - */ - public void notify(ILaunchConfiguration configuration, int update) { - fConfiguration = configuration; - fType = update; - if (fLaunchConfigurationListeners.size() > 0) { - Object[] listeners = fLaunchConfigurationListeners.getListeners(); - for (int i = 0; i < listeners.length; i++) { - fListener = (ILaunchConfigurationListener)listeners[i]; - Platform.run(this); - } - } - fConfiguration = null; - fListener = null; - } - } - - /** - * Load comparator extensions. - * - * @exception CoreException if an exception occurs reading - * the extensions - */ - private synchronized void initializeLaunchModes() { - if (fLaunchModes == null) { - IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_MODES); - IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); - fLaunchModes = new HashMap(); - for (int i= 0; i < infos.length; i++) { - IConfigurationElement configurationElement = infos[i]; - try { - ILaunchMode mode = new LaunchMode(configurationElement); - fLaunchModes.put(mode.getIdentifier(), mode); - } catch (CoreException e) { - DebugPlugin.log(e); - } - - } - } - } - - /** - * Returns an array of environment variables to be used when - * launching the given configuration or <code>null</code> if unspecified. - * - * @param configuration launch configuration - * @throws CoreException if unable to access associated attribute or if - * unable to resolve a variable in an environment variable's value - */ - public String[] getEnvironment(ILaunchConfiguration configuration) throws CoreException { - Map envMap = configuration.getAttribute(ATTR_ENVIRONMENT_VARIABLES, (Map) null); - if (envMap == null) { - return null; - } - Map env = null; - // build base environment - env= new HashMap(); - boolean append= configuration.getAttribute(ATTR_APPEND_ENVIRONMENT_VARIABLES, true); - if (append) { - env.putAll(getNativeEnvironment()); - } - - // Add variables from config - Iterator iter= envMap.entrySet().iterator(); - boolean win32= Platform.getOS().equals(Constants.OS_WIN32); - while (iter.hasNext()) { - Map.Entry entry= (Map.Entry) iter.next(); - String key= (String) entry.getKey(); - if (win32) { - // Win32 vars are case insensitive. Uppercase everything so - // that (for example) "pAtH" will correctly replace "PATH" - key= key.toUpperCase(); - } - String value = (String) entry.getValue(); - // translate any string substitution variables - String translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value); - env.put(key, translated); - } - - iter= env.entrySet().iterator(); - List strings= new ArrayList(env.size()); - while (iter.hasNext()) { - Map.Entry entry = (Map.Entry) iter.next(); - StringBuffer buffer= new StringBuffer((String) entry.getKey()); - buffer.append('=').append((String) entry.getValue()); - strings.add(buffer.toString()); - } - return (String[]) strings.toArray(new String[strings.size()]); - } - - - /** - * Returns a copy of the native system environment variables. On WIN32, - * all keys (variable names) are returned in uppercase. Note - * that WIN32's environment is not case sensitive. - * - * @return the a copy of the native system environment variables - */ - public Map getNativeEnvironment() { - if (fgNativeEnv != null) { - return new HashMap(fgNativeEnv); - } - fgNativeEnv= new HashMap(); - try { - String nativeCommand= null; - boolean windowsOS= false; - boolean isWin9xME= false; //see bug 50567 - String fileName= null; - if (Platform.getOS().equals(Constants.OS_WIN32)) { - windowsOS= true; - String osName= System.getProperty("os.name"); //$NON-NLS-1$ - isWin9xME= osName != null && (osName.startsWith("Windows 9") || osName.startsWith("Windows ME")); //$NON-NLS-1$ //$NON-NLS-2$ - if (isWin9xME) { - // Win 95, 98, and ME - // SET might not return therefore we pipe into a file - IPath stateLocation= DebugPlugin.getDefault().getStateLocation(); - fileName= stateLocation.toOSString() + File.separator + "env.txt"; //$NON-NLS-1$ - nativeCommand= "command.com /C set > " + fileName; //$NON-NLS-1$ - } else { - // Win NT, 2K, XP - nativeCommand= "cmd.exe /C set"; //$NON-NLS-1$ - } - } else if (!Platform.getOS().equals(Constants.OS_UNKNOWN)){ - nativeCommand= "printenv"; //$NON-NLS-1$ - } - if (nativeCommand == null) { - return fgNativeEnv; - } - Process process= Runtime.getRuntime().exec(nativeCommand); - if (isWin9xME) { - //read piped data on Win 95, 98, and ME - Properties p= new Properties(); - File file= new File(fileName); - FileInputStream stream= new FileInputStream(file); - p.load(stream); - stream.close(); - if (!file.delete()) { - file.deleteOnExit(); // if delete() fails try again on VM close - } - for (Enumeration enumeration = p.keys(); enumeration.hasMoreElements();) { - // Win32's environment vars are case insensitive. Put everything - // to uppercase so that (for example) the "PATH" variable will match - // "pAtH" correctly on Windows. - String key= ((String) enumeration.nextElement()).toUpperCase(); - //no need to cast value - fgNativeEnv.put(key, p.get(key)); - } - } else { - //read process directly on other platforms - BufferedReader reader= new BufferedReader(new InputStreamReader(process.getInputStream())); - String line= reader.readLine(); - while (line != null) { - int separator= line.indexOf('='); - if (separator > 0) { - String key= line.substring(0, separator); - if (windowsOS) { - // Win32's environment vars are case insensitive. Put everything - // to uppercase so that (for example) the "PATH" variable will match - // "pAtH" correctly on Windows. - key= key.toUpperCase(); - } - String value= line.substring(separator + 1); - fgNativeEnv.put(key, value); - } - line= reader.readLine(); - } - reader.close(); - } - } catch (IOException e) { - // Native environment-fetching code failed. - // This can easily happen and is not useful to log. - } - return new HashMap(fgNativeEnv); - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#newSourcePathComputer(org.eclipse.debug.core.ILaunchConfiguration) - */ - public ISourcePathComputer getSourcePathComputer(ILaunchConfiguration configuration) throws CoreException { - String id = null; - id = configuration.getAttribute(ISourcePathComputer.ATTR_SOURCE_PATH_COMPUTER_ID, (String)null); - - if (id == null) { - //use default computer for configuration type, if any - return configuration.getType().getSourcePathComputer(); - } - return getSourcePathComputer(id); - } - - /** - * Initializes source container type and source path computer extensions. - */ - private synchronized void initializeSourceContainerTypes() { - if (sourceContainerTypes == null) { - IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_SOURCE_CONTAINER_TYPES); - IConfigurationElement[] extensions = extensionPoint.getConfigurationElements(); - sourceContainerTypes = new HashMap(); - for (int i = 0; i < extensions.length; i++) { - sourceContainerTypes.put( - extensions[i].getAttribute("id"), //$NON-NLS-1$ - new SourceContainerType(extensions[i])); - } - extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_SOURCE_PATH_COMPUTERS); - extensions = extensionPoint.getConfigurationElements(); - sourcePathComputers = new HashMap(); - for (int i = 0; i < extensions.length; i++) { - sourcePathComputers.put( - extensions[i].getAttribute("id"), //$NON-NLS-1$ - new SourcePathComputer(extensions[i])); - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#getSourceContainerType(java.lang.String) - */ - public ISourceContainerType getSourceContainerType(String id) { - initializeSourceContainerTypes(); - return (ISourceContainerType) sourceContainerTypes.get(id); - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#getSourceContainerTypes() - */ - public ISourceContainerType[] getSourceContainerTypes() { - initializeSourceContainerTypes(); - Collection containers = sourceContainerTypes.values(); - return (ISourceContainerType[]) containers.toArray(new ISourceContainerType[containers.size()]); - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#getSourcePathComputer(java.lang.String) - */ - public ISourcePathComputer getSourcePathComputer(String id) { - initializeSourceContainerTypes(); - return (ISourcePathComputer) sourcePathComputers.get(id); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#getLaunchModes() - */ - public ILaunchMode[] getLaunchModes() { - initializeLaunchModes(); - Collection collection = fLaunchModes.values(); - return (ILaunchMode[]) collection.toArray(new ILaunchMode[collection.size()]); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchManager#getLaunchMode(java.lang.String) - */ - public ILaunchMode getLaunchMode(String mode) { - initializeLaunchModes(); - return (ILaunchMode) fLaunchModes.get(mode); - } - - -}
\ No newline at end of file diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchMode.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchMode.java deleted file mode 100644 index 805e4b8b2..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchMode.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.text.MessageFormat; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchMode; - -/** - * Proxy to a launch mode extension. - */ -public class LaunchMode implements ILaunchMode { - - private IConfigurationElement fConfigurationElement; - - /** - * Constructs a new launch mode. - * - * @exception CoreException if required attributes are missing - */ - public LaunchMode(IConfigurationElement element) throws CoreException { - fConfigurationElement = element; - verifyAttributes(); - } - - /** - * Verifies required attributes. - * - * @exception CoreException if required attributes are missing - */ - private void verifyAttributes() throws CoreException { - verifyAttributeExists("mode"); //$NON-NLS-1$ - verifyAttributeExists("label"); //$NON-NLS-1$ - } - - /** - * Verifies the given attribute exists - * - * @exception CoreException if attribute does not exist - */ - private void verifyAttributeExists(String name) throws CoreException { - if (fConfigurationElement.getAttribute(name) == null) { - missingAttribute(name); - } - } - - private void missingAttribute(String attrName) throws CoreException { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("LaunchMode.1"),new String[]{attrName}), null)); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchMode#getIdentifier() - */ - public String getIdentifier() { - return fConfigurationElement.getAttribute("mode"); //$NON-NLS-1$; - } - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchMode#getLabel() - */ - public String getLabel() { - return fConfigurationElement.getAttribute("label"); //$NON-NLS-1$; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ListenerList.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ListenerList.java deleted file mode 100644 index 39e7635ea..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ListenerList.java +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -/** - * Local version of org.eclipse.jface.util.ListenerList (modified)s - */ -public class ListenerList { - /** - * The current number of listeners. - * Maintains invariant: 0 <= fSize <= listeners.length. - */ - private int fSize; - - /** - * The list of listeners. Initially <code>null</code> but initialized - * to an array of size capacity the first time a listener is added. - * Maintains invariant: listeners != null if and only if fSize != 0 - */ - private Object[] fListeners= null; - - /** - * The empty array singleton instance, returned by getListeners() - * when size == 0. - */ - private static final Object[] EmptyArray= new Object[0]; - - /** - * Creates a listener list with the given initial capacity. - * - * @param capacity the number of listeners which this list can initially accept - * without growing its internal representation; must be at least 1 - */ - public ListenerList(int capacity) { - if (capacity < 1) { - throw new IllegalArgumentException(); - } - fListeners= new Object[capacity]; - fSize= 0; - } - - /** - * Adds a listener to the list. - * Has no effect if an identical listener is already registered. - * - * @param listener a listener - */ - public synchronized void add(Object listener) { - if (listener == null) { - throw new IllegalArgumentException(); - } - // check for duplicates using identity - for (int i= 0; i < fSize; ++i) { - if (fListeners[i] == listener) { - return; - } - } - // grow array if necessary - if (fSize == fListeners.length) { - Object[] temp= new Object[(fSize * 2) + 1]; - System.arraycopy(fListeners, 0, temp, 0, fSize); - fListeners= temp; - } - fListeners[fSize++]= listener; - } - - /** - * Returns an array containing all the registered listeners. - * The resulting array is unaffected by subsequent adds or removes. - * If there are no listeners registered, the result is an empty array - * singleton instance (no garbage is created). - * Use this method when notifying listeners, so that any modifications - * to the listener list during the notification will have no effect on the - * notification itself. - */ - public synchronized Object[] getListeners() { - if (fSize == 0) { - return EmptyArray; - } - Object[] result= new Object[fSize]; - System.arraycopy(fListeners, 0, result, 0, fSize); - return result; - } - - /** - * Removes a listener from the list. - * Has no effect if an identical listener was not already registered. - * - * @param listener a listener - */ - public synchronized void remove(Object listener) { - if (listener == null) { - throw new IllegalArgumentException(); - } - - for (int i= 0; i < fSize; ++i) { - if (fListeners[i] == listener) { - if (--fSize == 0) { - fListeners= new Object[1]; - } else { - if (i < fSize) { - fListeners[i]= fListeners[fSize]; - } - fListeners[fSize]= null; - } - return; - } - } - } - - /** - * Removes all the listeners from the list. - */ - public synchronized void removeAll() { - fListeners= new Object[0]; - fSize= 0; - } - - /** - * Returns the number of registered listeners - * - * @return the number of registered listeners - */ - public int size() { - return fSize; - } -} - diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LogicalStructureManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LogicalStructureManager.java deleted file mode 100644 index 1c8470ade..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LogicalStructureManager.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.Platform; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILogicalStructureType; -import org.eclipse.debug.core.model.IValue; - -/** - * Manages logical structure extensions - * - * @since 3.0 - */ -public class LogicalStructureManager { - - private static LogicalStructureManager fgDefault; - private List fTypes = null; - - public static LogicalStructureManager getDefault() { - if (fgDefault == null) { - fgDefault = new LogicalStructureManager(); - } - return fgDefault; - } - - public ILogicalStructureType[] getLogicalStructureTypes(IValue value) { - initialize(); - Iterator iterator = fTypes.iterator(); - List select = new ArrayList(); - while (iterator.hasNext()) { - ILogicalStructureType type = (ILogicalStructureType)iterator.next(); - if (type.providesLogicalStructure(value)) { - select.add(type); - } - } - return (ILogicalStructureType[]) select.toArray(new ILogicalStructureType[select.size()]); - } - - private void initialize() { - if (fTypes == null) { - IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LOGICAL_STRUCTURE_TYPES); - IConfigurationElement[] extensions = point.getConfigurationElements(); - fTypes = new ArrayList(extensions.length); - for (int i = 0; i < extensions.length; i++) { - IConfigurationElement extension = extensions[i]; - LogicalStructureType type; - try { - type = new LogicalStructureType(extension); - fTypes.add(type); - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LogicalStructureType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LogicalStructureType.java deleted file mode 100644 index f847446b4..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LogicalStructureType.java +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.text.MessageFormat; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.*; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.model.*; -import org.eclipse.debug.core.model.IValue; - -/** - * Proxy to a logical structure type extension. - */ -public class LogicalStructureType implements ILogicalStructureType { - - private IConfigurationElement fConfigurationElement; - private ILogicalStructureTypeDelegate fDelegate; - private String fModelId; - // whether the 'description' attribute has been verified to exist: it is only - // required when the delegate does *not* implement ILogicalStructureTypeDelegate2. - private boolean fVerifiedDescription = false; - - /** - * Constructs a new logical structure type, and verifies required attributes. - * - * @exception CoreException if required attributes are missing - */ - public LogicalStructureType(IConfigurationElement element) throws CoreException { - fConfigurationElement = element; - verifyAttributes(); - } - - /** - * Verifies required attributes. - * - * @exception CoreException if required attributes are missing - */ - private void verifyAttributes() throws CoreException { - verifyAttributeExists("id"); //$NON-NLS-1$ - verifyAttributeExists("class"); //$NON-NLS-1$ - fModelId = fConfigurationElement.getAttribute("modelIdentifier"); //$NON-NLS-1$ - if (fModelId == null) { - missingAttribute("modelIdentifier"); //$NON-NLS-1$ - } - } - - /** - * Verifies the given attribute exists - * - * @exception CoreException if attribute does not exist - */ - private void verifyAttributeExists(String name) throws CoreException { - if (fConfigurationElement.getAttribute(name) == null) { - missingAttribute(name); - } - } - - private void missingAttribute(String attrName) throws CoreException { - throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.getString("LogicalStructureType.7"),new String[]{attrName}), null)); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.ILogicalStructureType#getDescription() - */ - public String getDescription() { - return fConfigurationElement.getAttribute("description"); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.ILogicalStructureType#getId() - */ - public String getId() { - return fConfigurationElement.getAttribute("id"); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.ILogicalStructureType#getLogicalStructure(org.eclipse.debug.core.model.IValue) - */ - public IValue getLogicalStructure(IValue value) throws CoreException { - return getDelegate().getLogicalStructure(value); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.ILogicalStructureType#providesLogicalStructure(org.eclipse.debug.core.model.IValue) - */ - public boolean providesLogicalStructure(IValue value) { - if (value.getModelIdentifier().equals(fModelId)) { - return getDelegate().providesLogicalStructure(value); - } - return false; - } - - protected ILogicalStructureTypeDelegate getDelegate() { - if (fDelegate == null) { - try { - fDelegate = (ILogicalStructureTypeDelegate) fConfigurationElement.createExecutableExtension("class"); //$NON-NLS-1$ - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - return fDelegate; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.ILogicalStructureTypeDelegate2#getDescription(org.eclipse.debug.core.model.IValue) - */ - public String getDescription(IValue value) { - ILogicalStructureTypeDelegate delegate = getDelegate(); - if (delegate instanceof ILogicalStructureTypeDelegate2) { - ILogicalStructureTypeDelegate2 d2 = (ILogicalStructureTypeDelegate2) delegate; - return d2.getDescription(value); - } - if (!fVerifiedDescription) { - fVerifiedDescription = true; - try { - verifyAttributeExists("description"); //$NON-NLS-1$ - } catch (CoreException e) { - DebugPlugin.log(e); - } - } - String description = getDescription(); - if (description == null) { - return DebugCoreMessages.getString("LogicalStructureType.0"); //$NON-NLS-1$ - } - return description; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/MemoryBlockManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/MemoryBlockManager.java deleted file mode 100644 index b92c504c7..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/MemoryBlockManager.java +++ /dev/null @@ -1,315 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.debug.internal.core; - -import java.util.ArrayList; - -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.Platform; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; -import org.eclipse.debug.core.IMemoryBlockListener; -import org.eclipse.debug.core.IMemoryBlockManager; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IMemoryBlock; -import org.eclipse.debug.core.model.IMemoryBlockExtension; -import org.eclipse.debug.core.model.IMemoryBlockRetrieval; - - -/** - * Implementation of IMemoryBlockManager - * The manager is responsible to manage all memory blocks in the workbench. - * - * @since 3.1 - * - */ -/** - * MemoryBlockManager - */ -/** - * MemoryBlockManager - */ -public class MemoryBlockManager implements IMemoryBlockManager, IDebugEventSetListener { - - private ArrayList listeners = new ArrayList(); // list of all IMemoryBlockListener - private ArrayList memoryBlocks = new ArrayList(); // list of all memory blocks - - private static final int ADDED = 0; - private static final int REMOVED = 1; - /** - * Notifies a memory block listener in a safe runnable to - * handle exceptions. - */ - class MemoryBlockNotifier implements ISafeRunnable { - - private IMemoryBlockListener fListener; - private int fType; - private IMemoryBlock[] fMemoryBlocks; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - DebugPlugin.log(exception); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - switch (fType) { - case ADDED: - fListener.memoryBlocksAdded(fMemoryBlocks); - break; - case REMOVED: - fListener.memoryBlocksRemoved(fMemoryBlocks); - break; - } - } - - /** - * Notify listeners of added/removed memory block events - */ - public void notify(IMemoryBlock[] memBlocks, int update) { - if (listeners != null) { - fType = update; - Object[] copiedListeners= listeners.toArray(new IMemoryBlockListener[listeners.size()]); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IMemoryBlockListener)copiedListeners[i]; - fMemoryBlocks = memBlocks; - Platform.run(this); - } - } - fListener = null; - fMemoryBlocks = null; - } - } - - private MemoryBlockNotifier getMemoryBlockNotifier() { - return new MemoryBlockNotifier(); - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.IMemoryBlockManager#addMemoryBlock(org.eclipse.debug.core.model.IMemoryBlock) - */ - public void addMemoryBlocks(IMemoryBlock[] mem) { - - if (memoryBlocks == null) - return; - - if (mem == null){ - DebugPlugin.logMessage("Null argument passed into IMemoryBlockManager.addMemoryBlock", null); //$NON-NLS-1$ - return; - } - - ArrayList newMemoryBlocks = new ArrayList(); - - for (int i=0; i<mem.length; i++) - { - // do not allow duplicates - if (!memoryBlocks.contains(mem[i])) - { - - newMemoryBlocks.add(mem[i]); - memoryBlocks.add(mem[i]); - - // add listener for the first memory block added - if (memoryBlocks.size() == 1) - { - DebugPlugin.getDefault().addDebugEventListener(this); - } - } - } - - notifyListeners((IMemoryBlock[])newMemoryBlocks.toArray(new IMemoryBlock[newMemoryBlocks.size()]), ADDED); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.IMemoryBlockManager#removeMemoryBlock(org.eclipse.debug.core.model.IMemoryBlock) - */ - public void removeMemoryBlocks(IMemoryBlock[] memBlocks) { - - if (memoryBlocks == null) - return; - - if (memBlocks == null){ - DebugPlugin.logMessage("Null argument passed into IMemoryBlockManager.removeMemoryBlock", null); //$NON-NLS-1$ - return; - } - - for (int i=0; i<memBlocks.length; i++) - { - memoryBlocks.remove(memBlocks[i]); - // remove listener after the last memory block has been removed - if (memoryBlocks.size() == 0) - { - DebugPlugin.getDefault().removeDebugEventListener(this); - } - - if (memBlocks[i] instanceof IMemoryBlockExtension) - { - ((IMemoryBlockExtension)memBlocks[i]).dispose(); - } - } - - notifyListeners(memBlocks, REMOVED); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.IMemoryBlockManager#addListener(org.eclipse.debug.ui.IMemoryBlockListener) - */ - public void addListener(IMemoryBlockListener listener) { - - if(listeners == null) - return; - - if(listener == null){ - DebugPlugin.logMessage("Null argument passed into IMemoryBlockManager.addListener", null); //$NON-NLS-1$ - return; - } - - if (!listeners.contains(listener)) - listeners.add(listener); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.IMemoryBlockManager#removeListener(org.eclipse.debug.ui.IMemoryBlockListener) - */ - public void removeListener(IMemoryBlockListener listener) { - - if(listeners == null) - return; - - if(listener == null){ - DebugPlugin.logMessage("Null argument passed into IMemoryBlockManager.removeListener", null); //$NON-NLS-1$ - return; - } - - if (listeners.contains(listener)) - listeners.remove(listener); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IMemoryBlockManager#getMemoryBlocks() - */ - public IMemoryBlock[] getMemoryBlocks() { - - IMemoryBlock[] blocks = (IMemoryBlock[])memoryBlocks.toArray(new IMemoryBlock[memoryBlocks.size()]); - - return blocks; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.IMemoryBlockManager#getMemoryBlocks(org.eclipse.debug.core.model.IDebugTarget) - */ - public IMemoryBlock[] getMemoryBlocks(IDebugTarget debugTarget) { - - IMemoryBlock[] blocks = (IMemoryBlock[])memoryBlocks.toArray(new IMemoryBlock[memoryBlocks.size()]); - - ArrayList memoryBlocksList = new ArrayList(); - - for (int i=0; i<blocks.length; i++) - { - if (blocks[i].getDebugTarget() == debugTarget) - memoryBlocksList.add(blocks[i]); - } - - return (IMemoryBlock[])memoryBlocksList.toArray(new IMemoryBlock[memoryBlocksList.size()]); - - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.IMemoryBlockManager#getMemoryBlocks(org.eclipse.debug.core.model.IMemoryBlockRetrieval) - */ - public IMemoryBlock[] getMemoryBlocks(IMemoryBlockRetrieval retrieve) { - IMemoryBlock[] blocks = (IMemoryBlock[])memoryBlocks.toArray(new IMemoryBlock[memoryBlocks.size()]); - - ArrayList memoryBlocksList = new ArrayList(blocks.length); - - for (int i=0; i<blocks.length; i++) - { - if (blocks[i] instanceof IMemoryBlockExtension) - { - - if (((IMemoryBlockExtension)blocks[i]).getMemoryBlockRetrieval() == retrieve) - { - memoryBlocksList.add(blocks[i]); - } - } - else - { - // standard memory block always uses the debug target as the memory block retrieval - if (blocks[i].getDebugTarget() == retrieve) - memoryBlocksList.add(blocks[i]); - } - } - - return (IMemoryBlock[])memoryBlocksList.toArray(new IMemoryBlock[memoryBlocksList.size()]); - } - - - private void notifyListeners(IMemoryBlock[] memBlocks, int event) - { - getMemoryBlockNotifier().notify(memBlocks, event); - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - - for (int i=0; i < events.length; i++) - handleDebugEvent(events[i]); - - } - - public void handleDebugEvent(DebugEvent event) { - Object obj = event.getSource(); - IDebugTarget dt = null; - - if (event.getKind() == DebugEvent.TERMINATE) - { - // a terminate event could happen from an IThread or IDebugTarget - // only handle a debug event from the debug target - if (obj instanceof IDebugTarget) - { - dt = ((IDebugTarget)obj); - } - - // getMemoryBlocks will return an empty array if dt is null - IMemoryBlock[] deletedMemoryBlocks = getMemoryBlocks(dt); - removeMemoryBlocks(deletedMemoryBlocks); - } - } - - /** - * Clean up when the plugin is shut down - */ - public void shutdown() - { - if (listeners != null) - { - listeners.clear(); - listeners = null; - } - - if (memoryBlocks != null) - { - memoryBlocks.clear(); - memoryBlocks = null; - } - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/NullStreamsProxy.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/NullStreamsProxy.java deleted file mode 100644 index 52711abfb..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/NullStreamsProxy.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.debug.core.IStreamListener; -import org.eclipse.debug.core.model.IStreamMonitor; -import org.eclipse.debug.core.model.IStreamsProxy2; - -public class NullStreamsProxy implements IStreamsProxy2 { - private NullStreamMonitor outputStreamMonitor; - private NullStreamMonitor errorStreamMonitor; - - public NullStreamsProxy(Process process) { - outputStreamMonitor = new NullStreamMonitor(process.getInputStream()); - errorStreamMonitor = new NullStreamMonitor(process.getErrorStream()); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamsProxy2#closeInputStream() - */ - public void closeInputStream() throws IOException { - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamsProxy#getErrorStreamMonitor() - */ - public IStreamMonitor getErrorStreamMonitor() { - return errorStreamMonitor; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamsProxy#getOutputStreamMonitor() - */ - public IStreamMonitor getOutputStreamMonitor() { - return outputStreamMonitor; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamsProxy#write(java.lang.String) - */ - public void write(String input) throws IOException { - } - - private class NullStreamMonitor implements IStreamMonitor { - private InputStream fStream; - - public NullStreamMonitor(InputStream stream) { - fStream = stream; - startReaderThread(); - } - - private void startReaderThread() { - Thread thread = new Thread(new Runnable() { - public void run() { - byte[] bytes = new byte[1024]; - try { - while(fStream.read(bytes) >= 0) { - //do nothing - } - } catch (IOException e) { - } - } - }, DebugCoreMessages.getString("NullStreamsProxy.0")); //$NON-NLS-1$ - thread.start(); - - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamMonitor#addListener(org.eclipse.debug.core.IStreamListener) - */ - public void addListener(IStreamListener listener) { - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamMonitor#getContents() - */ - public String getContents() { - return ""; //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamMonitor#removeListener(org.eclipse.debug.core.IStreamListener) - */ - public void removeListener(IStreamListener listener) { - } - - - - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java deleted file mode 100644 index 58878c383..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java +++ /dev/null @@ -1,255 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.Platform; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IStreamListener; -import org.eclipse.debug.core.model.IFlushableStreamMonitor; - -/** - * Monitors the output stream of a system process and notifies - * listeners of additions to the stream. - * - * The output stream monitor reads system out (or err) via - * and input stream. - */ -public class OutputStreamMonitor implements IFlushableStreamMonitor { - /** - * The stream being monitored (connected system out or err). - */ - private InputStream fStream; - - /** - * A collection of listeners - */ - private ListenerList fListeners= new ListenerList(1); - - /** - * Whether content is being buffered - */ - private boolean fBuffered = true; - - /** - * The local copy of the stream contents - */ - private StringBuffer fContents; - - /** - * The thread which reads from the stream - */ - private Thread fThread; - - /** - * The size of the read buffer - */ - private static final int BUFFER_SIZE= 8192; - - /** - * Whether or not this monitor has been killed. - * When the monitor is killed, it stops reading - * from the stream immediately. - */ - private boolean fKilled= false; - - /** - * Creates an output stream monitor on the - * given stream (connected to system out or err). - */ - public OutputStreamMonitor(InputStream stream) { - fStream= stream; - fContents= new StringBuffer(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamMonitor#addListener(org.eclipse.debug.core.IStreamListener) - */ - public synchronized void addListener(IStreamListener listener) { - fListeners.add(listener); - } - - /** - * Causes the monitor to close all - * communications between it and the - * underlying stream by waiting for the thread to terminate. - */ - protected void close() { - if (fThread != null) { - Thread thread= fThread; - fThread= null; - try { - thread.join(); - } catch (InterruptedException ie) { - } - fListeners.removeAll(); - } - } - - /** - * Notifies the listeners that text has - * been appended to the stream. - */ - private void fireStreamAppended(String text) { - getNotifier().notifyAppend(text); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamMonitor#getContents() - */ - public synchronized String getContents() { - return fContents.toString(); - } - - /** - * Continually reads from the stream. - * <p> - * This method, along with the <code>startReading</code> - * method is used to allow <code>OutputStreamMonitor</code> - * to implement <code>Runnable</code> without publicly - * exposing a <code>run</code> method. - */ - private void read() { - byte[] bytes= new byte[BUFFER_SIZE]; - int read = 0; - int count = 0; - while (read >= 0) { - try { - if (fKilled) { - break; - } - read= fStream.read(bytes); - if (read > 0) { - String text= new String(bytes, 0, read); - synchronized (this) { - if (isBuffered()) { - fContents.append(text); - } - fireStreamAppended(text); - } - if (count == 10) { - try { - //allow other threads to do some processing. - //heavy console output can make this loop busy. - Thread.sleep(10); - } catch (InterruptedException e) { - } - count = 0; - } else { - count++; - } - } - } catch (IOException ioe) { - DebugPlugin.log(ioe); - return; - } catch (NullPointerException e) { - // killing the stream monitor while reading can cause an NPE - // when reading from the stream - if (!fKilled && fThread != null) { - DebugPlugin.log(e); - } - return; - } - } - try { - fStream.close(); - } catch (IOException e) { - DebugPlugin.log(e); - } - } - - protected void kill() { - fKilled= true; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamMonitor#removeListener(org.eclipse.debug.core.IStreamListener) - */ - public synchronized void removeListener(IStreamListener listener) { - fListeners.remove(listener); - } - - /** - * Starts a thread which reads from the stream - */ - protected void startMonitoring() { - if (fThread == null) { - fThread= new Thread(new Runnable() { - public void run() { - read(); - } - }, DebugCoreMessages.getString("OutputStreamMonitor.label")); //$NON-NLS-1$ - fThread.start(); - } - } - - /** - * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#setBuffered(boolean) - */ - public synchronized void setBuffered(boolean buffer) { - fBuffered = buffer; - } - - /** - * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#flushContents() - */ - public synchronized void flushContents() { - fContents.setLength(0); - } - - /** - * @see IFlushableStreamMonitor#isBuffered() - */ - public synchronized boolean isBuffered() { - return fBuffered; - } - - private ContentNotifier getNotifier() { - return new ContentNotifier(); - } - - class ContentNotifier implements ISafeRunnable { - - private IStreamListener fListener; - private String fText; - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) - */ - public void handleException(Throwable exception) { - DebugPlugin.log(exception); - } - - /** - * @see org.eclipse.core.runtime.ISafeRunnable#run() - */ - public void run() throws Exception { - fListener.streamAppended(fText, OutputStreamMonitor.this); - } - - public void notifyAppend(String text) { - if (text == null) - return; - fText = text; - Object[] copiedListeners= fListeners.getListeners(); - for (int i= 0; i < copiedListeners.length; i++) { - fListener = (IStreamListener) copiedListeners[i]; - Platform.run(this); - } - fListener = null; - fText = null; - } - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java deleted file mode 100644 index eb785b460..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/StreamsProxy.java +++ /dev/null @@ -1,124 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - - -import java.io.IOException; - -import org.eclipse.debug.core.model.IStreamMonitor; -import org.eclipse.debug.core.model.IStreamsProxy; -import org.eclipse.debug.core.model.IStreamsProxy2; - -/** - * Standard implementation of a streams proxy for s - * StreamsProxy - */ - -public class StreamsProxy implements IStreamsProxy, IStreamsProxy2 { - /** - * The monitor for the output stream (connected to standard out of the process) - */ - private OutputStreamMonitor fOutputMonitor; - /** - * The monitor for the error stream (connected to standard error of the process) - */ - private OutputStreamMonitor fErrorMonitor; - /** - * The monitor for the input stream (connected to standard in of the process) - */ - private InputStreamMonitor fInputMonitor; - /** - * Records the open/closed state of communications with - * the underlying streams. - */ - private boolean fClosed= false; - /** - * Creates a <code>StreamsProxy</code> on the streams - * of the given system process. - */ - public StreamsProxy(Process process) { - if (process == null) { - return; - } - fOutputMonitor= new OutputStreamMonitor(process.getInputStream()); - fErrorMonitor= new OutputStreamMonitor(process.getErrorStream()); - fInputMonitor= new InputStreamMonitor(process.getOutputStream()); - fOutputMonitor.startMonitoring(); - fErrorMonitor.startMonitoring(); - fInputMonitor.startMonitoring(); - } - - /** - * Causes the proxy to close all - * communications between it and the - * underlying streams after all remaining data - * in the streams is read. - */ - public void close() { - if (!fClosed) { - fClosed= true; - fOutputMonitor.close(); - fErrorMonitor.close(); - fInputMonitor.close(); - } - } - - /** - * Causes the proxy to close all - * communications between it and the - * underlying streams immediately. - * Data remaining in the streams is lost. - */ - public void kill() { - fClosed= true; - fOutputMonitor.kill(); - fErrorMonitor.kill(); - fInputMonitor.close(); - } - - /** - * @see IStreamsProxy#getErrorStreamMonitor() - */ - public IStreamMonitor getErrorStreamMonitor() { - return fErrorMonitor; - } - - /** - * @see IStreamsProxy#getOutputStreamMonitor() - */ - public IStreamMonitor getOutputStreamMonitor() { - return fOutputMonitor; - } - - /** - * @see IStreamsProxy#write(String) - */ - public void write(String input) throws IOException { - if (!fClosed) { - fInputMonitor.write(input); - } else { - throw new IOException(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStreamsProxy2#closeInputStream() - */ - public void closeInputStream() throws IOException { - if (!fClosed) { - fInputMonitor.closeInputStream(); - } else { - throw new IOException(); - } - - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/SystemVariableResolver.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/SystemVariableResolver.java deleted file mode 100644 index 8a78e134c..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/SystemVariableResolver.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import java.net.URL; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.variables.IDynamicVariable; -import org.eclipse.core.variables.IDynamicVariableResolver; - -/** - * Resolves common system variables. The current set of variables - * supported (referenced as an argument to this variable) are: - * <ul> - * <li>ARCH - value of <code>BootLoader.getOSArch()</code></li> - * <li>ECLIPSE_HOME - location of the Eclipse installation</li> - * <li>NL - value of <code>BootLoader.getNL()</code></li> - * <li>OS - value of <code>BootLoader.getOS()</code></li> - * <li>WS - value of <code>BootLoader.getWS()</code></li> - * </ul> - * @since 3.0 - */ -public class SystemVariableResolver implements IDynamicVariableResolver { - /* (non-Javadoc) - * @see org.eclipse.core.variables.IDynamicVariableResolver#resolveValue(org.eclipse.core.variables.IDynamicVariable, java.lang.String) - */ - public String resolveValue(IDynamicVariable variable, String argument) throws CoreException { - if ("ARCH".equals(argument)) { //$NON-NLS-1$ - return Platform.getOSArch(); - } else if ("ECLIPSE_HOME".equals(argument)) { //$NON-NLS-1$ - URL installURL = Platform.getInstallLocation().getURL(); - IPath ppath = new Path(installURL.getFile()).removeTrailingSeparator(); - return getCorrectPath(ppath.toOSString()); - } else if ("NL".equals(argument)) { //$NON-NLS-1$ - return Platform.getNL(); - } else if ("OS".equals(argument)) { //$NON-NLS-1$ - return Platform.getOS(); - } else if ("WS".equals(argument)) { //$NON-NLS-1$ - return Platform.getWS(); - } - return null; - } - - private static String getCorrectPath(String path) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < path.length(); i++) { - char c = path.charAt(i); - if (Platform.getOS().equals("win32")) { //$NON-NLS-1$ - if (i == 0 && c == '/') - continue; - } - // Some VMs may return %20 instead of a space - if (c == '%' && i + 2 < path.length()) { - char c1 = path.charAt(i + 1); - char c2 = path.charAt(i + 2); - if (c1 == '2' && c2 == '0') { - i += 2; - buf.append(" "); //$NON-NLS-1$ - continue; - } - } - buf.append(c); - } - return buf.toString(); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java deleted file mode 100644 index ddeb19501..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java +++ /dev/null @@ -1,262 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.model.IDebugElement; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IValue; -import org.eclipse.debug.core.model.IWatchExpression; -import org.eclipse.debug.core.model.IWatchExpressionDelegate; -import org.eclipse.debug.core.model.IWatchExpressionListener; -import org.eclipse.debug.core.model.IWatchExpressionResult; - -/** - * Base watch expression implementation. - * <p> - * Clients may extend this class. - * </p> - * @since 3.0 - */ -public class WatchExpression implements IWatchExpression { - - protected String fExpressionText; - protected IWatchExpressionResult fResult; - protected IDebugTarget fDebugTarget; - protected IDebugElement fCurrentContext; - private boolean fEnabled= true; - private boolean fPending= false; - - /** - * Creates a new watch expression with the given expression - * text. - * @param expression the text of the expression to be evaluated. - */ - public WatchExpression(String expression) { - fExpressionText= expression; - } - - /** - * Creates a new watch expression with the given expression - * and the given enablement; - * - * @param expressionText the text of the expression to be evaluated - * @param enabled whether or not the new expression should be enabled - */ - public WatchExpression(String expressionText, boolean enabled) { - this(expressionText); - fEnabled= enabled; - } - - /** - * @see org.eclipse.debug.core.model.IWatchExpression#evaluate() - */ - public void evaluate() { - if (fCurrentContext == null) { - return; - } - IDebugElement context= fCurrentContext; - fDebugTarget= context.getDebugTarget(); - - IWatchExpressionListener listener= new IWatchExpressionListener() { - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IWatchExpressionListener#watchEvaluationFinished(org.eclipse.debug.core.model.IWatchExpressionResult) - */ - public void watchEvaluationFinished(IWatchExpressionResult result) { - setPending(false); - setResult(result); - } - }; - setPending(true); - IWatchExpressionDelegate delegate= DebugPlugin.getDefault().getExpressionManager().newWatchExpressionDelegate(context.getModelIdentifier()); - if (delegate != null) { - delegate.evaluateExpression(getExpressionText(), context, listener); - } else { - // No delegate provided - listener.watchEvaluationFinished(new IWatchExpressionResult() { - public IValue getValue() { - return null; - } - public boolean hasErrors() { - return true; - } - public String[] getErrorMessages() { - return new String[] { DebugCoreMessages.getString("WatchExpression.0") }; //$NON-NLS-1$ - } - public String getExpressionText() { - return WatchExpression.this.getExpressionText(); - } - public DebugException getException() { - return null; - } - }); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IWatchExpression#setExpressionContext(org.eclipse.debug.core.model.IDebugElement) - */ - public void setExpressionContext(IDebugElement context) { - fCurrentContext= context; - if (context == null) { - setResult(null); - return; - } - if (!isEnabled()) { - return; - } - - evaluate(); - } - - /** - * Sets the result of the last expression and fires notification that - * this expression's value has changed. - */ - public void setResult(IWatchExpressionResult result) { - fResult= result; - DebugPlugin.getDefault().fireDebugEventSet(new DebugEvent[] {new DebugEvent(this, DebugEvent.CHANGE)}); - } - - /** - * Notifies the expression manager that this watch expression's - * values have changed so the manager can update the - * persisted expression. - */ - private void watchExpressionChanged() { - ((ExpressionManager)DebugPlugin.getDefault().getExpressionManager()).watchExpressionChanged(this); - } - - /** - * @see org.eclipse.debug.core.model.IExpression#getExpressionText() - */ - public String getExpressionText() { - return fExpressionText; - } - - /** - * @see org.eclipse.debug.core.model.IExpression#getValue() - */ - public IValue getValue() { - if (fResult == null) { - return null; - } - return fResult.getValue(); - } - - /** - * @see org.eclipse.debug.core.model.IDebugElement#getDebugTarget() - */ - public IDebugTarget getDebugTarget() { - return fDebugTarget; - } - - /** - * @see org.eclipse.debug.core.model.IExpression#dispose() - */ - public void dispose() { - } - - /** - * @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier() - */ - public String getModelIdentifier() { - if (fCurrentContext != null) { - return fCurrentContext.getModelIdentifier(); - } - return DebugPlugin.getUniqueIdentifier(); - } - - /** - * @see org.eclipse.debug.core.model.IDebugElement#getLaunch() - */ - public ILaunch getLaunch() { - IDebugTarget debugTarget = getDebugTarget(); - if (debugTarget != null) { - return debugTarget.getLaunch(); - } - return null; - } - - /** - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - return Platform.getAdapterManager().getAdapter(this, adapter); - } - - /** - * @param enabled - */ - public void setEnabled(boolean enabled) { - fEnabled= enabled; - watchExpressionChanged(); - evaluate(); - } - - /** - * @param expression - */ - public void setExpressionText(String expression) { - fExpressionText= expression; - watchExpressionChanged(); - evaluate(); - } - - /** - * @return Whether or not this watch expression is currently enabled. - * Enabled watch expressions will continue to update their value - * automatically. Disabled expressions require a manual update. - */ - public boolean isEnabled() { - return fEnabled; - } - - /** - * @see org.eclipse.debug.core.model.IWatchExpression#isPending() - */ - public boolean isPending() { - return fPending; - } - - /** - * Sets the pending state of this expression. - * - * @param pending whether or not this expression should be - * flagged as pending - */ - protected void setPending(boolean pending) { - fPending= pending; - watchExpressionChanged(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IErrorReportingExpression#hasErrors() - */ - public boolean hasErrors() { - return fResult != null && fResult.hasErrors(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IErrorReportingExpression#getErrorMessages() - */ - public String[] getErrorMessages() { - if (fResult == null) { - return new String[0]; - } - return fResult.getErrorMessages(); - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java deleted file mode 100644 index 8e0ac910d..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.ISourceContainerType; -import org.eclipse.debug.core.sourcelookup.ISourceContainerTypeDelegate; - -/** - * Proxy to contributed source container type extension. - * - * @since 3.0 - */ -public class SourceContainerType implements ISourceContainerType { - - // lazily instantiated delegate - private ISourceContainerTypeDelegate fDelegate = null; - - // extension definition - private IConfigurationElement fElement = null; - - /** - * Constructs a source container type on the given extension. - * - * @param element extension definition - */ - public SourceContainerType(IConfigurationElement element) { - fElement = element; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - return getDelegate().createSourceContainer(memento); - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - if (this.equals(container.getType())) { - return getDelegate().getMemento(container); - } - IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, SourceLookupMessages.getString("SourceContainerType.3"), null); //$NON-NLS-1$ - throw new CoreException(status); - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getName() - */ - public String getName() { - return fElement.getAttribute("name"); //$NON-NLS-1$ - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getId() - */ - public String getId() { - return fElement.getAttribute("id"); //$NON-NLS-1$ - } - - /** - * Lazily instantiates and returns the underlying source container type. - * - * @exception CoreException if unable to instantiate - */ - private ISourceContainerTypeDelegate getDelegate() throws CoreException { - if (fDelegate == null) { - fDelegate = (ISourceContainerTypeDelegate) fElement.createExecutableExtension("class"); //$NON-NLS-1$ - } - return fDelegate; - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getDescription() - */ - public String getDescription() { - return fElement.getAttribute("description"); //$NON-NLS-1$ - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLocatorMementoComparator.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLocatorMementoComparator.java deleted file mode 100644 index 4c49167ca..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLocatorMementoComparator.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup; - -import java.util.Comparator; - -/** - * Comparator for source locator mementors. Ignores whitespace differences. - * - * @since 3.0 - */ -public class SourceLocatorMementoComparator implements Comparator { - /* (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(Object o1, Object o2) { - String m1 = (String)o1; - String m2 = (String)o2; - int i1 = 0, i2 = 0; - while (i1 < m1.length()) { - i1 = skipWhitespace(m1, i1); - i2 = skipWhitespace(m2, i2); - if (i1 < m1.length() && i2 < m2.length()) { - if (m1.charAt(i1) != m2.charAt(i2)) { - return -1; - } - i1++; - i2++; - } else { - if (i2 < m2.length()) { - return -1; - } - return 0; - } - } - return 0; - } - - private int skipWhitespace(String string, int offset) { - while (offset < string.length() && Character.isWhitespace(string.charAt(offset))) { - offset++; - } - return offset; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupMessages.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupMessages.java deleted file mode 100644 index 59eaf1499..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupMessages.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class SourceLookupMessages { - private static final String BUNDLE_NAME = "org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages";//$NON-NLS-1$ - private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); - - private SourceLookupMessages() { - } - public static String getString(String key) { - try { - return RESOURCE_BUNDLE.getString(key); - } catch (MissingResourceException e) { - return '!' + key + '!'; - } - } -}
\ No newline at end of file diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupMessages.properties b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupMessages.properties deleted file mode 100644 index 87a6b7cf7..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupMessages.properties +++ /dev/null @@ -1,59 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2004 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -AbstractSourceLookupDirector.11=Unable to restore source lookup path - expecting typeId attribute. -AbstractSourceLookupDirector.12=Unable to restore source lookup path - unknown type source container type specified: {0} -AbstractSourceLookupDirector.13=Unable to restore source lookup path - expecting memento attribute. -AbstractSourceLookupDirector.14=Unable to read source lookup path - expecting sourceLookupDirector node. -AbstractSourceLookupDirector.19=Source lookup error -CompositeSourceContainer.0=Source lookup error - -ExternalArchiveSourceContainer.1=Exception occurred while detecting root directory in archive {0} -ExternalArchiveSourceContainer.2=Unable to access archive {0} - -ExternalArchiveSourceContainerType.10=Invalid or missing <path> attribute in archive memento. -ExternalArchiveSourceContainerType.11=Missing <archive> node in archive memento. -ExternalArchiveSourceContainerType.12=Invalid archive memento - -DefaultSourceContainer.0=Default -DefaultSourceContainerType.6=Unable to restore default source lookup path - expecting default element. -DefaultSourceContainerType.7=Unable to restore default source lookup path - invalid memento. - -DirectorySourceContainerType.10=Unable to restore directory source lookup entry - missing path attribute. -DirectorySourceContainerType.11=Unable to restore directory source lookup entry - expecting directory element. -DirectorySourceContainerType.12=Unable to restore directory source lookup entry - invalid memento. - -FolderSourceContainerType.10=Unable to restore source lookup folder - missing path attribute. -FolderSourceContainerType.11=Unable to restore source lookup folder - expecting folder element. -FolderSourceContainerType.12=Unable to restore source lookup folder - invalid memento. - -LocalFileStorage.0=Exception ocurred retrieving file contents. - -ProjectSourceContainerType.10=Unable to restore project source lookup entry - missing name attribute. -ProjectSourceContainerType.11=Unable to restore project source lookup entry - expecting project element. -ProjectSourceContainerType.12=Unable to restore project source lookup entry - invalid memento. - -SourceLookupUtils.3=Unable to create new XML document. -SourceLookupUtils.4=Unable to serialize XML document. -SourceLookupUtils.5=Unable to serialize XML document. -SourceLookupUtils.6=Unable to parse XML document. -SourceLookupUtils.7=Unable to parse XML document. -SourceLookupUtils.8=Unable to parse XML document. -SourceLookupUtils.9=Unable to parse XML document. -SourceLookupUtils.10=Unable to parse XML document. -SourceContainerType.3=Unable to persist source lookup path. - -WorkspaceSourceContainer.0=Workspace - -WorkspaceSourceContainerType.3=Unable to restore workspace source lookup entry - expecting workspace element. -WorkspaceSourceContainerType.4=Unable to restore workspace source lookup entry - invalid memento. - -ZipEntryStorage.0=Unable to read ZipEntry contents diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupUtils.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupUtils.java deleted file mode 100644 index 38f6ad212..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceLookupUtils.java +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.zip.ZipFile; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchesListener; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IProcess; - -/** - * Utility and supporting methods for source location. Most of these - * utilities should be migrated to the DebugPlugin and LanuchManager - * when this facility becomes public API. - * <p> - * This class is experimental and temporary. - * </p> - * @see org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector - * @since 3.0 - */ -public class SourceLookupUtils { - - /** - * Cache of shared zip files. Zip files are closed - * when this class's plug-in is shutdown, when a project - * is about to be closed or deleted, when a launch is - * removed, and when a debug target or process terminates. - */ - private static HashMap fgZipFileCache = new HashMap(5); - private static ArchiveCleaner fgCleaner = null; - - /** - * Returns a zip file with the given name - * - * @param name zip file name - * @return The zip file with the given name - * @exception IOException if unable to create the specified zip - * file - */ - public static ZipFile getZipFile(String name) throws IOException { - synchronized (fgZipFileCache) { - if (fgCleaner == null) { - fgCleaner = new ArchiveCleaner(); - DebugPlugin.getDefault().addDebugEventListener(fgCleaner); - DebugPlugin.getDefault().getLaunchManager().addLaunchListener(fgCleaner); - ResourcesPlugin.getWorkspace().addResourceChangeListener(fgCleaner, IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_CLOSE); - } - ZipFile zip = (ZipFile)fgZipFileCache.get(name); - if (zip == null) { - zip = new ZipFile(name); - fgZipFileCache.put(name, zip); - } - return zip; - } - } - - /** - * Closes all zip files that have been opened, - * and removes them from the zip file cache. - * This method is only to be called by the debug - * plug-in. - */ - public static void closeArchives() { - synchronized (fgZipFileCache) { - Iterator iter = fgZipFileCache.values().iterator(); - while (iter.hasNext()) { - ZipFile file = (ZipFile)iter.next(); - synchronized (file) { - try { - file.close(); - } catch (IOException e) { - DebugPlugin.log(e); - } - } - } - fgZipFileCache.clear(); - } - } - - /** - * Called when the debug plug-in shuts down. - */ - public static void shutdown() { - closeArchives(); - if (fgCleaner != null) { - DebugPlugin.getDefault().removeDebugEventListener(fgCleaner); - DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(fgCleaner); - ResourcesPlugin.getWorkspace().removeResourceChangeListener(fgCleaner); - } - } - - /** - * Clears the cache of open zip files when a debug target or process - * terminates, when a launch is removed, or when a project is about - * to be deleted or closed. - */ - static class ArchiveCleaner implements IDebugEventSetListener, ILaunchesListener, IResourceChangeListener { - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - if (event.getKind() == DebugEvent.TERMINATE) { - Object source = event.getSource(); - if (source instanceof IDebugTarget || source instanceof IProcess) { - SourceLookupUtils.closeArchives(); - } - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[]) - */ - public void launchesRemoved(ILaunch[] launches) { - SourceLookupUtils.closeArchives(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[]) - */ - public void launchesAdded(ILaunch[] launches) { - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[]) - */ - public void launchesChanged(ILaunch[] launches) { - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) - */ - public void resourceChanged(IResourceChangeEvent event) { - SourceLookupUtils.closeArchives(); - } - - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourcePathComputer.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourcePathComputer.java deleted file mode 100644 index f861ab451..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourcePathComputer.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.sourcelookup.*; - -/** - * Proxy to contributed source path computer extension. - */ -public class SourcePathComputer implements ISourcePathComputer { - - // lazily instantiated delegate - private ISourcePathComputerDelegate fDelegate = null; - - // extension definition - private IConfigurationElement fElement = null; - - /** - * Constructs a source path computer on the given extension. - * - * @param element extension definition - */ - public SourcePathComputer(IConfigurationElement element) { - fElement = element; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getId() - */ - public String getId() { - return fElement.getAttribute("id"); //$NON-NLS-1$ - } - - /** - * Lazily instantiates and returns the underlying source container type. - * - * @exception CoreException if unable to instantiate - */ - private ISourcePathComputerDelegate getDelegate() throws CoreException { - if (fDelegate == null) { - fDelegate = (ISourcePathComputerDelegate) fElement.createExecutableExtension("class"); //$NON-NLS-1$ - } - return fDelegate; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourcePathComputer#computeSourceContainers(org.eclipse.debug.core.ILaunchConfiguration, org.eclipse.core.runtime.IProgressMonitor) - */ - public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) { - try { - return getDelegate().computeSourceContainers(configuration, monitor); - } catch (CoreException e) { - DebugPlugin.log(e); - } - return new ISourceContainer[0]; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ArchiveSourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ArchiveSourceContainerType.java deleted file mode 100644 index 44ea90586..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ArchiveSourceContainerType.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.ArchiveSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * Archive source container type for archives in the workspace. - * - * @since 3.0 - */ -public class ArchiveSourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerTypeDelegate#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("archive".equals(element.getNodeName())) { //$NON-NLS-1$ - String string = element.getAttribute("path"); //$NON-NLS-1$ - if (string == null || string.length() == 0) { - abort(SourceLookupMessages.getString("ExternalArchiveSourceContainerType.10"), null); //$NON-NLS-1$ - } - String detect = element.getAttribute("detectRoot"); //$NON-NLS-1$ - boolean auto = "true".equals(detect); //$NON-NLS-1$ - IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(string)); - return new ArchiveSourceContainer(file, auto); - } - abort(SourceLookupMessages.getString("ExternalArchiveSourceContainerType.11"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("ExternalArchiveSourceContainerType.12"), null); //$NON-NLS-1$ - return null; - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerTypeDelegate#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - ArchiveSourceContainer archive = (ArchiveSourceContainer) container; - Document document = newDocument(); - Element element = document.createElement("archive"); //$NON-NLS-1$ - element.setAttribute("path", archive.getFile().getFullPath().toString()); //$NON-NLS-1$ - String detectRoot = "false"; //$NON-NLS-1$ - if (archive.isDetectRoot()) { - detectRoot = "true"; //$NON-NLS-1$ - } - element.setAttribute("detectRoot", detectRoot); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ContainerSourceContainer.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ContainerSourceContainer.java deleted file mode 100644 index bc46007eb..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ContainerSourceContainer.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.CompositeSourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.FolderSourceContainer; - -/** - * A container in the workspace. Source elements are searched - * for within this container and optionally nested containers. - * <p> - * Names specified in <code>findSourceElements</code> method can - * be simple or qualified. When a name is qualified, a file will - * be searched for relative to this container, and optionally - * nested containers. - * </p> - * - * @since 3.0 - */ -public abstract class ContainerSourceContainer extends CompositeSourceContainer { - - private IContainer fContainer = null; - private boolean fSubfolders = false; - - /** - * Constructs a source container on the given workspace container. - * - * @param container the container to search for source in - * @param subfolders whether nested folders should be searched - * for source elements - */ - public ContainerSourceContainer(IContainer container, boolean subfolders) { - fContainer = container; - fSubfolders = subfolders; - } - - /** - * Returns the workspace container this source container is - * rooted at. - * - * @return the workspace container this source container is - * rooted at - */ - public IContainer getContainer() { - return fContainer; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#findSourceElements(java.lang.String) - */ - public Object[] findSourceElements(String name) throws CoreException { - ArrayList sources = new ArrayList(); - IContainer container = getContainer(); - IPath path = new Path(name); - IFile file = container.getFile(path); - if (file.exists()) { - sources.add(file); - } - - //check subfolders - if ((isFindDuplicates() && fSubfolders) || (sources.isEmpty() && fSubfolders)) { - ISourceContainer[] containers = getSourceContainers(); - for (int i=0; i < containers.length; i++) { - Object[] objects = containers[i].findSourceElements(name); - if (objects == null || objects.length == 0) { - continue; - } - if (isFindDuplicates()) { - for(int j=0; j < objects.length; j++) - sources.add(objects[j]); - } else { - sources.add(objects[0]); - break; - } - } - } - - if(sources.isEmpty()) - return EMPTY; - return sources.toArray(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() - */ - public String getName() { - return getContainer().getName(); - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (obj != null && obj instanceof ContainerSourceContainer) { - ContainerSourceContainer loc = (ContainerSourceContainer) obj; - return loc.getContainer().equals(getContainer()); - } - return false; - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return getContainer().hashCode(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#isComposite() - */ - public boolean isComposite() { - return fSubfolders; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.containers.CompositeSourceContainer#createSourceContainers() - */ - protected ISourceContainer[] createSourceContainers() throws CoreException { - if(fSubfolders) { - IResource[] resources = getContainer().members(); - List list = new ArrayList(resources.length); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - if (resource.getType() == IResource.FOLDER) { - list.add(new FolderSourceContainer((IFolder)resource, fSubfolders)); - } - } - ISourceContainer[] containers = (ISourceContainer[]) list.toArray(new ISourceContainer[list.size()]); - for (int i = 0; i < containers.length; i++) { - ISourceContainer container = containers[i]; - container.init(getDirector()); - } - return containers; - } - return new ISourceContainer[0]; - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/DefaultSourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/DefaultSourceContainerType.java deleted file mode 100644 index 0be367573..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/DefaultSourceContainerType.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.DefaultSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * A default source lookup path. The default path is computed by a - * source path computer. - * - * @since 3.0 - */ -public class DefaultSourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - Document document = newDocument(); - Element element = document.createElement("default"); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento)throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("default".equals(element.getNodeName())) { //$NON-NLS-1$ - return new DefaultSourceContainer(); - } - abort(SourceLookupMessages.getString("DefaultSourceContainerType.6"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("DefaultSourceContainerType.7"), null); //$NON-NLS-1$ - return null; - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/DirectorySourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/DirectorySourceContainerType.java deleted file mode 100644 index cdee83234..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/DirectorySourceContainerType.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.DirectorySourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * A folder in the local file system. - * - * @since 3.0 - */ -public class DirectorySourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("directory".equals(element.getNodeName())) { //$NON-NLS-1$ - String string = element.getAttribute("path"); //$NON-NLS-1$ - if (string == null || string.length() == 0) { - abort(SourceLookupMessages.getString("DirectorySourceContainerType.10"), null); //$NON-NLS-1$ - } - String nest = element.getAttribute("nest"); //$NON-NLS-1$ - boolean nested = "true".equals(nest); //$NON-NLS-1$ - return new DirectorySourceContainer(new Path(string), nested); - } - abort(SourceLookupMessages.getString("DirectorySourceContainerType.11"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("DirectorySourceContainerType.12"), null); //$NON-NLS-1$ - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - DirectorySourceContainer folder = (DirectorySourceContainer) container; - Document document = newDocument(); - Element element = document.createElement("directory"); //$NON-NLS-1$ - element.setAttribute("path", folder.getDirectory().getAbsolutePath()); //$NON-NLS-1$ - String nest = "false"; //$NON-NLS-1$ - if (folder.isComposite()) { - nest = "true"; //$NON-NLS-1$ - } - element.setAttribute("nest", nest); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } - -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ExternalArchiveSourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ExternalArchiveSourceContainerType.java deleted file mode 100644 index 884d71d39..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ExternalArchiveSourceContainerType.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.ExternalArchiveSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * External archive source container type. - * - * @since 3.0 - */ -public class ExternalArchiveSourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerTypeDelegate#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("archive".equals(element.getNodeName())) { //$NON-NLS-1$ - String string = element.getAttribute("path"); //$NON-NLS-1$ - if (string == null || string.length() == 0) { - abort(SourceLookupMessages.getString("ExternalArchiveSourceContainerType.10"), null); //$NON-NLS-1$ - } - String detect = element.getAttribute("detectRoot"); //$NON-NLS-1$ - boolean auto = "true".equals(detect); //$NON-NLS-1$ - return new ExternalArchiveSourceContainer(string, auto); - } - abort(SourceLookupMessages.getString("ExternalArchiveSourceContainerType.11"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("ExternalArchiveSourceContainerType.12"), null); //$NON-NLS-1$ - return null; - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerTypeDelegate#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - ExternalArchiveSourceContainer archive = (ExternalArchiveSourceContainer) container; - Document document = newDocument(); - Element element = document.createElement("archive"); //$NON-NLS-1$ - element.setAttribute("path", archive.getName()); //$NON-NLS-1$ - String detectRoot = "false"; //$NON-NLS-1$ - if (archive.isDetectRoot()) { - detectRoot = "true"; //$NON-NLS-1$ - } - element.setAttribute("detectRoot", detectRoot); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/FolderSourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/FolderSourceContainerType.java deleted file mode 100644 index e4e425877..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/FolderSourceContainerType.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.FolderSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * A folder in the workspace. - * - * @since 3.0 - */ -public class FolderSourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - FolderSourceContainer folderSourceContainer = (FolderSourceContainer)container; - Document document = newDocument(); - Element element = document.createElement("folder"); //$NON-NLS-1$ - element.setAttribute("path", folderSourceContainer.getContainer().getFullPath().toString()); //$NON-NLS-1$ - String nest = "false"; //$NON-NLS-1$ - if (folderSourceContainer.isComposite()) { - nest = "true"; //$NON-NLS-1$ - } - element.setAttribute("nest", nest); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("folder".equals(element.getNodeName())) { //$NON-NLS-1$ - String string = element.getAttribute("path"); //$NON-NLS-1$ - if (string == null || string.length() == 0) { - abort(SourceLookupMessages.getString("FolderSourceContainerType.10"), null); //$NON-NLS-1$ - } - String nest = element.getAttribute("nest"); //$NON-NLS-1$ - boolean nested = "true".equals(nest); //$NON-NLS-1$ - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - IFolder folder = workspace.getRoot().getFolder(new Path(string)); - // TODO: what if folder does not exist - return new FolderSourceContainer(folder, nested); - } - abort(SourceLookupMessages.getString("FolderSourceContainerType.11"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("FolderSourceContainerType.12"), null); //$NON-NLS-1$ - return null; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ProjectSourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ProjectSourceContainerType.java deleted file mode 100644 index 51d1a9f14..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/ProjectSourceContainerType.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.ProjectSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * The type for creating/restoring a project source container. - * - * @since 3.0 - */ -public class ProjectSourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - ProjectSourceContainer project = (ProjectSourceContainer) container; - Document document = newDocument(); - Element element = document.createElement("project"); //$NON-NLS-1$ - element.setAttribute("name", project.getContainer().getName()); //$NON-NLS-1$ - String referenced = "false"; //$NON-NLS-1$ - if (project.isSearchReferencedProjects()) { - referenced = "true"; //$NON-NLS-1$ - } - element.setAttribute("referencedProjects", referenced); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("project".equals(element.getNodeName())) { //$NON-NLS-1$ - String string = element.getAttribute("name"); //$NON-NLS-1$ - if (string == null || string.length() == 0) { - abort(SourceLookupMessages.getString("ProjectSourceContainerType.10"), null); //$NON-NLS-1$ - } - String nest = element.getAttribute("referencedProjects"); //$NON-NLS-1$ - boolean ref = "true".equals(nest); //$NON-NLS-1$ - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - IProject project = workspace.getRoot().getProject(string); - return new ProjectSourceContainer(project, ref); - } - abort(SourceLookupMessages.getString("ProjectSourceContainerType.11"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("ProjectSourceContainerType.12"), null); //$NON-NLS-1$ - return null; - } -} diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/WorkspaceSourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/WorkspaceSourceContainerType.java deleted file mode 100644 index 053093c1b..000000000 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/containers/WorkspaceSourceContainerType.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.core.sourcelookup.containers; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.sourcelookup.ISourceContainer; -import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainerTypeDelegate; -import org.eclipse.debug.core.sourcelookup.containers.WorkspaceSourceContainer; -import org.eclipse.debug.internal.core.sourcelookup.SourceLookupMessages; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * The type for creating/restoring workspace source containers. - * - * @since 3.0 - */ -public class WorkspaceSourceContainerType extends AbstractSourceContainerTypeDelegate { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerTypeDelegate#createSourceContainer(java.lang.String) - */ - public ISourceContainer createSourceContainer(String memento) throws CoreException { - Node node = parseDocument(memento); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element)node; - if ("workspace".equals(element.getNodeName())) { //$NON-NLS-1$ - return new WorkspaceSourceContainer(); - } - abort(SourceLookupMessages.getString("WorkspaceSourceContainerType.3"), null); //$NON-NLS-1$ - } - abort(SourceLookupMessages.getString("WorkspaceSourceContainerType.4"), null); //$NON-NLS-1$ - return null; - } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerTypeDelegate#getMemento(org.eclipse.debug.internal.core.sourcelookup.ISourceContainer) - */ - public String getMemento(ISourceContainer container) throws CoreException { - Document document = newDocument(); - Element element = document.createElement("workspace"); //$NON-NLS-1$ - document.appendChild(element); - return serializeDocument(document); - } -} |