Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 50933 Details for
Bug 157059
[launching] extensible launch options
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
phase 3
launching_phase3.txt (text/plain), 154.47 KB, created by
Michael Rennie
on 2006-09-26 13:59:41 EDT
(
hide
)
Description:
phase 3
Filename:
MIME Type:
Creator:
Michael Rennie
Created:
2006-09-26 13:59:41 EDT
Size:
154.47 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.launching >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.launching/plugin.xml,v >retrieving revision 1.61 >diff -u -r1.61 plugin.xml >--- plugin.xml 5 Sep 2006 14:06:35 -0000 1.61 >+++ plugin.xml 26 Sep 2006 17:54:08 -0000 >@@ -27,31 +27,22 @@ > <extension > point="org.eclipse.debug.core.launchConfigurationTypes"> > <launchConfigurationType >- delegate="org.eclipse.jdt.launching.JavaLaunchDelegate" > id="org.eclipse.jdt.launching.localJavaApplication" > migrationDelegate="org.eclipse.jdt.internal.launching.JavaMigrationDelegate" >- modes="run, debug" > name="%localJavaApplication" >- sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" >- sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer"> >+ > > </launchConfigurationType> > <launchConfigurationType >- delegate="org.eclipse.jdt.internal.launching.JavaRemoteApplicationLaunchConfigurationDelegate" > id="org.eclipse.jdt.launching.remoteJavaApplication" > migrationDelegate="org.eclipse.jdt.internal.launching.JavaMigrationDelegate" >- modes="debug" > name="%remoteJavaApplication" >- sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" >- sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer"> >+ > > </launchConfigurationType> > <launchConfigurationType >- delegate="org.eclipse.jdt.internal.launching.JavaAppletLaunchConfigurationDelegate" > id="org.eclipse.jdt.launching.javaApplet" > migrationDelegate="org.eclipse.jdt.internal.launching.JavaMigrationDelegate" >- modes="run, debug" > name="%appletLabel" >- sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" >- sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer"> >+ > > </launchConfigurationType> > </extension> > <extension >@@ -189,5 +180,35 @@ > name= "%jreContainerMarkerProblemName"> > <super type="org.eclipse.core.resources.problemmarker"/> > <persistent value="true"/> >+ </extension> >+ <extension >+ point="org.eclipse.debug.core.launchDelegates"> >+ <launchDelegate >+ delegate="org.eclipse.jdt.launching.JavaLaunchDelegate" >+ id="org.eclipse.jdt.launching.localJavaApplicationDelegate" >+ modes="run, debug" >+ name="%localJavaApplication" >+ sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" >+ sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer" >+ type="org.eclipse.jdt.launching.localJavaApplication"> >+ </launchDelegate> >+ <launchDelegate >+ delegate="org.eclipse.jdt.internal.launching.JavaRemoteApplicationLaunchConfigurationDelegate" >+ id="org.eclipse.jdt.launching.remoteJavaApplicationDelegate" >+ modes="debug" >+ name="%remoteJavaApplication" >+ sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" >+ sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer" >+ type="org.eclipse.jdt.launching.remoteJavaApplication"> >+ </launchDelegate> >+ <launchDelegate >+ delegate="org.eclipse.jdt.internal.launching.JavaAppletLaunchConfigurationDelegate" >+ id="org.eclipse.jdt.launching.javaAppletDelegate" >+ modes="run, debug" >+ name="%appletLabel" >+ sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" >+ sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer" >+ type="org.eclipse.jdt.launching.javaApplet"> >+ </launchDelegate> > </extension> > </plugin> >#P org.eclipse.debug.ui >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/plugin.xml,v >retrieving revision 1.376 >diff -u -r1.376 plugin.xml >--- plugin.xml 25 Sep 2006 14:45:45 -0000 1.376 >+++ plugin.xml 26 Sep 2006 17:54:09 -0000 >@@ -18,6 +18,7 @@ > <extension-point id="memoryRenderings" name="%memoryRenderingsExtensionPointName" schema="schema/memoryRenderings.exsd"/> > <extension-point id="breakpointOrganizers" name="%BreakpointOrganizersName" schema="schema/breakpointOrganizers.exsd"/> > <extension-point id="variableValueEditors" name="%VariableValueEditorsName" schema="schema/variableValueEditors.exsd"/> >+ <extension-point id="launchConfigurationTabs" name="%LaunchConfigurationTabsExtension.name" schema="schema/launchConfigurationTabs.exsd"/> > > <!-- Extensions --> > <extension >Index: plugin.properties >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/plugin.properties,v >retrieving revision 1.219 >diff -u -r1.219 plugin.properties >--- plugin.properties 1 Aug 2006 17:37:21 -0000 1.219 >+++ plugin.properties 26 Sep 2006 17:54:09 -0000 >@@ -43,6 +43,8 @@ > DebugLaunchGroup.title=Select or configure an application to debug > DebugModelPresentationExtensionName=Debug Model Presentation > >+LaunchConfigurationTabsExtension.name=Launch Configuration Tabs >+ > DebugPerspective.name=Debug > DebugPerspective.description=This Debug perspective is designed to support application debugging. It incorporates views for displaying the debug stack, variables and breakpoint management. > >Index: ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupExtension.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupExtension.java,v >retrieving revision 1.17 >diff -u -r1.17 LaunchConfigurationTabGroupExtension.java >--- ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupExtension.java 18 Mar 2005 19:45:27 -0000 1.17 >+++ ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupExtension.java 26 Sep 2006 17:54:10 -0000 >@@ -18,6 +18,7 @@ > > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.debug.internal.core.ConfigurationElementConstants; > import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; > > >@@ -84,15 +85,18 @@ > */ > protected Set getModes() { > if (fModes == null) { >- IConfigurationElement[] modes= getConfigurationElement().getChildren("launchMode"); //$NON-NLS-1$ >+ IConfigurationElement[] modes= getConfigurationElement().getChildren(ConfigurationElementConstants.LAUNCH_MODE); > if (modes.length > 0) { > fModes = new HashSet(modes.length); > fPerspectives = new Hashtable(modes.length); >+ IConfigurationElement element = null; >+ String perspective = null; >+ String mode = null; > for (int i = 0; i < modes.length; i++) { >- IConfigurationElement element = modes[i]; >- String mode = element.getAttribute("mode"); //$NON-NLS-1$ >+ element = modes[i]; >+ mode = element.getAttribute(ConfigurationElementConstants.MODE); > fModes.add(mode); >- String perspective = element.getAttribute("perspective"); //$NON-NLS-1$ >+ perspective = element.getAttribute(ConfigurationElementConstants.PERSPECTIVE); > if (perspective != null) { > fPerspectives.put(mode, perspective); > } >@@ -127,7 +131,7 @@ > * tab group is associated with > */ > protected String getTypeIdentifier() { >- return getConfigurationElement().getAttribute("type"); //$NON-NLS-1$ >+ return getConfigurationElement().getAttribute(ConfigurationElementConstants.TYPE); > } > > /** >@@ -139,7 +143,17 @@ > * @since 2.1 > */ > protected String getHelpContextId() { >- return getConfigurationElement().getAttribute("helpContextId"); //$NON-NLS-1$ >+ return getConfigurationElement().getAttribute(ConfigurationElementConstants.HELP_CONTEXT_ID); >+ } >+ >+ /** >+ * Returns the identifier of the tab group >+ * @return the id of the tab group >+ * >+ * @since 3.3 >+ */ >+ protected String getIdentifier() { >+ return getConfigurationElement().getAttribute(ConfigurationElementConstants.ID); > } > > /** >@@ -150,7 +164,7 @@ > * the tab group > */ > public ILaunchConfigurationTabGroup newTabGroup() throws CoreException { >- return (ILaunchConfigurationTabGroup)getConfigurationElement().createExecutableExtension("class"); //$NON-NLS-1$ >+ return (ILaunchConfigurationTabGroup)getConfigurationElement().createExecutableExtension(ConfigurationElementConstants.CLASS); > } > > /** >@@ -163,17 +177,18 @@ > public String getDescription(String mode) { > String description = null; > >- IConfigurationElement[] children = fConfig.getChildren("launchMode"); //$NON-NLS-1$ >+ IConfigurationElement[] children = fConfig.getChildren(ConfigurationElementConstants.LAUNCH_MODE); > if (children!= null && children.length != 0) { >+ IConfigurationElement child = null; > for (int i=0; i<children.length; i++) { >- IConfigurationElement child = children[i]; >+ child = children[i]; > if (child.getAttribute("mode").equals(mode)) { //$NON-NLS-1$ >- description = child.getAttribute("description"); //$NON-NLS-1$ >+ description = child.getAttribute(ConfigurationElementConstants.DESCRIPTION); > } > } > } > if (description == null){ >- description = fConfig.getAttribute("description"); //$NON-NLS-1$ >+ description = fConfig.getAttribute(ConfigurationElementConstants.DESCRIPTION); > } > > if (description == null) >Index: ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationPresentationManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationPresentationManager.java,v >retrieving revision 1.34 >diff -u -r1.34 LaunchConfigurationPresentationManager.java >--- ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationPresentationManager.java 22 Sep 2006 15:57:13 -0000 1.34 >+++ ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationPresentationManager.java 26 Sep 2006 17:54:10 -0000 >@@ -11,6 +11,7 @@ > package org.eclipse.debug.internal.ui.launchConfigurations; > > >+import java.util.ArrayList; > import java.util.Hashtable; > import java.util.Iterator; > import java.util.Map; >@@ -22,10 +23,12 @@ > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Platform; > import org.eclipse.core.runtime.Status; >-import org.eclipse.debug.core.DebugPlugin; > import org.eclipse.debug.core.ILaunchConfigurationType; >+import org.eclipse.debug.internal.core.ConfigurationElementConstants; > import org.eclipse.debug.internal.ui.DebugUIPlugin; >+import org.eclipse.debug.internal.ui.LaunchConfigurationTabExtension; > import org.eclipse.debug.ui.IDebugUIConstants; >+import org.eclipse.debug.ui.ILaunchConfigurationTab; > import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; > > import com.ibm.icu.text.MessageFormat; >@@ -49,6 +52,16 @@ > * used to represent the default tab group (i.e. unspecified mode). > */ > private Hashtable fTabGroupExtensions; >+ >+ /** >+ * contributed tabs are stored by the tab group id that they contribute to. >+ * each entry is a futher <code>Hashtable</code> consisting of the corrseponding >+ * <code>LaunchConfigurationTabExtension</code> objects for each contributed tab stored by their >+ * id >+ * >+ * @since 3.3 >+ */ >+ private Hashtable fContributedTabs; > > /** > * Constructs the singleton launch configuration presentation >@@ -57,6 +70,7 @@ > private LaunchConfigurationPresentationManager() { > fgDefault = this; > initializeTabGroupExtensions(); >+ initializeContributedTabExtensions(); > } > > /** >@@ -75,52 +89,69 @@ > */ > private void initializeTabGroupExtensions() { > fTabGroupExtensions = new Hashtable(); >- IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_LAUNCH_CONFIGURATION_TAB_GROUPS); >+ IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_LAUNCH_CONFIGURATION_TAB_GROUPS); > IConfigurationElement[] groups = extensionPoint.getConfigurationElements(); >+ LaunchConfigurationTabGroupExtension group = null; >+ String typeId = null; >+ Map map = null; >+ Set modes = null; > for (int i = 0; i < groups.length; i++) { >- LaunchConfigurationTabGroupExtension group = new LaunchConfigurationTabGroupExtension(groups[i]); >- String typeId = group.getTypeIdentifier(); >- if (typeId == null) { >- IStatus status = new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.STATUS_INVALID_EXTENSION_DEFINITION, >- MessageFormat.format("Launch configuration tab group extension {0} does not specify launch configuration type.", (new String[] {groups[i].getAttribute("id")})), null); //$NON-NLS-1$ //$NON-NLS-2$ >- DebugUIPlugin.log(status); >- } else { >- // verify it references a valid launch configuration type >- ILaunchConfigurationType lct = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(typeId); >- if (lct == null) { >- IStatus status = new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.STATUS_INVALID_EXTENSION_DEFINITION, >- MessageFormat.format("Launch configuration tab group extension {0} refers to non-existent launch configuration type {1}.", (new String[] {groups[i].getAttribute("id"), typeId})), null); //$NON-NLS-1$ //$NON-NLS-2$ >- DebugUIPlugin.log(status); >- } >+ group = new LaunchConfigurationTabGroupExtension(groups[i]); >+ typeId = group.getTypeIdentifier(); >+ map = (Map)fTabGroupExtensions.get(typeId); >+ if (map == null) { >+ map = new Hashtable(); >+ fTabGroupExtensions.put(typeId, map); > } >- if (typeId != null) { >- // get the map for the config type >- Map map = (Map)fTabGroupExtensions.get(typeId); >- if (map == null) { >- map = new Hashtable(); >- fTabGroupExtensions.put(typeId, map); >- } >- Set modes = group.getModes(); >- if (modes == null) { >- // default tabs - store with "*" >- map.put("*", group); //$NON-NLS-1$ >- } else { >- // store per mode >- Iterator iterator = modes.iterator(); >- while (iterator.hasNext()) { >- map.put(iterator.next(), group); >- } >+ modes = group.getModes(); >+ if (modes == null) { >+ // default tabs - store with "*" >+ map.put("*", group); //$NON-NLS-1$ >+ } else { >+ // store per mode >+ Iterator iterator = modes.iterator(); >+ while (iterator.hasNext()) { >+ map.put(iterator.next(), group); > } > } > } > } > > /** >+ * This method is used to collect all of the contributed tabs defined by the <code>launchConfigurationTabs</code> >+ * extension point >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ private void initializeContributedTabExtensions() { >+ fContributedTabs = new Hashtable(); >+ IExtensionPoint epoint = Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_CONTRIBUTED_LAUNCH_TABS); >+ IConfigurationElement[] elements = epoint.getConfigurationElements(); >+ LaunchConfigurationTabExtension tab = null; >+ Hashtable element = null; >+ for(int i = 0; i < elements.length; i++) { >+ tab = new LaunchConfigurationTabExtension(elements[i]); >+ element = (Hashtable) fContributedTabs.get(tab.getTabGroupId()); >+ if(element == null) { >+ element = new Hashtable(); >+ element.put(tab.getIdentifier(), tab); >+ fContributedTabs.put(tab.getTabGroupId(), element); >+ } >+ element.put(tab.getIdentifier(), tab); >+ } >+ } >+ >+ /** > * Returns the tab group for the given launch configuration type and mode. > * > * @param type launch configuration type > * @param mode launch mode >- * @return the tab group for the given type of launch configuration >+ * @return the tab group for the given type of launch configuration, or <code>null</code> if none > * @exception CoreException if an exception occurs creating the group > */ > public ILaunchConfigurationTabGroup getTabGroup(ILaunchConfigurationType type, String mode) throws CoreException { >@@ -130,7 +161,37 @@ > MessageFormat.format(LaunchConfigurationsMessages.LaunchConfigurationPresentationManager_No_tab_group_defined_for_launch_configuration_type__0__3, (new String[] {type.getIdentifier()})), null); > throw new CoreException(status); > } >- return ext.newTabGroup(); >+ return new LaunchConfigurationTabGroupWrapper(ext.newTabGroup(), ext.getIdentifier()); >+ } >+ >+ /** >+ * Returns the listing of <code>ILaunchConfigurationTab</code>s for the specified <code>ILaunchConfigurationTabGroup</code>. >+ * If no tabs are found for the specified id an empty array is returned, never <code>null</code> >+ * @param groupid >+ * @return the <code>ILaunchConfigurationTab</code>s for the specified <code>ILaunchConfigurationTabGroup</code> id, >+ * or an empty array if none are found >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ public ILaunchConfigurationTab[] createContributedTabs(String groupid) { >+ Hashtable tabs = (Hashtable) fContributedTabs.get(groupid); >+ ArrayList list = new ArrayList(); >+ if(tabs != null) { >+ LaunchConfigurationTabExtension ext = null; >+ for(Iterator iter = tabs.keySet().iterator(); iter.hasNext();) { >+ ext = (LaunchConfigurationTabExtension) tabs.get(iter.next()); >+ if(ext != null) { >+ list.add(ext.getTab()); >+ } >+ } >+ } >+ return (ILaunchConfigurationTab[]) list.toArray(new ILaunchConfigurationTab[list.size()]); > } > > /** >@@ -187,7 +248,7 @@ > */ > public String getDescription(ILaunchConfigurationType configType, String mode) { > LaunchConfigurationPresentationManager manager = LaunchConfigurationPresentationManager.getDefault(); >- LaunchConfigurationTabGroupExtension extension = manager.getExtension(configType.getAttribute("id"), mode); //$NON-NLS-1$ >+ LaunchConfigurationTabGroupExtension extension = manager.getExtension(configType.getAttribute(ConfigurationElementConstants.ID), mode); > return (extension != null ? extension.getDescription(mode) : null); > } > >Index: ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java,v >retrieving revision 1.275 >diff -u -r1.275 DebugUIPlugin.java >--- ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java 8 May 2006 20:07:20 -0000 1.275 >+++ ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java 26 Sep 2006 17:54:10 -0000 >@@ -1037,6 +1037,26 @@ > } > > /** >+ * Returns an image descriptor for the icon referenced by the given path >+ * and contributor name, or <code>null</code> if none. >+ * >+ * @param name the name of the contributor >+ * @param path the path of the icon (from the configuration element) >+ * @return image descriptor or <code>null</code> >+ * @since 3.3 >+ */ >+ public static ImageDescriptor getImageDescriptor(String name, String path) { >+ Bundle bundle = Platform.getBundle(name); >+ if (path != null) { >+ URL iconURL = FileLocator.find(bundle , new Path(path), null); >+ if (iconURL != null) { >+ return ImageDescriptor.createFromURL(iconURL); >+ } >+ } >+ return null; >+ } >+ >+ /** > * Performs extra filtering for launch configurations based on the prefs set on the > * Launch Configurations page > * @param config the config to filter >Index: ui/org/eclipse/debug/internal/ui/DebugPluginImages.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugPluginImages.java,v >retrieving revision 1.94 >diff -u -r1.94 DebugPluginImages.java >--- ui/org/eclipse/debug/internal/ui/DebugPluginImages.java 9 Jun 2006 13:40:02 -0000 1.94 >+++ ui/org/eclipse/debug/internal/ui/DebugPluginImages.java 26 Sep 2006 17:54:09 -0000 >@@ -14,12 +14,17 @@ > > > import java.net.URL; >+import java.util.HashSet; >+import java.util.Set; > > import org.eclipse.core.runtime.FileLocator; > import org.eclipse.core.runtime.IConfigurationElement; > import org.eclipse.core.runtime.IExtensionPoint; > import org.eclipse.core.runtime.Path; > import org.eclipse.core.runtime.Platform; >+import org.eclipse.debug.core.DebugPlugin; >+import org.eclipse.debug.core.ILaunchConfigurationType; >+import org.eclipse.debug.internal.core.ConfigurationElementConstants; > import org.eclipse.debug.ui.IDebugUIConstants; > import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.jface.resource.ImageRegistry; >@@ -230,20 +235,37 @@ > declareRegistryImage(IInternalDebugUIConstants.IMG_EDIT_SRC_DIR_WIZ, WIZBAN + "editdir_wiz.png"); //$NON-NLS-1$ > > // launch configuration types >- IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_LAUNCH_CONFIGURATION_TYPE_IMAGES); >- IConfigurationElement[] configElements= extensionPoint.getConfigurationElements(); >- for (int i = 0; i < configElements.length; i++) { >- IConfigurationElement configElement = configElements[i]; >- ImageDescriptor descriptor = DebugUIPlugin.getImageDescriptor(configElement, ATTR_LAUNCH_CONFIG_TYPE_ICON); >- if (descriptor == null) { >- descriptor = ImageDescriptor.getMissingImageDescriptor(); >+ //try to get the images from the config types themselves, cache those that could not be found >+ ILaunchConfigurationType[] types = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationTypes(); >+ String path = null; >+ Set missing = new HashSet(); >+ ImageDescriptor descriptor = null; >+ for (int i = 0; i < types.length; i++) { >+ path = types[i].getImageDescriptorPath(); >+ if(path == null) { >+ missing.add(types[i].getIdentifier()); >+ } >+ else { >+ descriptor = DebugUIPlugin.getImageDescriptor(types[i].getContributorName(), path); >+ imageRegistry.put(types[i].getIdentifier(), (descriptor == null ? ImageDescriptor.getMissingImageDescriptor() : descriptor)); >+ } >+ } >+ if(missing.size() > 0) { >+ //if we are missing some images try to find them in the deprecated extension point >+ IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugUIPlugin.getUniqueIdentifier(), IDebugUIConstants.EXTENSION_POINT_LAUNCH_CONFIGURATION_TYPE_IMAGES); >+ IConfigurationElement[] configElements = extensionPoint.getConfigurationElements(); >+ String configTypeID = null; >+ for (int i = 0; i < configElements.length; i++) { >+ configTypeID = configElements[i].getAttribute(ATTR_LAUNCH_CONFIG_TYPE_ID); >+ if (configTypeID == null) { >+ // bug 12652 >+ configTypeID = configElements[i].getAttribute(ConfigurationElementConstants.TYPE); >+ } >+ if(missing.contains(configTypeID)) { >+ descriptor = DebugUIPlugin.getImageDescriptor(configElements[i], ATTR_LAUNCH_CONFIG_TYPE_ICON); >+ imageRegistry.put(configTypeID, (descriptor == null ? ImageDescriptor.getMissingImageDescriptor() : descriptor)); >+ } > } >- String configTypeID = configElement.getAttribute(ATTR_LAUNCH_CONFIG_TYPE_ID); >- if (configTypeID == null) { >- // bug 12652 >- configTypeID = configElement.getAttribute("type"); //$NON-NLS-1$ >- } >- imageRegistry.put(configTypeID, descriptor); > } > } > >Index: ui/org/eclipse/debug/internal/ui/actions/breakpoints/ToggleBreakpointObjectActionDelegate.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/ToggleBreakpointObjectActionDelegate.java,v >retrieving revision 1.1 >diff -u -r1.1 ToggleBreakpointObjectActionDelegate.java >--- ui/org/eclipse/debug/internal/ui/actions/breakpoints/ToggleBreakpointObjectActionDelegate.java 23 Nov 2005 21:46:48 -0000 1.1 >+++ ui/org/eclipse/debug/internal/ui/actions/breakpoints/ToggleBreakpointObjectActionDelegate.java 26 Sep 2006 17:54:10 -0000 >@@ -27,12 +27,9 @@ > /** > * A toggle breakpoint action that can be contributed to an object. The action > * will perform a toggle breakpoint operation for a selected object. >- * <p> >- * EXPERIMENTAL >- * </p> >- * <p> >- * Clients may subclass this class. >- * </p> >+ * >+ * <p>Clients may subclass this class.</p> >+ * > * @since 3.0 > */ > public abstract class ToggleBreakpointObjectActionDelegate implements IObjectActionDelegate, IActionDelegate2 { >Index: ui/org/eclipse/debug/ui/IDebugUIConstants.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java,v >retrieving revision 1.166 >diff -u -r1.166 IDebugUIConstants.java >--- ui/org/eclipse/debug/ui/IDebugUIConstants.java 5 Jul 2006 19:27:42 -0000 1.166 >+++ ui/org/eclipse/debug/ui/IDebugUIConstants.java 26 Sep 2006 17:54:10 -0000 >@@ -927,6 +927,20 @@ > public static final String EXTENSION_POINT_LAUNCH_CONFIGURATION_TAB_GROUPS= "launchConfigurationTabGroups"; //$NON-NLS-1$ > > /** >+ * Contributed Launch Configuration Tab extension point indentifier >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This constant has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * >+ * @since 3.3 >+ */ >+ public static final String EXTENSION_POINT_CONTRIBUTED_LAUNCH_TABS = "launchConfigurationTabs"; //$NON-NLS-1$ >+ >+ /** > * Launch shortcuts extension point identifier > * (value <code>"launchShortcuts"</code>). > * >Index: schema/launchConfigurationTypeImages.exsd >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/schema/launchConfigurationTypeImages.exsd,v >retrieving revision 1.6 >diff -u -r1.6 launchConfigurationTypeImages.exsd >--- schema/launchConfigurationTypeImages.exsd 20 Apr 2005 15:30:45 -0000 1.6 >+++ schema/launchConfigurationTypeImages.exsd 26 Sep 2006 17:54:09 -0000 >@@ -2,15 +2,30 @@ > <!-- Schema file written by PDE --> > <schema targetNamespace="org.eclipse.debug.ui"> > <annotation> >- <appInfo> >- <meta.schema plugin="org.eclipse.debug.ui" id="launchConfigurationTypeImages" name="Launch Configuration Type Images"/> >- </appInfo> >- <documentation> >- This extension point provides a way to associate an image with a launch configuration type. >- </documentation> >-</annotation> >+ <appInfo> >+ <meta.schema plugin="org.eclipse.debug.ui" id="launchConfigurationTypeImages" name="Launch Configuration Type Images"/> >+ </appInfo> >+ <documentation> >+ This extension point provides a way to associate an image with a launch configuration type. >+ >+<p> >+<strong>EXPERIMENTAL</strong>. This extension point has been deprecated as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team. >+</p> >+ </documentation> >+ </annotation> > > <element name="extension"> >+ <annotation> >+ <appInfo> >+ <meta.element deprecated="true"/> >+ </appInfo> >+ <documentation> >+ <p>In 3.3, the image for a launch configuration type should be provided via the icon attribute in the <code>launchConfigurationTypes</code> extension point.</p> >+ </documentation> >+ </annotation> > <complexType> > <sequence> > <element ref="launchConfigurationTypeImage" minOccurs="0" maxOccurs="unbounded"/> >@@ -22,24 +37,15 @@ > </documentation> > </annotation> > </attribute> >- <attribute name="id" type="string"> >- <annotation> >- <documentation> >- an optional identifier of the extension instance >- </documentation> >- </annotation> >- </attribute> >- <attribute name="name" type="string"> >- <annotation> >- <documentation> >- an optional name of the extension instance >- </documentation> >- </annotation> >- </attribute> > </complexType> > </element> > > <element name="launchConfigurationTypeImage"> >+ <annotation> >+ <documentation> >+ <p>In 3.3, if possible, the image for a launch configuration type should be moved to the launch configuration type extension contribution</p> >+ </documentation> >+ </annotation> > <complexType> > <attribute name="id" type="string" use="required"> > <annotation> >@@ -51,7 +57,7 @@ > <attribute name="configTypeID" type="string" use="required"> > <annotation> > <documentation> >- specifies the fully qualified ID of a launch configuration type.(in 2.1, this attribute can also be specified using the "type" attribute, to be consistent with the launchConfigurationTabGroups extension point). >+ specifies the fully qualified ID of a launch configuration type.(in 2.1, this attribute can also be specified using the "type" attribute, to be consistent with the launchConfigurationTabGroups extension point). > </documentation> > </annotation> > </attribute> >@@ -59,6 +65,8 @@ > <annotation> > <documentation> > specifies the plugin-relative path of an image file. >+ >+<br><b>To supply an image to the specified launch configuration type, it should be done in the launch configuration type definition.</b> > </documentation> > <appInfo> > <meta.attribute kind="resource"/> >@@ -77,24 +85,24 @@ > > <p> > <pre> >- <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages"> >- <launchConfigurationTypeImage >- id="com.example.FirstLaunchConfigurationTypeImage" >- configTypeID="com.example.FirstLaunchConfigurationType" >- icon="icons/FirstLaunchConfigurationType.gif"> >- </launchConfigurationTypeImage> >- </extension> >+ <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages"> >+ <launchConfigurationTypeImage >+ id="com.example.FirstLaunchConfigurationTypeImage" >+ configTypeID="com.example.FirstLaunchConfigurationType" >+ icon="icons/FirstLaunchConfigurationType.gif"> >+ </launchConfigurationTypeImage> >+ </extension> > </pre> > </p> > </documentation> > </annotation> >- >+ > <annotation> > <appInfo> > <meta.section type="copyright"/> > </appInfo> > <documentation> >-Copyright (c) 2000, 2005 IBM Corporation and others.<br> >+ Copyright (c) 2000, 2005 IBM Corporation and others.<br> > All rights reserved. This program and the accompanying materials are made > available under the terms of the Eclipse Public License v1.0 which > accompanies this distribution, and is available at >Index: ui/org/eclipse/debug/internal/ui/LaunchConfigurationTabExtension.java >=================================================================== >RCS file: ui/org/eclipse/debug/internal/ui/LaunchConfigurationTabExtension.java >diff -N ui/org/eclipse/debug/internal/ui/LaunchConfigurationTabExtension.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ ui/org/eclipse/debug/internal/ui/LaunchConfigurationTabExtension.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,79 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.internal.ui; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.debug.internal.core.ConfigurationElementConstants; >+import org.eclipse.debug.ui.ILaunchConfigurationTabExtension; >+import org.eclipse.debug.ui.ILaunchConfigurationTab; >+ >+/** >+ * Provides a proxy to a launchConfigurationTabs extension point >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+public class LaunchConfigurationTabExtension implements ILaunchConfigurationTabExtension { >+ >+ /** >+ * The configuration element backing this proxy >+ */ >+ IConfigurationElement fElement = null; >+ >+ /** >+ * Constructor >+ * @param element the <code>IConfigurationElement</code> for this proxy >+ */ >+ public LaunchConfigurationTabExtension(IConfigurationElement element) { >+ fElement = element; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.ui.IContributedLaunchConfigurationTab#getIdentifier() >+ */ >+ public String getIdentifier() { >+ return fElement.getAttribute(ConfigurationElementConstants.ID); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.ui.IContributedLaunchConfigurationTab#getName() >+ */ >+ public String getName() { >+ return fElement.getAttribute(ConfigurationElementConstants.NAME); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.ui.IContributedLaunchConfigurationTab#getTab() >+ */ >+ public ILaunchConfigurationTab getTab() { >+ try { >+ Object object = fElement.createExecutableExtension(ConfigurationElementConstants.CLASS); >+ if(object instanceof ILaunchConfigurationTab) { >+ return (ILaunchConfigurationTab) object; >+ } >+ } catch (CoreException e) {DebugUIPlugin.log(e);} >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.ui.IContributedLaunchConfigurationTab#getTabGroupId() >+ */ >+ public String getTabGroupId() { >+ return fElement.getAttribute(ConfigurationElementConstants.GROUP); >+ } >+ >+} >Index: ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupWrapper.java >=================================================================== >RCS file: ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupWrapper.java >diff -N ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupWrapper.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupWrapper.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,128 @@ >+package org.eclipse.debug.internal.ui.launchConfigurations; >+ >+import org.eclipse.debug.core.ILaunch; >+import org.eclipse.debug.core.ILaunchConfiguration; >+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; >+import org.eclipse.debug.ui.ILaunchConfigurationDialog; >+import org.eclipse.debug.ui.ILaunchConfigurationTab; >+import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; >+ >+/** >+ * This class is used to wrap a contributed <code>ILaunchConfigurationTabGroup</code> with any contributed tabs >+ * for that group (from a <code>launchConfigurationTabs</code> extension point). >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This class has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+public class LaunchConfigurationTabGroupWrapper implements ILaunchConfigurationTabGroup { >+ >+ private ILaunchConfigurationTabGroup fGroup = null; >+ private String fGroupId = null; >+ private ILaunchConfigurationTab[] fContributedTabs = null; >+ >+ /** >+ * Constructor >+ * @param group the existing group to wrapper >+ */ >+ public LaunchConfigurationTabGroupWrapper(ILaunchConfigurationTabGroup group, String groupId) { >+ fGroup = group; >+ fGroupId = groupId; >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#createTabs(org.eclipse.debug.ui.ILaunchConfigurationDialog, java.lang.String) >+ */ >+ public void createTabs(ILaunchConfigurationDialog dialog, String mode) { >+ if(fGroup != null) { >+ fGroup.createTabs(dialog, mode); >+ } >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#dispose() >+ */ >+ public void dispose() { >+ if(fGroup != null) { >+ fGroup.dispose(); >+ } >+ if(fContributedTabs != null) { >+ for(int i = 0; i < fContributedTabs.length; i++) { >+ fContributedTabs[i].dispose(); >+ } >+ } >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#getTabs() >+ */ >+ public ILaunchConfigurationTab[] getTabs() { >+ if(fContributedTabs == null) { >+ fContributedTabs = LaunchConfigurationPresentationManager.getDefault().createContributedTabs(fGroupId); >+ } >+ ILaunchConfigurationTab[] grouptabs = fGroup.getTabs(); >+ ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[grouptabs.length + fContributedTabs.length]; >+ System.arraycopy(grouptabs, 0, tabs, 0, grouptabs.length); >+ System.arraycopy(fContributedTabs, 0, tabs, grouptabs.length, fContributedTabs.length); >+ return tabs; >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) >+ */ >+ public void initializeFrom(ILaunchConfiguration configuration) { >+ if(fGroup != null) { >+ fGroup.initializeFrom(configuration); >+ } >+ if(fContributedTabs == null) { >+ getTabs(); >+ } >+ for(int i = 0; i < fContributedTabs.length; i++) { >+ fContributedTabs[i].initializeFrom(configuration); >+ } >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#launched(org.eclipse.debug.core.ILaunch) >+ */ >+ public void launched(ILaunch launch) { >+ if(fGroup != null) { >+ fGroup.launched(launch); >+ } >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) >+ */ >+ public void performApply(ILaunchConfigurationWorkingCopy configuration) { >+ if(fGroup != null) { >+ fGroup.performApply(configuration); >+ if(fContributedTabs == null) { >+ getTabs(); >+ } >+ for(int i = 0; i < fContributedTabs.length; i++) { >+ fContributedTabs[i].performApply(configuration); >+ } >+ } >+ } >+ >+ /** >+ * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) >+ */ >+ public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { >+ if(fGroup != null) { >+ fGroup.setDefaults(configuration); >+ if(fContributedTabs == null) { >+ getTabs(); >+ } >+ for(int i = 0; i < fContributedTabs.length; i++) { >+ fContributedTabs[i].setDefaults(configuration); >+ } >+ } >+ } >+ >+} >Index: ui/org/eclipse/debug/ui/ILaunchConfigurationTabExtension.java >=================================================================== >RCS file: ui/org/eclipse/debug/ui/ILaunchConfigurationTabExtension.java >diff -N ui/org/eclipse/debug/ui/ILaunchConfigurationTabExtension.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ ui/org/eclipse/debug/ui/ILaunchConfigurationTabExtension.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,50 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.ui; >+ >+/** >+ * Describes a contributed launch configuration tab >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+public interface ILaunchConfigurationTabExtension { >+ >+ /** >+ * Returns the human readable name for the tab, not to be confused with the name that appears on the tab itself >+ * @return the name of the tab >+ */ >+ public String getName(); >+ >+ /** >+ * Returns the unique id ofthe tab >+ * @return the unique id of the tab >+ */ >+ public String getIdentifier(); >+ >+ /** >+ * Returns the unique id of the <code>ILaunchConfigurationTabGroup</code> that this tab contributes to >+ * @return the id of the <code>ILaunchConfigurationTabGroup</code> this tab conributes to >+ */ >+ public String getTabGroupId(); >+ >+ /** >+ * Returns the instantiated class of this tab >+ * @return the instantiated class of this tab >+ */ >+ public ILaunchConfigurationTab getTab(); >+ >+} >Index: schema/launchConfigurationTabs.exsd >=================================================================== >RCS file: schema/launchConfigurationTabs.exsd >diff -N schema/launchConfigurationTabs.exsd >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ schema/launchConfigurationTabs.exsd 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,137 @@ >+<?xml version='1.0' encoding='UTF-8'?> >+<!-- Schema file written by PDE --> >+<schema targetNamespace="org.eclipse.debug.ui"> >+<annotation> >+ <appInfo> >+ <meta.schema plugin="org.eclipse.debug.ui" id="launchConfigurationTabs" name="Launch Configuration Tabs"/> >+ </appInfo> >+ <documentation> >+ This extension point is used to allow developers to contribute launch configuration tabs (one or more) to an existing launch configuration tab group. >+ >+ >+<p><strong>EXPERIMENTAL</strong>. This method has been added as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team.</p> >+ </documentation> >+ </annotation> >+ >+ <element name="extension"> >+ <complexType> >+ <sequence minOccurs="1" maxOccurs="unbounded"> >+ <element ref="tab"/> >+ </sequence> >+ <attribute name="point" type="string" use="required"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <element name="tab"> >+ <annotation> >+ <documentation> >+ describes an individual launch configuration tab contribution >+ </documentation> >+ </annotation> >+ <complexType> >+ <attribute name="id" type="string" use="required"> >+ <annotation> >+ <documentation> >+ the unique id of this contributed tab >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="group" type="string" use="required"> >+ <annotation> >+ <documentation> >+ the string id of the <code>ILaunchConfigurationTabGroup</code> that this tab should be contributed to >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="name" type="string" use="required"> >+ <annotation> >+ <documentation> >+ a human readable name for this tab. the prvided name does not have to be the name that you wish to appear on the tab itself. But it should sufficiently describe your tab. >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="class" type="string" use="required"> >+ <annotation> >+ <documentation> >+ the implementation of your tab >+ </documentation> >+ <appInfo> >+ <meta.attribute kind="java" basedOn="org.eclipse.debug.ui.ILaunchConfigurationTab"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="since"/> >+ </appInfo> >+ <documentation> >+ Eclipse 3.3 M3 >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="examples"/> >+ </appInfo> >+ <documentation> >+ The following example adds the tab "FooTab" to the local java application launch tab group. >+ >+<p> >+<pre> >+<extension point="org.eclipse.debug.ui.launchConfigurationTabs"> >+ <tab >+ class="org.eclipse.jdt.debug.ui.launchConfigurations.FooTab" >+ group="org.eclipse.jdt.debug.ui.launchConfigurationTabGroup.localJavaApplication" >+ id="org.eclipse.jdt.debug.ui.fooTab" >+ name="Foo Tab"> >+ </tab> >+ </extension> >+</pre> >+</p> >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="apiInfo"/> >+ </appInfo> >+ <documentation> >+ [Enter API information here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="implementation"/> >+ </appInfo> >+ <documentation> >+ [Enter information about supplied implementation of this extension point.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="copyright"/> >+ </appInfo> >+ <documentation> >+ Copyright (c) 2006 IBM Corporation and others.<br> >+All rights reserved. This program and the accompanying materials are made >+available under the terms of the Eclipse Public License v1.0 which >+accompanies this distribution, and is available at >+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> >+ </documentation> >+ </annotation> >+ >+</schema> >#P org.eclipse.debug.core >Index: core/org/eclipse/debug/core/ILaunchManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchManager.java,v >retrieving revision 1.60 >diff -u -r1.60 ILaunchManager.java >--- core/org/eclipse/debug/core/ILaunchManager.java 15 Sep 2006 02:33:50 -0000 1.60 >+++ core/org/eclipse/debug/core/ILaunchManager.java 26 Sep 2006 17:54:12 -0000 >@@ -16,6 +16,7 @@ > 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.ILaunchConfigurationDelegate; > import org.eclipse.debug.core.model.IPersistableSourceLocator; > import org.eclipse.debug.core.model.IProcess; > import org.eclipse.debug.core.sourcelookup.ISourceContainerType; >@@ -229,7 +230,7 @@ > * @param optionId the unique id of the launch option > * @return the lauch option associated with ther specified id or <code>null</code> if not found > * <p> >- * <strong>EXPERIMENTAL</strong>. This ,method has been added as >+ * <strong>EXPERIMENTAL</strong>. This method has been added as > * part of a work in progress. There is no guarantee that this API will > * remain unchanged during the 3.3 release cycle. Please do not use this API > * without consulting with the Platform/Debug team. >@@ -242,7 +243,7 @@ > * Returns all registered launch options > * @return all registered launch options > * <p> >- * <strong>EXPERIMENTAL</strong>. This ,method has been added as >+ * <strong>EXPERIMENTAL</strong>. This method has been added as > * part of a work in progress. There is no guarantee that this API will > * remain unchanged during the 3.3 release cycle. Please do not use this API > * without consulting with the Platform/Debug team. >@@ -252,6 +253,37 @@ > public ILaunchOption[] getLaunchOptions(); > > /** >+ * Returns all of the launch delegates. The rturned listing of delegates cannot be directly used to launch, >+ * instead the method <code>IlaunchDelegate.getDelegate</code> must be used to acquire an executable form of >+ * the delegate, allowing us to maintain lazy loading of the delegates themselves. >+ * @return all of the launch delegates >+ * @since 3.3 >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ */ >+ public ILaunchDelegate[] getLaunchDelegates(); >+ >+ /** Returns the launch delegate that applies to the specified options >+ * @param typeid the <code>ILaunchConfigurationType</code> id >+ * @param the mode id >+ * @param options the array of options to find the delegate for >+ * @return the delegates that applie to the specified launch options for the specified mode and type id >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ public ILaunchConfigurationDelegate[] getLaunchDelegates(String typeid, String mode, String[] options); >+ >+ /** > * Returns a collection of launch configurations that required migration to be > * compatible with current tooling. > * >Index: core/org/eclipse/debug/core/ILaunchConfiguration.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java,v >retrieving revision 1.45 >diff -u -r1.45 ILaunchConfiguration.java >--- core/org/eclipse/debug/core/ILaunchConfiguration.java 12 Jun 2006 20:42:24 -0000 1.45 >+++ core/org/eclipse/debug/core/ILaunchConfiguration.java 26 Sep 2006 17:54:11 -0000 >@@ -304,6 +304,20 @@ > public String getName(); > > /** >+ * >+ * @return returns the options that this configuration supports >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ public String[] getOptions() throws CoreException; >+ >+ /** > * Returns the type of this launch configuration. This is a > * handle-only method. > * >Index: core/org/eclipse/debug/core/ILaunchConfigurationType.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationType.java,v >retrieving revision 1.26 >diff -u -r1.26 ILaunchConfigurationType.java >--- core/org/eclipse/debug/core/ILaunchConfigurationType.java 12 Jun 2006 20:42:24 -0000 1.26 >+++ core/org/eclipse/debug/core/ILaunchConfigurationType.java 26 Sep 2006 17:54:11 -0000 >@@ -126,10 +126,37 @@ > * @exception CoreException if unable to instantiate the > * delegate > * @since 3.0 >+ * @deprecated we have introduced launch options in 3.3M3 and delegates can be acquired using the new >+ * <code>getDelegate(String mode, String[] options)</code> version. If no options are desired or cared about passing <code>null</code> >+ * works as though options are not considered at all. >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> > */ > public ILaunchConfigurationDelegate getDelegate(String mode) throws CoreException; > > /** >+ * Returns the launch delegate for the specifed mode with the given options >+ * @param mode the mode to get the delegate for >+ * @param options the options that the delegate must support >+ * @return the <code>ILaunchConfigurationDelegate</code> for the given mode and options, or <code>null</code> if the is not one >+ * @throws CoreException >+ * @since 3.3 >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ */ >+ public ILaunchConfigurationDelegate getDelegate(String mode, String[] options) throws CoreException; >+ >+ /** > * Returns the unique identifier for this type of launch configuration > * > * @return the unique identifier for this type of launch configuration >@@ -222,6 +249,37 @@ > * <code>DEBUG_MODE</code>. > * @return whether this kind of launch configuration supports the > * specified mode >+ * > */ > public boolean supportsMode(String mode); >+ >+ /** >+ * Returns the simple name of the plugin that contributed this launch configuration type >+ * @return the name of the contributor >+ * @since 3.3 >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ */ >+ public String getContributorName(); >+ >+ /** >+ * Returns the path of the image descriptor for this launch configuration type, which in turn >+ * is used in <code>DebugPluginImages</code> to load the image registry with config images. >+ * NOTE: the path could be only a fragment, and might require qualification via the bundle of the contributor. >+ * @return the id of the image for this config type >+ * @since 3.3 >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ */ >+ public String getImageDescriptorPath(); > } >Index: core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java,v >retrieving revision 1.17 >diff -u -r1.17 ILaunchConfigurationWorkingCopy.java >--- core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java 9 Dec 2005 15:59:15 -0000 1.17 >+++ core/org/eclipse/debug/core/ILaunchConfigurationWorkingCopy.java 26 Sep 2006 17:54:11 -0000 >@@ -172,4 +172,18 @@ > * @since 3.2 > */ > public void setMappedResources(IResource[] resources); >+ >+ /** >+ * This method is used to set the options for the associated <code>ILaunchConfiguraiton</code>. >+ * @param options the array of options to set >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ public void setOptions(String[] options); > } >Index: core/org/eclipse/debug/internal/core/LaunchConfigurationType.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationType.java,v >retrieving revision 1.33 >diff -u -r1.33 LaunchConfigurationType.java >--- core/org/eclipse/debug/internal/core/LaunchConfigurationType.java 8 May 2006 19:48:58 -0000 1.33 >+++ core/org/eclipse/debug/internal/core/LaunchConfigurationType.java 26 Sep 2006 17:54:12 -0000 >@@ -11,14 +11,11 @@ > package org.eclipse.debug.internal.core; > > >-import com.ibm.icu.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; >@@ -30,10 +27,13 @@ > import org.eclipse.debug.core.ILaunchConfigurationMigrationDelegate; > import org.eclipse.debug.core.ILaunchConfigurationType; > import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; >+import org.eclipse.debug.core.ILaunchDelegate; > import org.eclipse.debug.core.ILaunchManager; > import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; > import org.eclipse.debug.core.sourcelookup.ISourcePathComputer; > >+import com.ibm.icu.text.MessageFormat; >+ > /** > * A launch configuration type wrappers a configuration > * element for a <code>launchConfigurationType</code> >@@ -41,28 +41,47 @@ > */ > public class LaunchConfigurationType extends PlatformObject implements ILaunchConfigurationType { > >- private static String MIGRATION_DELEGATE = "migrationDelegate"; //$NON-NLS-1$ >- > /** > * The configuration element of the extension. > */ > private IConfigurationElement fElement; > > /** >- * Base modes this type supports. >+ * a listing of modes contributed to this launch configuration type >+ * @since 3.3 >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This field has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ */ >+ private Set fModes = null; >+ >+ /** >+ * the default source path computer for this config type >+ * @since 3.3 >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This field has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> > */ >- private Set fBaseModes; >+ private ISourcePathComputer fSourcePathComputer = null; > > /** >- * Modes that delegates have been contributed for >+ * The source locator id for this config type > */ >- private Set fContributedModes; >+ private String fSourceLocator = null; > > /** > * 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 >+ * Map of mode to delegate > */ > private Map fDelegates; > >@@ -73,83 +92,25 @@ > * @param element configuration element > */ > protected LaunchConfigurationType(IConfigurationElement element) { >- setConfigurationElement(element); >+ fElement = element; > } > > /* (non-Javadoc) > * @see org.eclipse.debug.core.ILaunchConfigurationType#getAttribute(java.lang.String) > */ > public String getAttribute(String attributeName) { >- return getConfigurationElement().getAttribute(attributeName); >+ return fElement.getAttribute(attributeName); > } >- >- /** >- * 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; >- } > > /* (non-Javadoc) > * @see org.eclipse.debug.core.ILaunchConfigurationType#getCategory() > */ > public String getCategory() { >- return getConfigurationElement().getAttribute("category"); //$NON-NLS-1$ >- } >- >- /** >- * Returns this type's configuration element. >- * >- * @return this type's configuration element >- */ >- protected IConfigurationElement getConfigurationElement() { >- return fElement; >- } >- >- /** >- * 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; >+ return fElement.getAttribute(ConfigurationElementConstants.CATEGORY); > } > > /** >- * 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); >@@ -159,62 +120,47 @@ > * @see org.eclipse.debug.core.ILaunchConfigurationType#getDelegate(java.lang.String) > */ > public ILaunchConfigurationDelegate getDelegate(String mode) throws CoreException { >+ return getDelegate(mode, null); >+ } >+ >+ /** >+ * @see org.eclipse.debug.core.ILaunchConfigurationType#getDelegate(java.lang.String, java.lang.String[]) >+ */ >+ public ILaunchConfigurationDelegate getDelegate(String mode, String[] options) throws CoreException { > if (!supportsMode(mode)) { > throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.LaunchConfigurationType_9, new String[] {mode, getIdentifier()}), null)); > } > if (fDelegates == null) { > // initialize delegate table with base modes >- fDelegates = new Hashtable(3); >+ fDelegates = new Hashtable(); > } > 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.LaunchConfigurationType_Launch_delegate_for__0__does_not_implement_required_interface_ILaunchConfigurationDelegate__1, new String[]{getName()}), null)); >- } >- // 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; >- } >+ if(fModes.contains(mode)) { >+ ILaunchConfigurationDelegate[] delegates = DebugPlugin.getDefault().getLaunchManager().getLaunchDelegates(getIdentifier(), mode, options); >+ if(delegates.length > 0) { >+ return delegates[0]; > } > } >- } else { >+ } >+ else { > return delegate; > } >- throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.LaunchConfigurationType_10, new String[] {getIdentifier(), mode}), null)); >+ throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.LaunchConfigurationType_10, new String[] {getIdentifier(), mode}), null)); > } > > /* (non-Javadoc) > * @see org.eclipse.debug.core.ILaunchConfigurationType#getIdentifier() > */ > public String getIdentifier() { >- return getConfigurationElement().getAttribute("id"); //$NON-NLS-1$ >+ return fElement.getAttribute(ConfigurationElementConstants.ID); > } > > /* (non-Javadoc) > * @see org.eclipse.debug.core.ILaunchConfigurationType#getName() > */ > public String getName() { >- return getConfigurationElement().getAttribute("name"); //$NON-NLS-1$ >+ return fElement.getAttribute(ConfigurationElementConstants.NAME); > } > > /* (non-Javadoc) >@@ -228,50 +174,66 @@ > * @see org.eclipse.debug.core.ILaunchConfigurationType#getSourceLocatorId() > */ > public String getSourceLocatorId() { >- String id = getAttribute("sourceLocatorId"); //$NON-NLS-1$ >- if (id == null) { >- // check for specification by mode specific delegate >- List delegates = ((LaunchManager)DebugPlugin.getDefault().getLaunchManager()).getContributedDelegates(); >- Iterator iterator = delegates.iterator(); >- while (iterator.hasNext() && id == null) { >- ContributedDelegate delegate = (ContributedDelegate)iterator.next(); >- if (delegate.getLaunchConfigurationType().equals(getIdentifier())) { >- id = delegate.getSourceLocaterId(); >+ if(fSourceLocator == null) { >+ //try the type itself >+ fSourceLocator = getAttribute(ConfigurationElementConstants.SOURCE_LOCATOR); >+ if(fSourceLocator == null) { >+ //try from launch manager >+ ILaunchDelegate[] delegates = ((LaunchManager)DebugPlugin.getDefault().getLaunchManager()).getLaunchDelegates(); >+ for(int i = 0; i < delegates.length; i++) { >+ if(delegates[i].appliesTo(getIdentifier())) { >+ fSourceLocator = delegates[i].getSourceLocatorId(); >+ if(fSourceLocator != null) { >+ return fSourceLocator; >+ } >+ } > } > } > } >- return id; >+ return fSourceLocator; > } > > /* (non-Javadoc) > * @see org.eclipse.debug.core.ILaunchConfigurationType#getSourcePathComputer() > */ > public ISourcePathComputer getSourcePathComputer() { >- String id = getConfigurationElement().getAttribute("sourcePathComputerId"); //$NON-NLS-1$ >- if (id == null) { >- // check for specification by mode specific delegate >- List delegates = ((LaunchManager)DebugPlugin.getDefault().getLaunchManager()).getContributedDelegates(); >- Iterator iterator = delegates.iterator(); >- while (iterator.hasNext() && id == null) { >- ContributedDelegate delegate = (ContributedDelegate)iterator.next(); >- if (delegate.getLaunchConfigurationType().equals(getIdentifier())) { >- id = delegate.getSourcePathComputerId(); >+ if(fSourcePathComputer == null) { >+ //get the id >+ String id = fElement.getAttribute(ConfigurationElementConstants.SOURCE_PATH_COMPUTER); >+ LaunchManager lmgr = (LaunchManager)DebugPlugin.getDefault().getLaunchManager(); >+ if(id == null) { >+ //try from the launch manager >+ ILaunchDelegate[] delegates = lmgr.getLaunchDelegates(); >+ for(int i = 0; i < delegates.length; i++) { >+ if(delegates[i].appliesTo(getIdentifier())) { >+ id = delegates[i].getSourcePathComputerId(); >+ if(id != null) { >+ break; >+ } >+ } > } > } >+ if(id != null) { >+ fSourcePathComputer = lmgr.getSourcePathComputer(id); >+ } > } >- if (id != null && id.length() > 0) { >- return DebugPlugin.getDefault().getLaunchManager().getSourcePathComputer(id); >- } >- return null; >+ return fSourcePathComputer; > } > >- /* (non-Javadoc) >+ /** > * @see org.eclipse.debug.core.ILaunchConfigurationType#getSupportedModes() > */ > public Set getSupportedModes() { >- HashSet modes = new HashSet(getBaseModes()); >- modes.addAll(getContributedModes()); >- return modes; >+ if(fModes == null) { >+ fModes = new HashSet(); >+ ILaunchDelegate[] delegates = DebugPlugin.getDefault().getLaunchManager().getLaunchDelegates(); >+ for(int i= 0; i < delegates.length; i++) { >+ if(delegates[i].appliesTo(getIdentifier())) { >+ fModes.addAll(delegates[i].getModes()); >+ } >+ } >+ } >+ return fModes; > } > > /** >@@ -283,14 +245,14 @@ > * @since 3.2 > */ > public boolean isMigrationCandidate(ILaunchConfiguration candidate) throws CoreException { >- if(getAttribute(MIGRATION_DELEGATE) != null) { >+ if(getAttribute(ConfigurationElementConstants.MIGRATION_DELEGATE) != null) { > if(fDelegates == null) { > fDelegates = new Hashtable(); > } >- Object delegate = fDelegates.get(MIGRATION_DELEGATE); >+ Object delegate = fDelegates.get(ConfigurationElementConstants.MIGRATION_DELEGATE); > if(delegate == null) { >- delegate = getConfigurationElement().createExecutableExtension(MIGRATION_DELEGATE); >- fDelegates.put(MIGRATION_DELEGATE, delegate); >+ delegate = fElement.createExecutableExtension(ConfigurationElementConstants.MIGRATION_DELEGATE); >+ fDelegates.put(ConfigurationElementConstants.MIGRATION_DELEGATE, delegate); > } > if(delegate instanceof ILaunchConfigurationMigrationDelegate) { > return ((ILaunchConfigurationMigrationDelegate)delegate).isCandidate(candidate); >@@ -303,7 +265,7 @@ > * @see org.eclipse.debug.core.ILaunchConfigurationType#isPublic() > */ > public boolean isPublic() { >- String publicString = getConfigurationElement().getAttribute("public"); //$NON-NLS-1$ >+ String publicString = fElement.getAttribute(ConfigurationElementConstants.PUBLIC); > if (publicString != null) { > if (publicString.equalsIgnoreCase("false")) { //$NON-NLS-1$ > return false; >@@ -320,14 +282,14 @@ > * @since 3.2 > */ > public void migrate(ILaunchConfiguration candidate) throws CoreException { >- if(getAttribute(MIGRATION_DELEGATE) != null) { >+ if(getAttribute(ConfigurationElementConstants.MIGRATION_DELEGATE) != null) { > if(fDelegates == null) { > fDelegates = new Hashtable(); > } >- Object delegate = fDelegates.get(MIGRATION_DELEGATE); >+ Object delegate = fDelegates.get(ConfigurationElementConstants.MIGRATION_DELEGATE); > if(delegate == null) { >- delegate = getConfigurationElement().createExecutableExtension(MIGRATION_DELEGATE); >- fDelegates.put(MIGRATION_DELEGATE, delegate); >+ delegate = fElement.createExecutableExtension(ConfigurationElementConstants.MIGRATION_DELEGATE); >+ fDelegates.put(ConfigurationElementConstants.MIGRATION_DELEGATE, delegate); > } > if(delegate instanceof ILaunchConfigurationMigrationDelegate) { > ((ILaunchConfigurationMigrationDelegate)delegate).migrate(candidate); >@@ -339,23 +301,28 @@ > * @see org.eclipse.debug.core.ILaunchConfigurationType#newInstance(org.eclipse.core.resources.IContainer, java.lang.String) > */ > public ILaunchConfigurationWorkingCopy newInstance(IContainer container, String name) { >- return new LaunchConfigurationWorkingCopy(container, name, this); >+ return new LaunchConfigurationWorkingCopy(container, name, this); > } > > /** >- * Sets this type's configuration element. >- * >- * @param element this type's configuration element >+ * @see org.eclipse.debug.core.ILaunchConfigurationType#supportsMode(java.lang.String) > */ >- private void setConfigurationElement(IConfigurationElement element) { >- fElement = element; >+ public boolean supportsMode(String mode) { >+ return getSupportedModes().contains(mode); > } >- >- /** >- * @see ILaunchConfigurationType#supportsMode(String) >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchConfigurationType#getContributorName() > */ >- public boolean supportsMode(String mode) { >- return getBaseModes().contains(mode) || getContributedModes().contains(mode); >+ public String getContributorName() { >+ return fElement.getContributor().getName(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchConfigurationType#getImageDescriptorId() >+ */ >+ public String getImageDescriptorPath() { >+ return fElement.getAttribute(ConfigurationElementConstants.ICON); > } > } > >Index: core/org/eclipse/debug/internal/core/LaunchManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java,v >retrieving revision 1.167 >diff -u -r1.167 LaunchManager.java >--- core/org/eclipse/debug/internal/core/LaunchManager.java 13 Sep 2006 19:09:07 -0000 1.167 >+++ core/org/eclipse/debug/internal/core/LaunchManager.java 26 Sep 2006 17:54:12 -0000 >@@ -76,6 +76,7 @@ > import org.eclipse.debug.core.ILaunchConfiguration; > import org.eclipse.debug.core.ILaunchConfigurationListener; > import org.eclipse.debug.core.ILaunchConfigurationType; >+import org.eclipse.debug.core.ILaunchDelegate; > import org.eclipse.debug.core.ILaunchListener; > import org.eclipse.debug.core.ILaunchManager; > import org.eclipse.debug.core.ILaunchMode; >@@ -85,6 +86,7 @@ > import org.eclipse.debug.core.IStatusHandler; > import org.eclipse.debug.core.model.IDebugTarget; > import org.eclipse.debug.core.model.IDisconnect; >+import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; > import org.eclipse.debug.core.model.IPersistableSourceLocator; > import org.eclipse.debug.core.model.IProcess; > import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector; >@@ -507,17 +509,14 @@ > * @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(); >+ 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); >+ DOMSource source = new DOMSource(doc); >+ StreamResult outputTarget = new StreamResult(s); > transformer.transform(source, outputTarget); >- > return s.toString("UTF8"); //$NON-NLS-1$ > } > >@@ -564,10 +563,9 @@ > private HashMap fLaunchOptions = null; > > /** >- * List of contributed launch delegates (delegates contributed for existing >- * launch configuration types). >+ * A map of ILaunchDelegate objects stored by id of delegate, or launch config type > */ >- private List fContributedDelegates = null; >+ private HashMap fLaunchDelegates = null; > > /** > * Collection of launches >@@ -830,8 +828,9 @@ > } > Iterator iter = list.iterator(); > List configs = new ArrayList(list.size()); >+ IFile file = null; > while (iter.hasNext()) { >- IFile file = (IFile)iter.next(); >+ file = (IFile)iter.next(); > configs.add(getLaunchConfiguration(file)); > } > return configs; >@@ -856,8 +855,9 @@ > } > }; > String[] files = directory.list(filter); >+ LaunchConfiguration config = null; > for (int i = 0; i < files.length; i++) { >- LaunchConfiguration config = new LaunchConfiguration(containerPath.append(files[i])); >+ config = new LaunchConfiguration(containerPath.append(files[i])); > configs.add(config); > } > } >@@ -893,13 +893,13 @@ > try { > index = Integer.parseInt(trailer); > baseName = baseName.substring(0, copyIndex); >- } catch (NumberFormatException nfe) { >- } >+ } >+ catch (NumberFormatException nfe) {} > } > } > String newName = baseName; > >- StringBuffer buffer= null; >+ StringBuffer buffer = null; > while (isExistingLaunchConfigurationName(newName)) { > buffer = new StringBuffer(baseName); > buffer.append(" ("); //$NON-NLS-1$ >@@ -995,16 +995,18 @@ > List configs = new ArrayList(4); > NodeList list = root.getChildNodes(); > int length = list.getLength(); >+ Node node = null; >+ Element entry = null; >+ String memento = null; > for (int i = 0; i < length; ++i) { >- Node node = list.item(i); >+ 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$ >+ entry = (Element) node; >+ if (!entry.getNodeName().equals("launchConfiguration")) { //$NON-NLS-1$ > throw invalidFormat; > } >- String memento = entry.getAttribute("memento"); //$NON-NLS-1$ >+ memento = entry.getAttribute("memento"); //$NON-NLS-1$ > if (memento == null) { > throw invalidFormat; > } >@@ -1016,18 +1018,7 @@ > > protected ConfigurationNotifier getConfigurationNotifier() { > return new ConfigurationNotifier(); >- } >- >- /** >- * Returns a list of launch delegates contributed for existing launch configuration >- * types. >- * >- * @return list of ContributedDelegate >- */ >- protected List getContributedDelegates() { >- initializeContributedDelegates(); >- return fContributedDelegates; >- } >+ } > > /** > * @see ILaunchManager#getDebugTargets() >@@ -1036,9 +1027,10 @@ > synchronized (fLaunches) { > List allTargets= new ArrayList(fLaunches.size()); > if (fLaunches.size() > 0) { >- Iterator e= fLaunches.iterator(); >+ Iterator e = fLaunches.iterator(); >+ IDebugTarget[] targets = null; > while (e.hasNext()) { >- IDebugTarget[] targets= ((ILaunch) e.next()).getDebugTargets(); >+ targets = ((ILaunch) e.next()).getDebugTargets(); > for (int i = 0; i < targets.length; i++) { > allTargets.add(targets[i]); > } >@@ -1073,10 +1065,9 @@ > if (configEnv == null) { > return null; > } >- Map env = null; >+ Map env = new HashMap(); > // build base environment >- env= new HashMap(); >- boolean append= configuration.getAttribute(ATTR_APPEND_ENVIRONMENT_VARIABLES, true); >+ boolean append = configuration.getAttribute(ATTR_APPEND_ENVIRONMENT_VARIABLES, true); > if (append) { > env.putAll(getNativeEnvironmentCasePreserved()); > } >@@ -1084,10 +1075,17 @@ > // Add variables from config > Iterator iter= configEnv.entrySet().iterator(); > boolean win32= Platform.getOS().equals(Constants.OS_WIN32); >+ Map.Entry entry = null; >+ String key = null; >+ String value = null; >+ Object nativeValue = null; >+ Iterator envIter = null; >+ Map.Entry nativeEntry = null; >+ String nativeKey = null; > while (iter.hasNext()) { >- Map.Entry entry= (Map.Entry) iter.next(); >- String key= (String) entry.getKey(); >- String value = (String) entry.getValue(); >+ entry = (Map.Entry) iter.next(); >+ key = (String) entry.getKey(); >+ value = (String) entry.getValue(); > // translate any string substitution variables > if (value != null) { > value = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value); >@@ -1095,7 +1093,7 @@ > boolean added= false; > if (win32) { > // First, check if the key is an exact match for an existing key. >- Object nativeValue= env.get(key); >+ nativeValue = env.get(key); > if (nativeValue != null) { > // If an exact match is found, just replace the value > env.put(key, value); >@@ -1103,13 +1101,13 @@ > // Win32 vars are case-insensitive. If an exact match isn't found, iterate to > // check for a case-insensitive match. We maintain the key's case (see bug 86725), > // but do a case-insensitive comparison (for example, "pAtH" will still override "PATH"). >- Iterator envIter= env.entrySet().iterator(); >+ envIter = env.entrySet().iterator(); > while (envIter.hasNext()) { >- Map.Entry nativeEntry = (Map.Entry) envIter.next(); >- String nativeKey= (String) (nativeEntry).getKey(); >+ nativeEntry = (Map.Entry) envIter.next(); >+ nativeKey = (String) (nativeEntry).getKey(); > if (nativeKey.equalsIgnoreCase(key)) { > nativeEntry.setValue(value); >- added= true; >+ added = true; > break; > } > } >@@ -1120,11 +1118,12 @@ > } > } > >- iter= env.entrySet().iterator(); >- List strings= new ArrayList(env.size()); >+ iter = env.entrySet().iterator(); >+ List strings = new ArrayList(env.size()); >+ StringBuffer buffer = null; > while (iter.hasNext()) { >- Map.Entry entry = (Map.Entry) iter.next(); >- StringBuffer buffer= new StringBuffer((String) entry.getKey()); >+ entry = (Map.Entry) iter.next(); >+ buffer = new StringBuffer((String) entry.getKey()); > buffer.append('=').append((String) entry.getValue()); > strings.add(buffer.toString()); > } >@@ -1215,8 +1214,9 @@ > public ILaunchConfiguration[] getLaunchConfigurations(ILaunchConfigurationType type) throws CoreException { > Iterator iter = getAllLaunchConfigurations().iterator(); > List configs = new ArrayList(); >+ ILaunchConfiguration config = null; > while (iter.hasNext()) { >- ILaunchConfiguration config = (ILaunchConfiguration)iter.next(); >+ config = (ILaunchConfiguration)iter.next(); > if (config.getType().equals(type)) { > configs.add(config); > } >@@ -1224,7 +1224,6 @@ > return (ILaunchConfiguration[])configs.toArray(new ILaunchConfiguration[configs.size()]); > } > >- > /** > * Returns all launch configurations that are stored as resources > * in the given project. >@@ -1236,9 +1235,11 @@ > protected List getLaunchConfigurations(IProject project) { > Iterator iter = getAllLaunchConfigurations().iterator(); > List configs = new ArrayList(); >+ ILaunchConfiguration config = null; >+ IFile file = null; > while (iter.hasNext()) { >- ILaunchConfiguration config = (ILaunchConfiguration)iter.next(); >- IFile file = config.getFile(); >+ config = (ILaunchConfiguration)iter.next(); >+ file = config.getFile(); > if (file != null && file.getProject().equals(project)) { > configs.add(config); > } >@@ -1276,16 +1277,18 @@ > } > } > >- /* (non-Javadoc) >+ /**) > * @see org.eclipse.debug.core.ILaunchManager#getLaunchMode(java.lang.String) >+ * @deprecated launch modes are removed for 3.3M3 in favour of launching with options > */ > public ILaunchMode getLaunchMode(String mode) { > initializeLaunchModes(); > return (ILaunchMode) fLaunchModes.get(mode); > } > >- /* (non-Javadoc) >+ /** > * @see org.eclipse.debug.core.ILaunchManager#getLaunchModes() >+ * @deprecated launch modes are removed for 3.3M3 in favour of launching with options > */ > public ILaunchMode[] getLaunchModes() { > initializeLaunchModes(); >@@ -1309,7 +1312,115 @@ > Collection col = fLaunchOptions.values(); > return (ILaunchOption[])col.toArray(new ILaunchOption[col.size()]); > } >- >+ >+ /** >+ * Initializes the listing of registered launch options. Does no work if the mapping is already populated. >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ private synchronized void initializeLaunchOptions() { >+ if(fLaunchOptions == null) { >+ try { >+ IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_OPTIONS); >+ IConfigurationElement[] infos = extensionPoint.getConfigurationElements(); >+ fLaunchOptions = new HashMap(); >+ ILaunchOption option = null; >+ for(int i = 0; i < infos.length; i++) { >+ option = new LaunchOption(infos[i]); >+ fLaunchOptions.put(option.getIdentifier(), option); >+ } >+ } >+ catch(CoreException ce) {DebugPlugin.log(ce);} >+ } >+ } >+ >+ /** >+ * @see org.eclipse.debug.core.ILaunchManager#getLaunchDelegates() >+ */ >+ public ILaunchDelegate[] getLaunchDelegates() { >+ initializeLaunchDelegates(); >+ Collection col = fLaunchDelegates.values(); >+ return (ILaunchDelegate[]) col.toArray(new ILaunchDelegate[col.size()]); >+ } >+ >+ /** >+ * @see org.eclipse.debug.core.ILaunchManager#getLaunchDelegate(java.lang.String, java.lang.String, java.lang.String[]) >+ */ >+ public ILaunchConfigurationDelegate[] getLaunchDelegates(String typeid, String mode, String[] options) { >+ try { >+ initializeLaunchDelegates(); >+ ILaunchDelegate ld = null; >+ boolean applies = true; >+ ArrayList list = new ArrayList(); >+ Set doptions = null; >+ for(Iterator iter = fLaunchDelegates.keySet().iterator(); iter.hasNext();) { >+ ld = (ILaunchDelegate) fLaunchDelegates.get(iter.next()); >+ doptions = ld.getOptions(); >+ if(ld.appliesTo(typeid, mode)) { >+ if(options != null) { >+ if(doptions.size() > 0 & options.length == 0) { >+ applies = false; >+ } >+ for(int i = 0; i < options.length; i++) { >+ applies &= doptions.contains(options[i]); >+ } >+ } >+ else if(doptions.size() > 0) { >+ applies = false; >+ } >+ if(applies) { >+ list.add(ld.getDelegate()); >+ } >+ applies = true; >+ } >+ } >+ return (ILaunchConfigurationDelegate[]) list.toArray(new ILaunchConfigurationDelegate[list.size()]); >+ } >+ catch(CoreException ce) {} >+ return null; >+ } >+ >+ /** >+ * Initializes the listing of delegates available to the launching framework >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This method has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ private synchronized void initializeLaunchDelegates() { >+ if(fLaunchDelegates == null) { >+ fLaunchDelegates = new HashMap(); >+ //get all launch delegate contributions >+ IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_DELEGATES); >+ IConfigurationElement[] infos = extensionPoint.getConfigurationElements(); >+ ILaunchDelegate delegate = null; >+ for(int i = 0; i < infos.length; i++) { >+ delegate = new LaunchDelegate(infos[i]); >+ fLaunchDelegates.put(delegate.getIdentifier(), delegate); >+ } >+ //get all delegates from launch configuration type contributions >+ extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_CONFIGURATION_TYPES); >+ infos = extensionPoint.getConfigurationElements(); >+ for(int i = 0; i < infos.length; i++) { >+ //must check to see if delegate is provided in contribution >+ if(infos[i].getAttribute("delegate") != null) { //$NON-NLS-1$ >+ delegate = new LaunchDelegate(infos[i]); >+ fLaunchDelegates.put(delegate.getIdentifier(), delegate); >+ } >+ } >+ } >+ } >+ > /** > * Returns all launch configurations that are stored locally. > * >@@ -1397,9 +1508,11 @@ > if (Platform.getOS().equals(Constants.OS_WIN32)) { > fgNativeEnv= new HashMap(); > Iterator entries = casePreserved.entrySet().iterator(); >+ Map.Entry entry = null; >+ String key = null; > while (entries.hasNext()) { >- Map.Entry entry = (Entry) entries.next(); >- String key = ((String)entry.getKey()).toUpperCase(); >+ entry = (Entry) entries.next(); >+ key = ((String)entry.getKey()).toUpperCase(); > fgNativeEnv.put(key, entry.getValue()); > } > } else { >@@ -1425,10 +1538,11 @@ > */ > public IProcess[] getProcesses() { > synchronized (fLaunches) { >- List allProcesses= new ArrayList(fLaunches.size()); >- Iterator e= fLaunches.iterator(); >+ List allProcesses = new ArrayList(fLaunches.size()); >+ Iterator e = fLaunches.iterator(); >+ IProcess[] processes = null; > while (e.hasNext()) { >- IProcess[] processes= ((ILaunch) e.next()).getProcesses(); >+ processes = ((ILaunch) e.next()).getProcesses(); > for (int i= 0; i < processes.length; i++) { > allProcesses.add(processes[i]); > } >@@ -1494,9 +1608,11 @@ > IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_CONFIGURATION_COMPARATORS); > IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); > fComparators = new HashMap(infos.length); >+ IConfigurationElement configurationElement = null; >+ String attr = null; > for (int i= 0; i < infos.length; i++) { >- IConfigurationElement configurationElement = infos[i]; >- String attr = configurationElement.getAttribute("attribute"); //$NON-NLS-1$ >+ configurationElement = infos[i]; >+ attr = configurationElement.getAttribute("attribute"); //$NON-NLS-1$ > if (attr != null) { > fComparators.put(attr, new LaunchConfigurationComparator(configurationElement)); > } else { >@@ -1508,32 +1624,18 @@ > } > } > } >- >+ > /** >- * Initializes contributed launch delegates (i.e. delegates contributed >- * to an existing launch configuration type). >+ * Initializes the listing of <code>LaunchConfigurationType</code>s. > */ >- 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++) { >- fContributedDelegates.add(new ContributedDelegate(infos[i])); >- } >- } >- } >- > 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); >+ IConfigurationElement[] infos = extensionPoint.getConfigurationElements(); >+ fLaunchConfigurationTypes = new ArrayList(infos.length); >+ for (int i= 0; i < infos.length; i++) { >+ fLaunchConfigurationTypes.add(new LaunchConfigurationType(infos[i])); > } > } > } >@@ -1543,6 +1645,7 @@ > * > * @exception CoreException if an exception occurs reading > * the extensions >+ * > */ > private synchronized void initializeLaunchModes() { > if (fLaunchModes == null) { >@@ -1559,26 +1662,6 @@ > catch (CoreException e) {DebugPlugin.log(e);} > } > } >- >- /** >- * Initializes the listing of registered launch options. Does no work if the mapping is already populated. >- * @since 3.3 >- */ >- private synchronized void initializeLaunchOptions() { >- if(fLaunchOptions == null) { >- try { >- IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_LAUNCH_OPTIONS); >- IConfigurationElement[] infos = extensionPoint.getConfigurationElements(); >- fLaunchOptions = new HashMap(); >- ILaunchOption option = null; >- for(int i = 0; i < infos.length; i++) { >- option = new LaunchOption(infos[i]); >- fLaunchOptions.put(option.getIdentifier(), option); >- } >- } >- catch(CoreException ce) {DebugPlugin.log(ce);} >- } >- } > > /** > * Initializes source container type and source path computer extensions. >@@ -1615,9 +1698,11 @@ > IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(DebugPlugin.getUniqueIdentifier(), DebugPlugin.EXTENSION_POINT_SOURCE_LOCATORS); > IConfigurationElement[] infos= extensionPoint.getConfigurationElements(); > fSourceLocators= new HashMap(infos.length); >+ IConfigurationElement configurationElement = null; >+ String id = null; > for (int i= 0; i < infos.length; i++) { >- IConfigurationElement configurationElement = infos[i]; >- String id = configurationElement.getAttribute("id"); //$NON-NLS-1$ >+ configurationElement = infos[i]; >+ id = configurationElement.getAttribute("id"); //$NON-NLS-1$ > if (id != null) { > fSourceLocators.put(id,configurationElement); > } else { >@@ -1812,8 +1897,7 @@ > if (!configs.isEmpty()) { > Iterator iterator = configs.iterator(); > while (iterator.hasNext()) { >- ILaunchConfiguration configuration = (ILaunchConfiguration)iterator.next(); >- launchConfigurationDeleted(configuration); >+ launchConfigurationDeleted((ILaunchConfiguration)iterator.next()); > } > } > //bug 12134 >@@ -1832,8 +1916,7 @@ > if (!configs.isEmpty()) { > Iterator iterator = configs.iterator(); > while (iterator.hasNext()) { >- ILaunchConfiguration config = (ILaunchConfiguration) iterator.next(); >- launchConfigurationAdded(config); >+ launchConfigurationAdded((ILaunchConfiguration) iterator.next()); > } > } > } >@@ -1953,8 +2036,9 @@ > fLaunchesListeners = new ListenerList(); > fLaunchConfigurationListeners = new ListenerList(); > ILaunch[] launches = getLaunches(); >+ ILaunch launch = null; > for (int i= 0; i < launches.length; i++) { >- ILaunch launch= launches[i]; >+ launch = launches[i]; > try { > if (launch instanceof IDisconnect) { > IDisconnect disconnect = (IDisconnect)launch; >@@ -2014,8 +2098,9 @@ > */ > protected void verifyConfigurations(List verify, List valid) { > Iterator configs = verify.iterator(); >+ ILaunchConfiguration config = null; > while (configs.hasNext()) { >- ILaunchConfiguration config = (ILaunchConfiguration)configs.next(); >+ config = (ILaunchConfiguration)configs.next(); > if (isValid(config)) { > valid.add(config); > } >Index: core/org/eclipse/debug/internal/core/LaunchConfiguration.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java,v >retrieving revision 1.85 >diff -u -r1.85 LaunchConfiguration.java >--- core/org/eclipse/debug/internal/core/LaunchConfiguration.java 9 Jun 2006 17:06:36 -0000 1.85 >+++ core/org/eclipse/debug/internal/core/LaunchConfiguration.java 26 Sep 2006 17:54:12 -0000 >@@ -13,7 +13,6 @@ > > import java.io.IOException; > import java.io.StringReader; >-import com.ibm.icu.text.MessageFormat; > import java.util.ArrayList; > import java.util.List; > import java.util.Map; >@@ -55,6 +54,8 @@ > import org.xml.sax.SAXException; > import org.xml.sax.helpers.DefaultHandler; > >+import com.ibm.icu.text.MessageFormat; >+ > /** > * Launch configuration handle. > * >@@ -82,6 +83,19 @@ > public static final String ATTR_MAPPED_RESOURCE_TYPES = DebugPlugin.getUniqueIdentifier() + ".MAPPED_RESOURCE_TYPES"; //$NON-NLS-1$ > > /** >+ * The listing of applicable launch options for this configuration. >+ * >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This class has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ * @since 3.3 >+ */ >+ public static final String ATTR_LAUNCH_OPTIONS = DebugPlugin.getUniqueIdentifier() + ".LAUNCH_OPTIONS"; //$NON-NLS-1$ >+ >+ /** > * Location this configuration is stored in. This > * is the key for a launch configuration handle. > */ >@@ -320,14 +334,13 @@ > /** > * 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); >+ protected ILaunchConfigurationDelegate getDelegate(String mode, String[] options) throws CoreException { >+ return getType().getDelegate(mode, options); > } > > /* (non-Javadoc) >@@ -480,6 +493,20 @@ > return getLastLocationSegment(); > } > >+ /** >+ * @see org.eclipse.debug.core.ILaunchConfiguration#getOptions() >+ */ >+ public String[] getOptions() throws CoreException { >+ String str = getAttribute(ATTR_LAUNCH_OPTIONS, (String)null); >+ if(str != null) { >+ String[] atts = str.split(","); //$NON-NLS-1$ >+ if(atts != null) { >+ return atts; >+ } >+ } >+ return new String[0]; >+ } >+ > /* (non-Javadoc) > * @see org.eclipse.debug.core.ILaunchConfiguration#getType() > */ >@@ -570,7 +597,7 @@ > */ > 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); >+ ILaunchConfigurationDelegate delegate = getDelegate(mode, getOptions()); > ILaunchConfigurationDelegate2 delegate2 = null; > if (delegate instanceof ILaunchConfigurationDelegate2) { > delegate2 = (ILaunchConfigurationDelegate2) delegate; >@@ -690,5 +717,5 @@ > return getType().supportsMode(mode); > } > >-}//end class >+} > >Index: core/org/eclipse/debug/internal/core/ContributedDelegate.java >=================================================================== >RCS file: core/org/eclipse/debug/internal/core/ContributedDelegate.java >diff -N core/org/eclipse/debug/internal/core/ContributedDelegate.java >--- core/org/eclipse/debug/internal/core/ContributedDelegate.java 8 May 2006 19:48:58 -0000 1.9 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,145 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2000, 2006 IBM Corporation and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * IBM Corporation - initial API and implementation >- *******************************************************************************/ >-package org.eclipse.debug.internal.core; >- >-import com.ibm.icu.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.LaunchConfigurationType_Launch_delegate_for__0__does_not_implement_required_interface_ILaunchConfigurationDelegate__1, new String[]{getIdentifier()}), null)); >- } >- } >- return fDelegate; >- } >- >- /** >- * Returns the identifier of this extension point. >- */ >- protected String getIdentifier() { >- return getConfigurationElement().getAttribute("id"); //$NON-NLS-1$ >- } >- >- /** >- * Returns the source path computer id specified by this launch delegate >- * or <code>null</code> if none. >- * >- * @return the source path computer id specified by this launch delegate >- * or <code>null</code> if none >- * >- * @since 3.1 >- */ >- protected String getSourcePathComputerId() { >- return getConfigurationElement().getAttribute("sourcePathComputerId"); //$NON-NLS-1$ >- } >- >- /** >- * Returns the source locater id specified by this launch delegate >- * or <code>null</code> if none. >- * >- * @return the source locater id specified by this launch delegate >- * or <code>null</code> if none >- * >- * @since 3.1 >- */ >- protected String getSourceLocaterId() { >- return getConfigurationElement().getAttribute("sourceLocatorId"); //$NON-NLS-1$ >- } >-} >Index: core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java,v >retrieving revision 1.58 >diff -u -r1.58 LaunchConfigurationWorkingCopy.java >--- core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java 22 Sep 2006 16:08:57 -0000 1.58 >+++ core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java 26 Sep 2006 17:54:12 -0000 >@@ -404,6 +404,23 @@ > } > > /** >+ * @see org.eclipse.debug.core.ILaunchConfigurationWorkingCopy#setOptions(java.lang.String[]) >+ */ >+ public void setOptions(String[] options) { >+ String str = null; >+ if(options != null) { >+ str = ""; //$NON-NLS-1$ >+ for(int i = 0; i < options.length; i++) { >+ str += options[i]; >+ if(i < options.length-1) { >+ str += ","; //$NON-NLS-1$ >+ } >+ } >+ } >+ setAttribute(ATTR_LAUNCH_OPTIONS, str); >+ } >+ >+ /** > * Sets this working copy's state to not dirty. > */ > private void resetDirty() { >@@ -574,7 +591,7 @@ > } > setAttribute(LaunchConfiguration.ATTR_MAPPED_RESOURCE_PATHS, paths); > setAttribute(LaunchConfiguration.ATTR_MAPPED_RESOURCE_TYPES, types); >- }//end setResource >+ } > >-}//end class >+} > >Index: schema/launchOptions.exsd >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/schema/launchOptions.exsd,v >retrieving revision 1.2 >diff -u -r1.2 launchOptions.exsd >--- schema/launchOptions.exsd 14 Sep 2006 17:37:41 -0000 1.2 >+++ schema/launchOptions.exsd 26 Sep 2006 17:54:12 -0000 >@@ -8,6 +8,11 @@ > <documentation> > This extension point is used to contribute launch options to the launch manager. > Launch options are used as modifiers when executing a launch configuration. >+ >+<p><strong>EXPERIMENTAL</strong>. This method has been added as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team.</p> > </documentation> > </annotation> > >@@ -101,7 +106,7 @@ > </launchOption> > </extension> > </pre> >-</p> >+</p> > </documentation> > </annotation> > >@@ -128,7 +133,7 @@ > <meta.section type="copyright"/> > </appInfo> > <documentation> >- Copyright (c) 2003, 2005 IBM Corporation and others.<br> >+ Copyright (c) 2006 IBM Corporation and others.<br> > All rights reserved. This program and the accompanying materials are made > available under the terms of the Eclipse Public License v1.0 which > accompanies this distribution, and is available at >Index: schema/launchConfigurationTypes.exsd >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/schema/launchConfigurationTypes.exsd,v >retrieving revision 1.15 >diff -u -r1.15 launchConfigurationTypes.exsd >--- schema/launchConfigurationTypes.exsd 9 Dec 2005 15:55:03 -0000 1.15 >+++ schema/launchConfigurationTypes.exsd 26 Sep 2006 17:54:12 -0000 >@@ -60,22 +60,42 @@ > </documentation> > </annotation> > </attribute> >- <attribute name="delegate" type="string" use="required"> >+ <attribute name="delegate" type="string"> > <annotation> > <documentation> > 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. >+ >+With new API changes for 3.3M3 the delegate should be contributed via the <code>launchDelegates</code> extension point >+<p> >+<strong>EXPERIMENTAL</strong>. This attribute has been deprecated as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team. >+</p> > </documentation> > <appInfo> >- <meta.attribute kind="java" basedOn="org.eclipse.debug.core.model.ILaunchConfigurationDelegate"/> >+ <meta.attribute kind="java" basedOn="org.eclipse.debug.core.model.ILaunchConfigurationDelegate" deprecated="true"/> > </appInfo> > </annotation> > </attribute> >- <attribute name="modes" type="string" use="required"> >+ <attribute name="modes" type="string"> > <annotation> > <documentation> > specifies a comma-separated list of the modes this type of lauch configuration supports - "run" and/or "debug". >+ >+With new API changes for 3.3M3 the delegate should be contributed via the <code>launchDelegates</code> extension point >+ >+<p> >+<strong>EXPERIMENTAL</strong>. This attribute has been deprecated as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team. >+</p> > </documentation> >+ <appInfo> >+ <meta.attribute deprecated="true"/> >+ </appInfo> > </annotation> > </attribute> > <attribute name="name" type="string" use="required"> >@@ -106,14 +126,24 @@ > <annotation> > <documentation> > The unique identifier of a sourcePathComputer extension that is used to compute a default source lookup path for launch configurations of this type. This atttribute was added in the 3.0 release. >+ >+With new API changes for 3.3M3 the delegate should be contributed via the <code>launchDelegates</code> extension point > </documentation> >+ <appInfo> >+ <meta.attribute deprecated="true"/> >+ </appInfo> > </annotation> > </attribute> > <attribute name="sourceLocatorId" type="string"> > <annotation> > <documentation> > The unique identifier of a sourceLocator extension that is used to create the source locator for sessions launched using launch configurations of this type. This atttribute was added in the 3.0 release. >+ >+With new API changes for 3.3M3 the delegate should be contributed via the <code>launchDelegates</code> extension point > </documentation> >+ <appInfo> >+ <meta.attribute deprecated="true"/> >+ </appInfo> > </annotation> > </attribute> > <attribute name="migrationDelegate" type="string"> >@@ -126,6 +156,25 @@ > </appInfo> > </annotation> > </attribute> >+ <attribute name="icon" type="string"> >+ <annotation> >+ <documentation> >+ The id of the icon for this launch configuraiton type. >+ >+since 3.3 >+ >+<p> >+<strong>EXPERIMENTAL</strong>. This element has been added as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team. >+</p> >+ </documentation> >+ <appInfo> >+ <meta.attribute kind="resource"/> >+ </appInfo> >+ </annotation> >+ </attribute> > </complexType> > </element> > >Index: schema/launchDelegates.exsd >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/schema/launchDelegates.exsd,v >retrieving revision 1.9 >diff -u -r1.9 launchDelegates.exsd >--- schema/launchDelegates.exsd 13 Sep 2006 19:09:07 -0000 1.9 >+++ schema/launchDelegates.exsd 26 Sep 2006 17:54:12 -0000 >@@ -1,155 +1,207 @@ >-<?xml version='1.0' encoding='UTF-8'?> >-<!-- Schema file written by PDE --> >-<schema targetNamespace="org.eclipse.debug.core"> >-<annotation> >- <appInfo> >- <meta.schema plugin="org.eclipse.debug.core" id="launchDelegates" name="Launch Delegates"/> >- </appInfo> >- <documentation> >- This extension point provides a mechanism for contributing a launch delegate to an existing launch configuration type for one or more launch modes. Since launch modes are extensible, it may be neccessary to contribute additional launch delegates to an existing launch configuration type. Each launch delegate is contributed for a specific launch configuration type. A launch delegate supports one or more launch modes, and specifies a delegate responsible for the implementation of launching. >- </documentation> >- </annotation> >- >- <element name="extension"> >- <complexType> >- <sequence> >- <element ref="launchDelegate" minOccurs="1" maxOccurs="unbounded"/> >- </sequence> >- <attribute name="point" type="string" use="required"> >- <annotation> >- <documentation> >- a fully qualified identifier of the target extension point >- </documentation> >- </annotation> >- </attribute> >- <attribute name="id" type="string"> >- <annotation> >- <documentation> >- an optional identifier of the extension instance >- </documentation> >- </annotation> >- </attribute> >- <attribute name="name" type="string"> >- <annotation> >- <documentation> >- an optional name of the extension instance >- </documentation> >- </annotation> >- </attribute> >- </complexType> >- </element> >- >- <element name="launchDelegate"> >- <annotation> >- <appInfo> >- <meta.element labelAttribute="name"/> >- </appInfo> >- </annotation> >- <complexType> >- <sequence> >- </sequence> >- <attribute name="id" type="string" use="required"> >- <annotation> >- <documentation> >- specifies a unique identifier for this launch delegate. >- </documentation> >- </annotation> >- </attribute> >- <attribute name="delegate" type="string" use="required"> >- <annotation> >- <documentation> >- specifies the fully qualified name of the Java class that implements <code>ILaunchConfigurationDelegate</code>. >-Launch configuration instances of this delegate's type will delegate to instances of this class to perform launching. >- </documentation> >- <appInfo> >- <meta.attribute kind="java" basedOn="org.eclipse.debug.core.model.ILaunchConfigurationDelegate"/> >- </appInfo> >- </annotation> >- </attribute> >- <attribute name="modes" type="string" use="required"> >- <annotation> >- <documentation> >- specifies a comma-separated list of the modes this lauch delegate supports. >- </documentation> >- </annotation> >- </attribute> >- <attribute name="type" type="string" use="required"> >- <annotation> >- <documentation> >- identifier of an existing launch configuration type that this launch delegate is capable of launching. >- </documentation> >- </annotation> >- </attribute> >- <attribute name="sourcePathComputerId" type="string"> >- <annotation> >- <documentation> >- The unique identifier of a sourcePathComputer extension that is used to compute a default source lookup path for launch configurations of this type. Since 3.1, this attribute cab be specified in a launchDelegate extension when unspecified in the assocaited launchConfigurationType extension. Only one source path computer can be specified per launch configuration type. >- </documentation> >- </annotation> >- </attribute> >- <attribute name="sourceLocatorId" type="string"> >- <annotation> >- <documentation> >- The unique identifier of a sourceLocator extension that is used to create the source locator for sessions launched using launch configurations of this type. Since 3.1, this attribute can be specified in a launchDelegate extension when unspecified in the assocaited launchConfigurationType extension. Only one source locater can be specified per launch configuration type. >- </documentation> >- </annotation> >- </attribute> >- </complexType> >- </element> >- >- <annotation> >- <appInfo> >- <meta.section type="since"/> >- </appInfo> >- <documentation> >- 3.0 >- </documentation> >- </annotation> >- >- <annotation> >- <appInfo> >- <meta.section type="examples"/> >- </appInfo> >- <documentation> >- The following is an example of a launch delegate extension point: >- >-<p> >-<pre> >- <extension point="org.eclipse.debug.core.launchDelegates"> >- <launchDelegate >- id="com.example.ExampleProfileDelegate" >- delegate="com.example.ExampleProfileDelegate" >- type="org.eclipse.jdt.launching.localJavaApplication" >- modes="profile"> >- </launchDelegate> >- </extension> >-</pre> >-</p> >- >-In the example above, the specified launch delegate is contributed to launch Java applications in profile mode. >- </documentation> >- </annotation> >- >- <annotation> >- <appInfo> >- <meta.section type="apiInfo"/> >- </appInfo> >- <documentation> >- Value of the attribute <b>delegate</b> must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.debug.core.model.ILaunchConfigurationDelegate</b>. >- </documentation> >- </annotation> >- >- <annotation> >- <appInfo> >- <meta.section type="copyright"/> >- </appInfo> >- <documentation> >- Copyright (c) 2000, 2005 IBM Corporation and others.<br> >-All rights reserved. This program and the accompanying materials are made >-available under the terms of the Eclipse Public License v1.0 which >-accompanies this distribution, and is available at >-<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> >- </documentation> >- </annotation> >- >-</schema> >+<?xml version='1.0' encoding='UTF-8'?> >+<!-- Schema file written by PDE --> >+<schema targetNamespace="org.eclipse.debug.core"> >+<annotation> >+ <appInfo> >+ <meta.schema plugin="org.eclipse.debug.core" id="launchDelegates" name="Launch Delegates"/> >+ </appInfo> >+ <documentation> >+ This extension point provides a mechanism for contributing a launch delegate to an existing launch configuration type for one or more launch modes. Since launch modes are extensible, it may be neccessary to contribute additional launch delegates to an existing launch configuration type. Each launch delegate is contributed for a specific launch configuration type. A launch delegate supports one or more launch modes, and specifies a delegate responsible for the implementation of launching. >+ </documentation> >+ </annotation> >+ >+ <element name="extension"> >+ <complexType> >+ <sequence> >+ <element ref="launchDelegate" minOccurs="1" maxOccurs="unbounded"/> >+ </sequence> >+ <attribute name="point" type="string" use="required"> >+ <annotation> >+ <documentation> >+ a fully qualified identifier of the target extension point >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="id" type="string"> >+ <annotation> >+ <documentation> >+ an optional identifier of the extension instance >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="name" type="string"> >+ <annotation> >+ <documentation> >+ an optional name of the extension instance >+ </documentation> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <element name="launchDelegate"> >+ <annotation> >+ <appInfo> >+ <meta.element labelAttribute="name"/> >+ </appInfo> >+ </annotation> >+ <complexType> >+ <sequence minOccurs="0" maxOccurs="unbounded"> >+ </sequence> >+ <attribute name="id" type="string" use="required"> >+ <annotation> >+ <documentation> >+ specifies a unique identifier for this launch delegate. >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="name" type="string"> >+ <annotation> >+ <documentation> >+ specifies a human readable name for this delegate >+ >+since 3.3M3 >+ >+<p> >+<strong>EXPERIMENTAL</strong>. This attribute has been added as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team. >+</p> >+ </documentation> >+ <appInfo> >+ <meta.attribute translatable="true"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ <attribute name="delegate" type="string" use="required"> >+ <annotation> >+ <documentation> >+ specifies the fully qualified name of the Java class that implements <code>ILaunchConfigurationDelegate</code>. >+Launch configuration instances of this delegate's type will delegate to instances of this class to perform launching. >+ </documentation> >+ <appInfo> >+ <meta.attribute kind="java" basedOn="org.eclipse.debug.core.model.ILaunchConfigurationDelegate"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ <attribute name="modes" type="string"> >+ <annotation> >+ <documentation> >+ specifies a comma-separated list of the modes this lauch delegate supports. >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="type" type="string"> >+ <annotation> >+ <documentation> >+ identifier of an existing launch configuration type that this launch delegate is capable of launching. >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="sourcePathComputerId" type="string"> >+ <annotation> >+ <documentation> >+ The unique identifier of a sourcePathComputer extension that is used to compute a default source lookup path for launch configurations of this type. Since 3.1, this attribute cab be specified in a launchDelegate extension when unspecified in the assocaited launchConfigurationType extension. Only one source path computer can be specified per launch configuration type. >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="sourceLocatorId" type="string"> >+ <annotation> >+ <documentation> >+ The unique identifier of a sourceLocator extension that is used to create the source locator for sessions launched using launch configurations of this type. Since 3.1, this attribute can be specified in a launchDelegate extension when unspecified in the assocaited launchConfigurationType extension. Only one source locater can be specified per launch configuration type. >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="options" type="string"> >+ <annotation> >+ <documentation> >+ This attribute allows contributors to sepcify what options this delegate can apply to other than the specified modes >+ >+since 3.3M3 >+ >+<p> >+<strong>EXPERIMENTAL</strong>. This attribute has been added as >+part of a work in progress. There is no guarantee that this API will >+remain unchanged during the 3.3 release cycle. Please do not use this API >+without consulting with the Platform/Debug team. >+</p> >+ </documentation> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="since"/> >+ </appInfo> >+ <documentation> >+ 3.0 >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="examples"/> >+ </appInfo> >+ <documentation> >+ The following is an example of a launch delegate extension point: >+ >+<p> >+<pre> >+ <extension point="org.eclipse.debug.core.launchDelegates"> >+ <launchDelegate >+ id="com.example.ExampleProfileDelegate" >+ delegate="com.example.ExampleProfileDelegate" >+ type="org.eclipse.jdt.launching.localJavaApplication" >+ modes="profile"> >+ </launchDelegate> >+ </extension> >+</pre> >+</p> >+ >+In the example above, the specified launch delegate is contributed to launch Java applications in profile mode. >+ >+The previous example has been deprecated as of 3.3M3, but left in for brevity. See the following example for new usage. >+ >+<p> >+<pre> >+<extension point="org.eclipse.debug.core.launchDelegates"> >+ <launchDelegate >+ delegate="org.eclipse.jdt.launching.JavaLaunchDelegate" >+ id="org.eclipse.jdt.launching.JavaLaunchDelegate" >+ type="org.eclipse.jdt.launching.localJavaApplication" >+ modes="profile"> >+ </launchDelegate> >+ </extension> >+</pre> >+</p> >+ >+In 3.3 mode-based launching has been deprecated, and in its place we have provided launching with options. Options are contributed via the <code>launchOptions</code> extension point and can be referenced here to describe what options your launch delegate supports. Options are further arranged in the form of expressions that can be evaluated to determine suitablility of your delegate for a variety of combinations of options. >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="apiInfo"/> >+ </appInfo> >+ <documentation> >+ Value of the attribute <b>delegate</b> must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.debug.core.model.ILaunchConfigurationDelegate</b>. >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="copyright"/> >+ </appInfo> >+ <documentation> >+ Copyright (c) 2000, 2005 IBM Corporation and others.<br> >+All rights reserved. This program and the accompanying materials are made >+available under the terms of the Eclipse Public License v1.0 which >+accompanies this distribution, and is available at >+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> >+ </documentation> >+ </annotation> >+ >+</schema> >Index: schema/launchModes.exsd >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/schema/launchModes.exsd,v >retrieving revision 1.9 >diff -u -r1.9 launchModes.exsd >--- schema/launchModes.exsd 25 Jan 2006 21:52:43 -0000 1.9 >+++ schema/launchModes.exsd 26 Sep 2006 17:54:12 -0000 >@@ -1,134 +1,120 @@ >-<?xml version='1.0' encoding='UTF-8'?> >-<!-- Schema file written by PDE --> >-<schema targetNamespace="org.eclipse.debug.core"> >-<annotation> >- <appInfo> >- <meta.schema plugin="org.eclipse.debug.core" id="launchModes" name="Launch Modes"/> >- </appInfo> >- <documentation> >- This extension point provides a mechanism for contributing launch modes to the debug platform. The debug platform defines modes for "run", "debug", and "profile". >- </documentation> >- </annotation> >- >- <element name="extension"> >- <complexType> >- <sequence> >- <element ref="launchMode" minOccurs="0" maxOccurs="unbounded"/> >- </sequence> >- <attribute name="point" type="string" use="required"> >- <annotation> >- <documentation> >- a fully qualified identifier of the target extension point >- </documentation> >- </annotation> >- </attribute> >- <attribute name="id" type="string"> >- <annotation> >- <documentation> >- an optional identifier of the extension instance >- </documentation> >- </annotation> >- </attribute> >- <attribute name="name" type="string"> >- <annotation> >- <documentation> >- an optional name of the extension instance >- </documentation> >- </annotation> >- </attribute> >- </complexType> >- </element> >- >- <element name="launchMode"> >- <annotation> >- <appInfo> >- <meta.element labelAttribute="name"/> >- </appInfo> >- </annotation> >- <complexType> >- <sequence> >- </sequence> >- <attribute name="mode" type="string" use="required"> >- <annotation> >- <documentation> >- specifies a unique identifier for this launch mode. The launch modes contributed by the debug plaform are "run", "debug", and "profile". >- </documentation> >- </annotation> >- </attribute> >- <attribute name="label" type="string" use="required"> >- <annotation> >- <documentation> >- A human-readable label that describes the launch mode >- </documentation> >- <appInfo> >- <meta.attribute translatable="true"/> >- </appInfo> >- </annotation> >- </attribute> >- <attribute name="launchAsLabel" type="string"> >- <annotation> >- <documentation> >- A human-readable label to be used in a launch cascade menu. For example "Run As". This attribute was added in 3.2 to allow the label to be properly externalized. When unspecified, a default label is created via concatenation. >- </documentation> >- <appInfo> >- <meta.attribute translatable="true"/> >- </appInfo> >- </annotation> >- </attribute> >- </complexType> >- </element> >- >- <annotation> >- <appInfo> >- <meta.section type="since"/> >- </appInfo> >- <documentation> >- 3.0 >- </documentation> >- </annotation> >- >- <annotation> >- <appInfo> >- <meta.section type="examples"/> >- </appInfo> >- <documentation> >- The following is an example of a launch delegate extension point: >- >-<p> >-<pre> >- <extension point="org.eclipse.debug.core.launchModes"> >- <launchMode >- mode="profile" >- label="Profile"> >- </launchMode> >- </extension> >-</pre> >-</p> >- >-In the example above, the profile launch mode is contributed. >- </documentation> >- </annotation> >- >- <annotation> >- <appInfo> >- <meta.section type="apiInfo"/> >- </appInfo> >- <documentation> >- >- </documentation> >- </annotation> >- >- <annotation> >- <appInfo> >- <meta.section type="copyright"/> >- </appInfo> >- <documentation> >- Copyright (c) 2000, 2005 IBM Corporation and others.<br> >-All rights reserved. This program and the accompanying materials are made >-available under the terms of the Eclipse Public License v1.0 which >-accompanies this distribution, and is available at >-<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> >- </documentation> >- </annotation> >- >-</schema> >+<?xml version='1.0' encoding='UTF-8'?> >+<!-- Schema file written by PDE --> >+<schema targetNamespace="org.eclipse.debug.core"> >+<annotation> >+ <appInfo> >+ <meta.schema plugin="org.eclipse.debug.core" id="launchModes" name="Launch Modes"/> >+ </appInfo> >+ <documentation> >+ This extension point provides a mechanism for contributing launch modes to the debug platform. The debug platform defines modes for "run", "debug", and "profile". >+ </documentation> >+ </annotation> >+ >+ <element name="extension"> >+ <complexType> >+ <sequence> >+ <element ref="launchMode" minOccurs="0" maxOccurs="unbounded"/> >+ </sequence> >+ <attribute name="point" type="string" use="required"> >+ <annotation> >+ <documentation> >+ a fully qualified identifier of the target extension point >+ </documentation> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <element name="launchMode"> >+ <annotation> >+ <appInfo> >+ <meta.element labelAttribute="name"/> >+ </appInfo> >+ </annotation> >+ <complexType> >+ <sequence> >+ </sequence> >+ <attribute name="mode" type="string" use="required"> >+ <annotation> >+ <documentation> >+ specifies a unique identifier for this launch mode. The launch modes contributed by the debug plaform are "run", "debug", and "profile". >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="label" type="string" use="required"> >+ <annotation> >+ <documentation> >+ A human-readable label that describes the launch mode >+ </documentation> >+ <appInfo> >+ <meta.attribute translatable="true"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ <attribute name="launchAsLabel" type="string"> >+ <annotation> >+ <documentation> >+ A human-readable label to be used in a launch cascade menu. For example "Run As". This attribute was added in 3.2 to allow the label to be properly externalized. When unspecified, a default label is created via concatenation. >+ </documentation> >+ <appInfo> >+ <meta.attribute translatable="true"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="since"/> >+ </appInfo> >+ <documentation> >+ 3.0 >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="examples"/> >+ </appInfo> >+ <documentation> >+ The following is an example of a launch delegate extension point: >+ >+<p> >+<pre> >+ <extension point="org.eclipse.debug.core.launchModes"> >+ <launchMode >+ mode="profile" >+ label="Profile"> >+ </launchMode> >+ </extension> >+</pre> >+</p> >+ >+In the example above, the profile launch mode is contributed. >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="apiInfo"/> >+ </appInfo> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="copyright"/> >+ </appInfo> >+ <documentation> >+ Copyright (c) 2000, 2005 IBM Corporation and others.<br> >+All rights reserved. This program and the accompanying materials are made >+available under the terms of the Eclipse Public License v1.0 which >+accompanies this distribution, and is available at >+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> >+ </documentation> >+ </annotation> >+ >+</schema> >Index: buildnotes_platform-debug.html >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.core/buildnotes_platform-debug.html,v >retrieving revision 1.1641 >diff -u -r1.1641 buildnotes_platform-debug.html >--- buildnotes_platform-debug.html 26 Sep 2006 17:00:18 -0000 1.1641 >+++ buildnotes_platform-debug.html 26 Sep 2006 17:54:11 -0000 >@@ -20,13 +20,44 @@ > <li>deprecated <code>IDebugUIConstants.ATTR_CONSOLE_ENCODING</code>.</li> > <li>added <code>DebugUITools.getLastLaunch(String id)</code> - provides access to the last launch in > each launch group.</li> >- <li>Add <code>launchOptions</code> schema -- provides a new mechanism for providing launch options to the launching framework</li> >- <li>Added <code>ILaunchOption</code> -- which describes a single contributed launch option within the launch manager</li> >- <li>Added <code>ILaunchManager.getLaunchOptions()</code> -- returns and array of all of the <code>ILaunchOptions</code> registered with the launch manager</li> >- <li>Added <code>ILaunchManager.getLaunchOption(String id)</code> -- returns the <code>ILaunchOption</code> associated with the given unique id, or <code>null</code></li> > </ul> > >-<h2>Oct 3, 2006</h2> >+<h2>Summary of Launch Option conversion changes in 3.3</h2> >+<ul> >+<li>Added <code>launchOptions</code> schema -- provides a new mechanism for providing launch options to the launching framework</li> >+ <li>Added interface/class <code>ILaunchOption</code> -- which describes a single contributed launch option within the launch manager</li> >+ <li>Added method <code>ILaunchManager.getLaunchOptions()</code> -- returns and array of all of the <code>ILaunchOptions</code> registered with the launch manager</li> >+ <li>Added method <code>ILaunchManager.getLaunchOption(String id)</code> -- returns the <code>ILaunchOption</code> associated with the given unique id, or <code>null</code></li> >+ <li>Added interface/class <code>ILaunchOption</code> -- which describes a single contributed launch option within the launch manager</li> >+ <li>Added method <code>ILaunchConfiguration.getOptions()</code> -- returns the comma seperated listiong of options</li> >+ <li>Added method <code>ILaunchConfigurationWorkingCopy.setOptions(String[] options)</code> -- allows the options to be set in the launch configuration</li> >+ <li>Added method <code>ILaunchManager.getLaunchDelegates()</code> -- returns all of the registered launch delegates</li> >+ <li>Added method <code>ILaunchManager.getLaunchDelegates(String typeid, String mode, String[] options)</code> -- returns the >+ list of delegates that apply to the the specifed mode, config type id and options (if any)</li> >+ <li>Added constant <code>ATTR_LAUNCH_OPTIONS</code> to <code>LaunchConfiguration</code></li> >+ <li>Added method <code>ILaunchConfigurationType.getContributorName()</code> -- returns the name of the contributor of the type</li> >+ <li>Added method <code>ILaunchConfigurationType.getImageDescriptorPath()</code> -- returns the path of the image descriptor (if provided)</li> >+ <li>Added method <code>ILaunchConfigurationType.getDelegate(String mode, String[] options)</code> -- returns the launch delegate for the specified mode and options</li> >+ <li>Added class <code>ConfigurationElementConstants</code> -- contains common constants for getting child elements of <code>IConfigurationElements</code> >+ <li>Added internal method <code>LaunchManager.initializeLaunchDelegates()</code> -- loads the listing of delegates</li> >+ <li>Added internal method <code>LaunchManager.initializeLaunchOptions()</code> -- loads the listing of launch options</li> >+ <li>Deprecated method <code>ILaunchConfigurationType.getDelegate(String mode)</code> -- in favour of the new <code>getDelegate(String mode, String[] options) method</code></li> >+ <li>Deprecated attribute 'delegate' in <code>launchConfigurationTypes</code> schema, in favour of contributing delegates via the <code>launchDelegates</code> extension point</li> >+ <li>Deprecated attribute 'modes' in <code>launchConfigurationTypes</code> schema, in favour of contributing modes via the <code>launchDelegates</code> extension point</li> >+ <li>Deprecated attribute 'sourcePathComputerId' in <code>launchConfigurationTypes</code> schema, in favour of contributing it via the <code>launchDelegates</code> extension point</li> >+ <li>Deprecated attribute 'sourceLocatorId' in <code>launchConfigurationTypes</code> schema, in favour of contributing it via the <code>launchDelegates</code> extension point</li> >+ <li>Added attrbute 'icon' in <code>launchConfigurationTypes</code> schema, in favour of contributing a seperate extension <code>launchConfigurationTypeImages</code></li> >+ <li>Added attribute 'name' to the <code>launchDelegates</code> schema, providing a human readable name for the delegate. To be used in duplicate resolution</li> >+ <li>Added attribute 'options' to the <code>launchDelegates</code> schema, providing the ability to specify launch options that this delegate can support</li> >+ <li>Added interface/class <code>ILaunchConfigurationTabExtension</code> -- provides a proxy to a contributed tab <code>IConfigurationElement</code> element</li> >+ <li>Added internal method <code>LauncConfigurationPtresentationManager.initializeContributedTabExtensions</code> -- loads contributed tabs</li> >+ <li>Added method <code>LaunchConfigurationPresentationManager.createContributedTabs(String groupid)</code> -- lazily creates the tabs for a specified tabgroup id</li> >+ <li>Added constant <code>EXTENSION_POINT_CONTRIBUTED_LAUNCH_TABS</code> to <code>IDebugUIConstants</code></li> >+ <li>Added class <code>LaunchConfigurationTabGroupWrapper</code> -- which is used to wrap an existing tab group with its contributed tabs</li> >+ <li>Deprecated <code>launchConfigurationTypeImages</code> extension point</li> >+</ul> >+ >+h2>Oct 3, 2006</h2> > <h3>Problem Reports Fixed</h3> > <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158760">158760</a>: Warning in latest nightly build and integration build<br> > >Index: core/org/eclipse/debug/core/ILaunchDelegate.java >=================================================================== >RCS file: core/org/eclipse/debug/core/ILaunchDelegate.java >diff -N core/org/eclipse/debug/core/ILaunchDelegate.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ core/org/eclipse/debug/core/ILaunchDelegate.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,97 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.core; >+ >+import java.util.Set; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; >+ >+/** >+ * This interface describes a launch delegate >+ * Clients can contribute launch delegate through the <code>launchDelegates</code> extension point >+ * >+ * Example contribution of the local java launch delegate >+ * <pre> >+ * <launchDelegate >+ delegate="org.eclipse.jdt.launching.JavaLaunchDelegate" >+ id="org.eclipse.jdt.launching.JavaLaunchDelegate"> >+ <appliesTo >+ type="org.eclipse.jdt.launching.localJavaApplication"> >+ <option >+ option="debug"> >+ </option> >+ </appliesTo> >+ </launchDelegate> >+ * </pre> >+ * >+ * Clients are NOT intended to implement this interface >+ * @since 3.3 >+ */ >+public interface ILaunchDelegate { >+ >+ /** >+ * @return returns the unique id of the delegate >+ */ >+ public String getIdentifier(); >+ >+ /** >+ * @return the launch delegate >+ */ >+ public ILaunchConfigurationDelegate getDelegate() throws CoreException; >+ >+ /** >+ * One delegate definition can now be associated with more than on launch configuration type. >+ * In this case we need to return them all. In the deprecated case when one delegate is associated >+ * with one type, we only need return the one (a set of only one element) >+ * @return the set of associated launch configuration type ids (String) or the empty set, never <code>null</code> >+ */ >+ public String getLaunchConfigurationType(); >+ >+ /** >+ * @return the associated source locator id or <code>null</code> if not provided >+ */ >+ public String getSourceLocatorId(); >+ >+ /** >+ * @return the associated source path computer id or <code>null</code> if not provided >+ */ >+ public String getSourcePathComputerId(); >+ >+ /** >+ * @return the options associated with this delegate. If no options are specified an empty set is >+ * returned, never <code>null</code>. >+ */ >+ public Set getOptions(); >+ >+ /** >+ * This method is provided as a backward compatibility measure to allow access to modes, if mode-based >+ * launching is still being used. >+ * >+ * @return a set of modes for this delegate or the empty set if none are found, never <code>null</code>. >+ */ >+ public Set getModes(); >+ >+ /** >+ * used to determine if the delegate applies to the specified launch configuration type via its id only (no expression evaluation is done) >+ * @param configtypeId the id of the <code>ILaunchConfigurationType</code>. >+ * @return true if the delegate applies to the associated config type, false otherwise >+ */ >+ public boolean appliesTo(String configtypeId); >+ >+ /** >+ * used to determine if the delegate applies to the specified launch configuration type via its id and mode (no expression evaluation is done) >+ * @param configtypeId the id of the <code>ILaunchConfigurationType</code>. >+ * @param mode the mode >+ * @return true if the delegate applies to the associated config type, false otherwise >+ */ >+ public boolean appliesTo(String configtypeId, String mode); >+} >Index: core/org/eclipse/debug/internal/core/ConfigurationElementConstants.java >=================================================================== >RCS file: core/org/eclipse/debug/internal/core/ConfigurationElementConstants.java >diff -N core/org/eclipse/debug/internal/core/ConfigurationElementConstants.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ core/org/eclipse/debug/internal/core/ConfigurationElementConstants.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,119 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.internal.core; >+ >+/** >+ * This class provides a repository for the names of <code>IConfigurationElement</code> child node ids. >+ * @since 3.3 >+ * <p> >+ * <strong>EXPERIMENTAL</strong>. This class has been added as >+ * part of a work in progress. There is no guarantee that this API will >+ * remain unchanged during the 3.3 release cycle. Please do not use this API >+ * without consulting with the Platform/Debug team. >+ * </p> >+ */ >+public class ConfigurationElementConstants { >+ >+ /** >+ * The id node name for a configuration element >+ */ >+ public static final String ID = "id"; //$NON-NLS-1$ >+ >+ /** >+ * the name node name for a configuration element >+ */ >+ public static final String NAME = "name"; //$NON-NLS-1$ >+ >+ /** >+ * the category node name for a configuration element >+ */ >+ public static final String CATEGORY = "category"; //$NON-NLS-1$ >+ >+ /** >+ * the launchMode node name for a configuration element >+ */ >+ public static final String LAUNCH_MODE = "launchMode"; //$NON-NLS-1$ >+ >+ /** >+ * the description node name for a configuration element >+ */ >+ public static final String DESCRIPTION = "description"; //$NON-NLS-1$ >+ >+ /** >+ * the helpContextId node name for a configuration element >+ */ >+ public static final String HELP_CONTEXT_ID = "helpContextId"; //$NON-NLS-1$ >+ >+ /** >+ * the icon node name for a configuration element >+ */ >+ public static final String ICON = "icon"; //$NON-NLS-1$ >+ >+ /** >+ * the public node name for a configuration element >+ */ >+ public static final String PUBLIC = "public"; //$NON-NLS-1$ >+ >+ /** >+ * the perspective node name for a configuration element >+ */ >+ public static final String PERSPECTIVE = "perspective"; //$NON-NLS-1$ >+ >+ /** >+ * the modes node name for a configuration element >+ */ >+ public static final String MODES = "modes"; //$NON-NLS-1$ >+ >+ /** >+ * the mode node name for a configuration element >+ */ >+ public static final String MODE = "mode"; //$NON-NLS-1$ >+ >+ /** >+ * the type node name for a configuration element >+ */ >+ public static final String TYPE = "type"; //$NON-NLS-1$ >+ >+ /** >+ * the option node name for a configuration element >+ */ >+ public static final String OPTIONS = "options"; //$NON-NLS-1$ >+ >+ /** >+ * the delegate node name for a configuration element >+ */ >+ public static final String DELEGATE = "delegate"; //$NON-NLS-1$ >+ >+ /** >+ * the group node name for a configuration element >+ */ >+ public static final String GROUP = "group"; //$NON-NLS-1$ >+ >+ /** >+ * the class node name for a configuration element >+ */ >+ public static final String CLASS = "class"; //$NON-NLS-1$ >+ >+ /** >+ * the sourcePathComputerId node name for a configuration element >+ */ >+ public static final String SOURCE_PATH_COMPUTER = "sourcePathComputerId"; //$NON-NLS-1$ >+ >+ /** >+ * the sourceLocatorId node name for a configuration element >+ */ >+ public static final String SOURCE_LOCATOR = "sourceLocatorId"; //$NON-NLS-1$ >+ >+ /** >+ * the migrationDelegate node name for a configuration element >+ */ >+ public static final String MIGRATION_DELEGATE = "migrationDelegate"; //$NON-NLS-1$ >+} >Index: core/org/eclipse/debug/internal/core/LaunchDelegate.java >=================================================================== >RCS file: core/org/eclipse/debug/internal/core/LaunchDelegate.java >diff -N core/org/eclipse/debug/internal/core/LaunchDelegate.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ core/org/eclipse/debug/internal/core/LaunchDelegate.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,154 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.internal.core; >+ >+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.ILaunchDelegate; >+import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; >+ >+import com.ibm.icu.text.MessageFormat; >+ >+/** >+ * Proxy to a launch delegate extension >+ * >+ * @since 3.3 >+ */ >+public class LaunchDelegate implements ILaunchDelegate { >+ >+ /** >+ * The configuration element for this delegate >+ */ >+ private IConfigurationElement fElement = null; >+ >+ /** >+ * The cached delegate. Remains null until asked for, then persisted >+ */ >+ private ILaunchConfigurationDelegate fDelegate = null; >+ >+ //lists of cached entries >+ private HashSet fModes = null; >+ private HashSet fOptions = null; >+ private String fType = null; >+ >+ /** >+ * Constructor >+ * @param element the configuration element to associate with this launch delegate >+ */ >+ public LaunchDelegate(IConfigurationElement element) { >+ fElement = element; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getDelegate() >+ */ >+ public ILaunchConfigurationDelegate getDelegate() throws CoreException { >+ if(fDelegate == null) { >+ Object obj = fElement.createExecutableExtension(ConfigurationElementConstants.DELEGATE); >+ if(obj instanceof ILaunchConfigurationDelegate) { >+ return (ILaunchConfigurationDelegate)obj; >+ } >+ throw new CoreException(new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.INTERNAL_ERROR, MessageFormat.format(DebugCoreMessages.LaunchConfigurationType_Launch_delegate_for__0__does_not_implement_required_interface_ILaunchConfigurationDelegate__1, new String[]{getIdentifier()}), null)); >+ } >+ return fDelegate; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getIdentifier() >+ */ >+ public String getIdentifier() { >+ return fElement.getAttribute(ConfigurationElementConstants.ID); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getLaunchConfigurationType() >+ */ >+ public String getLaunchConfigurationType() { >+ if(fType == null) { >+ //fall back to single association if no appliesTo >+ fType = fElement.getAttribute(ConfigurationElementConstants.TYPE); >+ if(fType == null) { >+ //the case when we have passed a launch configuration type to the launch delegate >+ fType = fElement.getAttribute(ConfigurationElementConstants.ID); >+ } >+ } >+ return fType; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getOptions() >+ */ >+ public Set getOptions() { >+ if(fOptions == null) { >+ fOptions = new HashSet(); >+ String option = fElement.getAttribute(ConfigurationElementConstants.OPTIONS); >+ if(option != null) { >+ String[] options = option.split(","); //$NON-NLS-1$ >+ for(int i = 0; i < options.length; i++) { >+ fOptions.add(options[i]); >+ } >+ } >+ } >+ return fOptions; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getModes() >+ */ >+ public Set getModes() { >+ if (fModes == null) { >+ fModes = new HashSet(); >+ String modes = fElement.getAttribute(ConfigurationElementConstants.MODES); >+ if (modes != null) { >+ String[] strings = modes.split(","); //$NON-NLS-1$ >+ for (int i = 0; i < strings.length; i++) { >+ fModes.add(strings[i].trim()); >+ } >+ } >+ } >+ return fModes; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getSourceLocatorId() >+ */ >+ public String getSourceLocatorId() { >+ return fElement.getAttribute(ConfigurationElementConstants.SOURCE_LOCATOR); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#getSourcePathComputerId() >+ */ >+ public String getSourcePathComputerId() { >+ return fElement.getAttribute(ConfigurationElementConstants.SOURCE_PATH_COMPUTER); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#appliesTo(java.lang.String) >+ */ >+ public boolean appliesTo(String configtypeId) { >+ return getLaunchConfigurationType().equals(configtypeId); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.debug.core.ILaunchDelegate#appliesTo(java.lang.String, java.lang.String) >+ */ >+ public boolean appliesTo(String configtypeId, String mode) { >+ return getLaunchConfigurationType().equals(configtypeId) & getModes().contains(mode); >+ } >+ >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 157059
:
50306
|
50933
|
51706
|
51719
|
51935
|
51964
|
52144
|
52498
|
52620
|
53657
|
54555
|
54562
|
54584