diff options
author | Darin Wright | 2004-03-17 21:37:35 +0000 |
---|---|---|
committer | Darin Wright | 2004-03-17 21:37:35 +0000 |
commit | 053b19acd0afc7905f62f7b3dd1da39b5ce28592 (patch) | |
tree | 4b3d5715e18a88882e35dbb9975ab4b0475cc637 | |
parent | 2f004b82c9ae6dbd849d96bcfebf844bbd39dffd (diff) | |
download | eclipse.platform.debug-053b19acd0afc7905f62f7b3dd1da39b5ce28592.tar.gz eclipse.platform.debug-053b19acd0afc7905f62f7b3dd1da39b5ce28592.tar.xz eclipse.platform.debug-053b19acd0afc7905f62f7b3dd1da39b5ce28592.zip |
Bug 29890 - Debug Platform Source Lookup Facilites
27 files changed, 512 insertions, 402 deletions
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/AbstractSourceLookupDirector.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/AbstractSourceLookupDirector.java index 1040dede1..45eaf348b 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/AbstractSourceLookupDirector.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/AbstractSourceLookupDirector.java @@ -17,13 +17,16 @@ import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.ISafeRunnable; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationListener; import org.eclipse.debug.core.ILaunchListener; import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.debug.core.IStatusHandler; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.internal.core.sourcelookup.containers.DefaultSourceContainer; import org.w3c.dom.Document; @@ -71,6 +74,9 @@ public abstract class AbstractSourceLookupDirector implements ISourceLookupDirec //whether duplicates should be searched for or not protected boolean fDuplicates = false; + protected static final IStatus fPromptStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 200, "", null); //$NON-NLS-1$//$NON-NLS-2$ + protected static final IStatus fResolveDuplicatesStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 205, "", null); //$NON-NLS-1$//$NON-NLS-2$ + // XML nodes & attributes for persistence protected static final String DIRECTOR_ROOT_NODE = "sourceLookupDirector"; //$NON-NLS-1$ protected static final String CONTAINERS_NODE = "sourceContainers"; //$NON-NLS-1$ @@ -383,7 +389,16 @@ public abstract class AbstractSourceLookupDirector implements ISourceLookupDirec * @return a single source element for the given stack frame */ public Object resolveSourceElement(IStackFrame frame, List sources) { - // TODO: use a status handler (prompter) in the UI + IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(fPromptStatus); + if (prompter != null) { + try { + Object result = prompter.handleStatus(fResolveDuplicatesStatus, new Object[]{frame, sources}); + if (result != null) { + return result; + } + } catch (CoreException e) { + } + } return sources.get(0); } @@ -469,4 +484,10 @@ public abstract class AbstractSourceLookupDirector implements ISourceLookupDirec public ISourceLookupParticipant[] getParticipants() { return (ISourceLookupParticipant[]) fParticipants.toArray(new ISourceLookupParticipant[fParticipants.size()]); } + /* (non-Javadoc) + * @see org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector#supportsSourceContainerType(org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType) + */ + public boolean supportsSourceContainerType(ISourceContainerType type) { + return true; + } } diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceContainerType.java index 3a1dc7889..cf7c226fd 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceContainerType.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceContainerType.java @@ -48,4 +48,12 @@ public interface ISourceContainerType extends ISourceContainerTypeDelegate { */ public String getId(); + /** + * Returns a short description of this source container type that can be used + * for presenetation purposes, or <code>null</code> if none. + * + * @return a short description of this source container type, or <code>null</code> + */ + public String getDescription(); + } diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceLookupDirector.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceLookupDirector.java index 4b38631bc..0feceebe3 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceLookupDirector.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/ISourceLookupDirector.java @@ -63,4 +63,14 @@ public interface ISourceLookupDirector extends IPersistableSourceLocator2 { * its set of source lookup participants. */ public void initializeParticipants(); + + /** + * Returns whether this source director supports the given type + * of source location. + * + * @param type source container type + * @return whether this source director supports the given type + * of source location + */ + public boolean supportsSourceContainerType(ISourceContainerType type); } diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java index 4cefeed18..666de6f26 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/sourcelookup/SourceContainerType.java @@ -75,4 +75,10 @@ public class SourceContainerType implements ISourceContainerType { } return fDelegate; } + /* (non-Javadoc) + * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType#getDescription() + */ + public String getDescription() { + return fElement.getAttribute("description"); //$NON-NLS-1$ + } } diff --git a/org.eclipse.debug.core/plugin.properties b/org.eclipse.debug.core/plugin.properties index d6bdedbd0..f72c05e5a 100644 --- a/org.eclipse.debug.core/plugin.properties +++ b/org.eclipse.debug.core/plugin.properties @@ -35,8 +35,14 @@ profile=&Profile env_var.description=The value of an environment variable. A variable name must be specified as an argument. containerName.archive = Archive +containerDescription.archive = An archive containerName.project = Project +containerDescription.project = A project in the workspace containerName.folder = Folder +containerDescription.folder = A folder in the workspace containerName.directory = Directory +containerDescription.directory = A directory in the local file system containerName.workspace = Workspace -containerName.default = Default
\ No newline at end of file +containerDescription.workspace = All projects in the workspace +containerName.default = Default +containerDescription.default = Default source lookup path
\ No newline at end of file diff --git a/org.eclipse.debug.core/plugin.xml b/org.eclipse.debug.core/plugin.xml index ce25b555a..a0c44bb5b 100644 --- a/org.eclipse.debug.core/plugin.xml +++ b/org.eclipse.debug.core/plugin.xml @@ -111,32 +111,38 @@ <sourceContainerType name="%containerName.project" class="org.eclipse.debug.internal.core.sourcelookup.containers.ProjectSourceContainerType" - id="org.eclipse.debug.core.containerType.project"> + id="org.eclipse.debug.core.containerType.project" + description="%containerDescription.project"> </sourceContainerType> <sourceContainerType name="%containerName.folder" class="org.eclipse.debug.internal.core.sourcelookup.containers.FolderSourceContainerType" - id="org.eclipse.debug.core.containerType.folder"> + id="org.eclipse.debug.core.containerType.folder" + description="%containerDescription.folder"> </sourceContainerType> <sourceContainerType name="%containerName.directory" class="org.eclipse.debug.internal.core.sourcelookup.containers.DirectorySourceContainerType" - id="org.eclipse.debug.core.containerType.directory"> + id="org.eclipse.debug.core.containerType.directory" + description="%containerDescription.directory"> </sourceContainerType> <sourceContainerType name="%containerName.workspace" class="org.eclipse.debug.internal.core.sourcelookup.containers.WorkspaceSourceContainerType" - id="org.eclipse.debug.core.containerType.workspace"> + id="org.eclipse.debug.core.containerType.workspace" + description="%containerDescription.workspace"> </sourceContainerType> <sourceContainerType name="%containerName.default" class="org.eclipse.debug.internal.core.sourcelookup.containers.DefaultSourceContainerType" - id="org.eclipse.debug.core.containerType.default"> + id="org.eclipse.debug.core.containerType.default" + description="%containerDescription.default"> </sourceContainerType> <sourceContainerType name="%containerName.archive" class="org.eclipse.debug.internal.core.sourcelookup.containers.ArchiveSourceContainerType" - id="org.eclipse.debug.core.containerType.archive"> + id="org.eclipse.debug.core.containerType.archive" + description="%containerDescription.archive"> </sourceContainerType> </extension> diff --git a/org.eclipse.debug.core/schema/sourceContainerTypes.exsd b/org.eclipse.debug.core/schema/sourceContainerTypes.exsd index 9e3fa5b86..e6a4e2f57 100644 --- a/org.eclipse.debug.core/schema/sourceContainerTypes.exsd +++ b/org.eclipse.debug.core/schema/sourceContainerTypes.exsd @@ -6,7 +6,7 @@ <meta.schema plugin="org.eclipse.debug.core" id="sourceContainerTypes" name="Source Container Types"/>
</appInfo>
<documentation>
- This extension point allows for an extensible set of source container types to be contributed by the debug platform
+ This extension point allows for an extensible set of source container types to be contributed by the debug platform source lookup facilities.
</documentation>
</annotation>
@@ -66,6 +66,13 @@ </appInfo>
</annotation>
</attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A short description of this source container for presentation purposes.
+ </documentation>
+ </annotation>
+ </attribute>
</complexType>
</element>
@@ -110,11 +117,11 @@ <meta.section type="copyright"/>
</appInfo>
<documentation>
- <p>
- <a href="hglegal.htm">
- <img SRC="ngibmcpy.gif"
- ALT="Copyright (c) 2003, 2004 IBM Corporation and others. All Rights Reserved."
- BORDER=0 height=14 width=324></a>
+ <p> + <a href="hglegal.htm"> + <img SRC="ngibmcpy.gif" + ALT="Copyright (c) 2003, 2004 IBM Corporation and others. All Rights Reserved." + BORDER=0 height=14 width=324></a> </p>
</documentation>
</annotation>
diff --git a/org.eclipse.debug.ui/plugin.xml b/org.eclipse.debug.ui/plugin.xml index 08985f254..2519acb63 100644 --- a/org.eclipse.debug.ui/plugin.xml +++ b/org.eclipse.debug.ui/plugin.xml @@ -1179,6 +1179,18 @@ class="org.eclipse.debug.internal.ui.WorkingDirectoryStatusHandler" id="org.eclipse.debug.ui.statusHandler.workingDirectory"> </statusHandler> + <statusHandler + code="200" + plugin="org.eclipse.debug.ui" + class="org.eclipse.debug.internal.ui.sourcelookup.Prompter" + id="org.eclipse.debug.ui.statusHandler.prompter"> + </statusHandler> + <statusHandler + code="205" + plugin="org.eclipse.debug.ui" + class="org.eclipse.debug.internal.ui.sourcelookup.ResolveDuplicatesHandler" + id="org.eclipse.debug.ui.statusHandler.selectSourceDialog"> + </statusHandler> </extension> <extension point="org.eclipse.debug.ui.launchGroups"> @@ -1712,6 +1724,16 @@ </sourceContainerPresentation> </extension> <!-- ========================================= --> +<!-- Adapter factories for source lookup --> +<!-- ========================================= --> + <extension point="org.eclipse.core.runtime.adapters"> + <factory + class="org.eclipse.debug.internal.ui.sourcelookup.SourceElementAdapterFactory" + adaptableType="org.eclipse.debug.internal.core.sourcelookup.containers.LocalFileStorage"> + <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/> + </factory> + </extension> +<!-- ========================================= --> <!-- Contextual Launch Menu (Work in Progress) --> <!-- ========================================= --> <extension diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AbstractUISourceLookupDirector.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AbstractUISourceLookupDirector.java deleted file mode 100644 index b7724d2b3..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AbstractUISourceLookupDirector.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.sourcelookup; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.debug.core.model.IStackFrame; -import org.eclipse.debug.internal.core.sourcelookup.AbstractSourceLookupDirector; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.jface.window.Window; - - -/** - * The UI implementation of an AbstractSourceLookupDirector. - */ -public abstract class AbstractUISourceLookupDirector extends AbstractSourceLookupDirector { - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.sourcelookup.AbstractSourceLookupDirector#resolveSourceElement(org.eclipse.debug.core.model.IStackFrame, java.util.List) - */ - public Object resolveSourceElement(IStackFrame frame, List sources) { - Object file = null; - //TODO check if multiple source not found editors - sources = removeSourceNotFoundEditors(sources); - if(sources.size() == 1) - return sources.get(0); - else if(sources.size() == 0) - return null; - final MultipleSourceSelectionDialog dialog = new MultipleSourceSelectionDialog(DebugUIPlugin.getShell(), sources); - DebugUIPlugin.getShell().getDisplay().syncExec( - new Runnable() { - public void run() { - dialog.open(); - } - }); - if(dialog.getReturnCode() == Window.OK) - file = dialog.getSelection(); - return file; - } - - /** - * Remove extra source not found editors, if any. - * If multiple source not found editors and no "real" source inputs, - * return the first source not found editor. - * @param sources the list to be filtered - * @return the filtered list, may be empty - */ - private List removeSourceNotFoundEditors(List sources){ - Iterator iterator = sources.iterator(); - List filteredList = new ArrayList(); - Object next; - while(iterator.hasNext()) - { - next = iterator.next(); - if(next instanceof CommonSourceNotFoundEditor) - filteredList.add(next); - } - if(sources.isEmpty() && sources.get(0) != null) - filteredList.add(sources.get(0)); - return filteredList; - } - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddContainerAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddContainerAction.java index 92ec9506a..9f4a10e87 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddContainerAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddContainerAction.java @@ -9,8 +9,11 @@ * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.debug.internal.ui.sourcelookup; -import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector; +import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.actions.SelectionListenerAction; /** @@ -20,9 +23,11 @@ import org.eclipse.jface.viewers.IStructuredSelection; */ public class AddContainerAction extends SourceContainerAction { + private ISourceLookupDirector fDirector; + public AddContainerAction() { - super(SourceLookupUIMessages.getString("sourceTab.addButton")); //$NON-NLS-1$ - } + super(SourceLookupUIMessages.getString("sourceTab.addButton")); //$NON-NLS-1$ + } /** * Prompts for a project to add. @@ -30,10 +35,18 @@ public class AddContainerAction extends SourceContainerAction { * @see IAction#run() */ public void run() { - Dialog dialog = new AddSourceContainerDialog(getShell(), getViewer()); + ILaunchConfiguration configuration = null; + if (fDirector != null) { + configuration = fDirector.getLaunchConfiguration(); + } + AddSourceContainerDialog dialog = new AddSourceContainerDialog(getShell(), getViewer(), configuration, fDirector); dialog.open(); } + public void setSourceLookupDirector(ISourceLookupDirector director) { + fDirector = director; + } + /** * @see SelectionListenerAction#updateSelection(IStructuredSelection) */ diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddSourceContainerDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddSourceContainerDialog.java index 94a639eb9..489e2f9ac 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddSourceContainerDialog.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/AddSourceContainerDialog.java @@ -12,8 +12,10 @@ package org.eclipse.debug.internal.ui.sourcelookup; import java.util.ArrayList; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType; +import org.eclipse.debug.internal.core.sourcelookup.ISourceLookupDirector; import org.eclipse.debug.internal.core.sourcelookup.SourceLookupUtils; import org.eclipse.debug.internal.ui.DebugPluginImages; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; @@ -21,13 +23,17 @@ import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.ViewerFilter; +import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -47,39 +53,18 @@ public class AddSourceContainerDialog extends TitleAreaDialog { private TableViewer fViewer; private SourceContainerViewer fSourceContainerViewer; private boolean fDoubleClickSelects = true; + private ILaunchConfiguration fConfiguration; + private ISourceLookupDirector fDirector; /** - * Label content provider to retrieve source container names and icons from - * ISourceContainerType - */ - class SourceContainerTypeLabelProvider extends LabelProvider { - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) - */ - public String getText(Object element) { - if (element instanceof ISourceContainerType) - return ((ISourceContainerType) element).getName(); - - return super.getText(element); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) - */ - public Image getImage(Object element) { - if (element instanceof ISourceContainerType) - return SourceLookupUIUtils.getSourceContainerImage(((ISourceContainerType) element).getId()); - - return super.getImage(element); - } - } - /** * Constructor */ - public AddSourceContainerDialog(Shell shell, SourceContainerViewer viewer) - { + public AddSourceContainerDialog(Shell shell, SourceContainerViewer viewer, ILaunchConfiguration configuration, ISourceLookupDirector director) { super(shell); - fSourceContainerViewer=viewer; + setShellStyle(getShellStyle() | SWT.RESIZE); + fSourceContainerViewer=viewer; + fConfiguration = configuration; + fDirector = director; } /** @@ -93,37 +78,42 @@ public class AddSourceContainerDialog extends TitleAreaDialog { Composite parent = new Composite(ancestor, SWT.NULL); GridData gd= new GridData(GridData.FILL_BOTH); - gd.grabExcessHorizontalSpace=true; - gd.grabExcessVerticalSpace=true; GridLayout topLayout = new GridLayout(); topLayout.numColumns = 1; parent.setLayout(topLayout); parent.setLayoutData(gd); + + ISourceContainerType[] types = filterTypes(SourceLookupUtils.getSourceContainerTypes()); - gd= new GridData(GridData.FILL_BOTH); - gd.grabExcessHorizontalSpace=true; - gd.grabExcessVerticalSpace=true; - - ISourceContainerType[] types = removeTypesWithoutBrowsers(SourceLookupUtils.getSourceContainerTypes()); - final Table containerTable = new Table(parent, SWT.SINGLE | SWT.BORDER); - topLayout = new GridLayout(); - topLayout.numColumns = 1; - containerTable.setLayout(topLayout); - containerTable.setLayoutData(gd); + fViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE); + final Table table = fViewer.getTable(); + gd = new GridData(GridData.FILL_BOTH); + table.setLayoutData(gd); + if (fDoubleClickSelects) { - containerTable.addSelectionListener(new SelectionAdapter() { + table.addSelectionListener(new SelectionAdapter() { public void widgetDefaultSelected(SelectionEvent e) { - if (containerTable.getSelectionCount() == 1) + if (table.getSelectionCount() == 1) okPressed(); } }); } - fViewer = new TableViewer(containerTable); - fViewer.setLabelProvider(new SourceContainerTypeLabelProvider()); - fViewer.setContentProvider(new ArrayContentProvider()); - if(types.length != 0) - { + fViewer.setLabelProvider(new SourceContainerLabelProvider()); + fViewer.setContentProvider(new ArrayContentProvider()); + fViewer.setSorter(new ViewerSorter()); + fViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + ISelection selection = event.getSelection(); + String desc = null; + if (!selection.isEmpty()) { + ISourceContainerType type = (ISourceContainerType) ((IStructuredSelection)selection).getFirstElement(); + desc = type.getDescription(); + } + setMessage(desc); + } + }); + if(types.length != 0) { fViewer.setInput(types); fViewer.setSelection(new StructuredSelection(types[0]), true); } @@ -137,12 +127,15 @@ public class AddSourceContainerDialog extends TitleAreaDialog { * @param types the complete list of source container types * @return the list of source container types that have browsers */ - private ISourceContainerType[] removeTypesWithoutBrowsers(ISourceContainerType[] types){ + private ISourceContainerType[] filterTypes(ISourceContainerType[] types){ ArrayList validTypes = new ArrayList(); - for (int i=0; i< types.length; i++) - { - if(SourceLookupUIUtils.getSourceContainerBrowser(types[i].getId()) != null) - validTypes.add(types[i]); + for (int i=0; i< types.length; i++) { + ISourceContainerType type = types[i]; + if (fDirector.supportsSourceContainerType(type)) { + if(SourceLookupUIUtils.getSourceContainerBrowser(type.getId()) != null) { + validTypes.add(type); + } + } } return (ISourceContainerType[]) validTypes.toArray(new ISourceContainerType[validTypes.size()]); @@ -158,10 +151,14 @@ public class AddSourceContainerDialog extends TitleAreaDialog { ISourceContainerBrowser browser = SourceLookupUIUtils.getSourceContainerBrowser(type.getId()); if(browser == null) super.okPressed(); - ISourceContainer[] results = browser.createSourceContainers(getShell()); + ISourceContainer[] results = browser.createSourceContainers(getShell(), fConfiguration); if(results != null) fSourceContainerViewer.addEntries(results); super.okPressed(); } + protected void addFilter(ViewerFilter filter) { + fViewer.addFilter(filter); + } + } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ISourceContainerBrowser.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ISourceContainerBrowser.java index 9fb736eba..4acb5e59f 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ISourceContainerBrowser.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ISourceContainerBrowser.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.sourcelookup; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.swt.widgets.Shell; @@ -21,18 +22,18 @@ import org.eclipse.swt.widgets.Shell; * THIS INTERFACE IS EXPERIMENTAL AND SUBJECT TO CHANGE * </p> * - * TODO: issue - should we use a wizard instead of a dialog for this? *@see ISourceContainerType *@since 3.0 */ public interface ISourceContainerBrowser { /** - * Displays a browse dialog and then uses the input to create a source container. - * If user input is not required, it can just return a new source container without - * displaying a browse dialog. - * @param shell the shell to use to display the dialog - * @return the new source container or containers (if multiple items selected by user) + * Creates and returns new source containers for a source container type + * the user has selected to add to the given launch configuration. + * + * @param shell the shell to use to display any dialogs + * @param configuration the launch configuration being edited + * @return the new source container or containers */ - public ISourceContainer[] createSourceContainers(Shell shell); + public ISourceContainer[] createSourceContainers(Shell shell, ILaunchConfiguration configuration); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/MultipleSourceSelectionDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/MultipleSourceSelectionDialog.java deleted file mode 100644 index 3ff2ee436..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/MultipleSourceSelectionDialog.java +++ /dev/null @@ -1,211 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.debug.internal.ui.sourcelookup; - -import org.eclipse.debug.internal.ui.IDebugHelpContextIds; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.List; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.help.WorkbenchHelp; - - -/** - * Dialog for source selection, in the case that multiple sources were found - * in the path. - * - * @since 3.0 - */ -public class MultipleSourceSelectionDialog extends Dialog { - private java.util.List fSourceList; - private int fSelection; - private Button fOkButton; - private List fChoiceList; - - /** - * MultipleSourceSelectionDialog constructor. - * @param shell The parent shell, or <code>null</code> to create top level shell. - * @param methodName The name of the method being called. - */ - public MultipleSourceSelectionDialog( - Shell shell, - java.util.List sourceList) - { - super(shell); - fSourceList = sourceList; - } - - /** - * @see Window#configureShell(Shell) - */ - protected void configureShell(Shell shell) - { - super.configureShell(shell); - shell.setText(SourceLookupUIMessages.getString("multipleSourceDialog.title")); //$NON-NLS-1$ - } - - /** - * @see Window#create() - */ - public void create() { - super.create(); - fOkButton.setFocus(); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) - */ - protected Control createDialogArea(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - - GridLayout layout = new GridLayout(); - layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - layout.numColumns = 1; - composite.setLayout(layout); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - composite.setFont(parent.getFont()); - - // Label 1: "More than one source was found for ..." - Label message = new Label(composite, SWT.NULL); - //String[] substituteText = {fSourceName}; - message.setText(SourceLookupUIMessages.getString("multipleSourceDialog.message")); //$NON-NLS-1$ - - // Blank space - new Label(composite, SWT.NULL); - - // Label 2: "Select the source to display:" - Label instruction = new Label(composite, SWT.NULL); - instruction.setText(SourceLookupUIMessages.getString("multipleSourceDialog.label")); //$NON-NLS-1$ - - // Create selectionComposite (file list) - Composite selectionComposite = new Composite(composite, SWT.NONE); - layout = new GridLayout(); - layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - layout.numColumns = 2; - selectionComposite.setLayout(layout); - selectionComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); - selectionComposite.setFont(parent.getFont()); - - // Create single selection list - fChoiceList = new List(selectionComposite, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER | SWT.H_SCROLL); - GridData gridData = new GridData(); - gridData.horizontalAlignment = GridData.HORIZONTAL_ALIGN_BEGINNING; //gridData.FILL; - gridData.verticalAlignment = GridData.BEGINNING; - gridData.grabExcessHorizontalSpace = true; - gridData.horizontalSpan = 1; - gridData.widthHint = convertWidthInCharsToPixels(80); - gridData.heightHint = convertWidthInCharsToPixels(15); - fChoiceList.setLayoutData(gridData); - createSelectionList(); - - WorkbenchHelp.setHelp(getShell(), IDebugHelpContextIds.MULTIPLE_SOURCE_DIALOG); - Dialog.applyDialogFont(composite); - return composite; - } - - /** - * @see Dialog#createButtonsForButtonBar(Composite) - */ - protected void createButtonsForButtonBar(Composite parent) { - fOkButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - /** - * @see org.eclipse.jface.dialogs.Dialog#okPressed() - */ - protected void okPressed() { - fSelection = fChoiceList.getSelectionIndex(); - if (fSelection != -1) - super.okPressed(); - } - - /** - * @see org.eclipse.jface.dialogs.Dialog#cancelPressed() - */ - protected void cancelPressed() { - //TODO user will get standard source not found editor instead of - //model specific editor, should the debug adapter have one - fSelection = -1; - super.cancelPressed(); - } - - /** - * Get the selection in the dialog - * @return the user's selection - */ - public Object getSelection() { - if (fSelection != -1) - return fSourceList.get(fSelection); - else - return null; - } - - - /** - * Create a button widget. - * @param parent The parent composite. - * @param style The button style. - * @param label The button label. - */ - protected Button createButton(Composite parent, int style, String label) { - Button button = new Button(parent, style); - button.setText(label); - return button; - } - - /** - * Adds the source choices to the list in the dialog. - */ - private void createSelectionList () { - String [] sourceStringList; - - if (fSourceList != null) { - sourceStringList = generateSourceElementStringList(); - for (int i = 0; i < fSourceList.size(); i++) - { - fChoiceList.add(sourceStringList[i]); - - } - if(fChoiceList.getItemCount() > 0) - fChoiceList.setSelection(0); - } - } - - /** - * Generate a string list of Source Elements for the dialog display - * - */ - private String [] generateSourceElementStringList () { - String[] sourceElementStringList = new String [fSourceList.size()]; - - for (int i = 0; i < fSourceList.size(); i++) { - //TODO need a way to get to model presentation? or label provider? - sourceElementStringList[i] = fSourceList.get(i).toString(); - } - return sourceElementStringList; - } - - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/Prompter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/Prompter.java new file mode 100644 index 000000000..e4d0e22d9 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/Prompter.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.sourcelookup; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.IStatusHandler; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.swt.widgets.Display; + +/** + * Prompts the user in the UI (asyncronously), on behalf of a non-UI client, + * blocking the calling thread until a response is received. + * <p> + * This status handler is registered for for the debug UI plug-in, + * with a status code of <code>STATUS_HANDLER_PROMPT</code>. + * </p> + * @since 3.0 + */ +public class Prompter implements IStatusHandler { + /** + * Prompts the user for input based on the given status and source + * object, blocking the calling thread until the status is resolved. + * + * @param status client status code for which a status handler must + * be registered + * @param source object requesting the status to be resolved + * @return result of resolving the givne status + * @see org.eclipse.debug.core.IStatusHandler#handleStatus(org.eclipse.core.runtime.IStatus, java.lang.Object) + */ + public Object handleStatus(final IStatus status, final Object source) throws CoreException { + final IStatusHandler handler = DebugPlugin.getDefault().getStatusHandler(status); + if (handler == null) { + // TODO: throw exception + } + Display display = DebugUIPlugin.getStandardDisplay(); + if (display.getThread().equals(Thread.currentThread())) { + return handler.handleStatus(status, source); + } + final Object[] result = new Object[1]; + final CoreException[] exception = new CoreException[1]; + final Object lock = this; + Runnable r = new Runnable() { + public void run() { + try { + result[0] = handler.handleStatus(status, source); + } catch (CoreException e) { + exception[0] = e; + } + synchronized (lock) { + lock.notifyAll(); + } + } + }; + synchronized (lock) { + DebugUIPlugin.getStandardDisplay().asyncExec(r); + try { + lock.wait(); + } catch (InterruptedException e) { + } + } + + if (exception[0] != null ) { + throw exception[0]; + } + return result[0]; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ResolveDuplicatesHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ResolveDuplicatesHandler.java new file mode 100644 index 000000000..88e858067 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/ResolveDuplicatesHandler.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.sourcelookup; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.debug.core.IStatusHandler; +import org.eclipse.debug.core.model.IStackFrame; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.jface.window.Window; +import org.eclipse.ui.dialogs.ElementListSelectionDialog; +import org.eclipse.ui.model.WorkbenchLabelProvider; + +/** + * Status handler to prompt for dupicate source element resolution. + * + * @since 3.0 + */ +public class ResolveDuplicatesHandler implements IStatusHandler { + /* (non-Javadoc) + * @see org.eclipse.debug.core.IStatusHandler#handleStatus(org.eclipse.core.runtime.IStatus, java.lang.Object) + */ + public Object handleStatus(IStatus status, Object source) throws CoreException { + Object[] args = (Object[])source; + IStackFrame frame = (IStackFrame) args[0]; + List sources = (List) args[1]; + return resolveSourceElement(frame, sources); + } + + public Object resolveSourceElement(IStackFrame frame, List sources) { + Object file = null; + sources = removeSourceNotFoundEditors(sources); + if(sources.size() == 1) { + return sources.get(0); + } else if(sources.size() == 0) { + return null; + } + ElementListSelectionDialog dialog = new ElementListSelectionDialog(DebugUIPlugin.getShell(), new WorkbenchLabelProvider()); + dialog.setMultipleSelection(false); + dialog.setTitle(SourceLookupUIMessages.getString("ResolveDuplicatesHandler.0")); //$NON-NLS-1$ + dialog.setMessage(SourceLookupUIMessages.getString("ResolveDuplicatesHandler.1")); //$NON-NLS-1$ + dialog.setElements(sources.toArray()); + dialog.open(); + if(dialog.getReturnCode() == Window.OK) { + file = dialog.getFirstResult(); + } + return file; + } + + /** + * Remove extra source not found editors, if any. + * If multiple source not found editors and no "real" source inputs, + * return the first source not found editor. + * @param sources the list to be filtered + * @return the filtered list, may be empty + */ + private List removeSourceNotFoundEditors(List sources){ + Iterator iterator = sources.iterator(); + List filteredList = new ArrayList(); + Object next; + while(iterator.hasNext()) { + next = iterator.next(); + if (!(next instanceof CommonSourceNotFoundEditor)) { + filteredList.add(next); + } + } + if (filteredList.isEmpty() && sources.get(0) != null) { + filteredList.add(sources.get(0)); + } + return filteredList; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLabelProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLabelProvider.java index 13eddec99..ec8cf31ed 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLabelProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLabelProvider.java @@ -10,15 +10,15 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.sourcelookup; -import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; +import org.eclipse.debug.internal.core.sourcelookup.ISourceContainerType; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.model.WorkbenchLabelProvider; /** - * Label provider for source containers. + * Label provider for source containers and source container types. * * @since 3.0 */ @@ -29,16 +29,23 @@ public class SourceContainerLabelProvider extends LabelProvider { /* (non-Javadoc) * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) */ - public Image getImage(Object element) { - if (element instanceof ISourceContainer) { - Image image = SourceLookupUIUtils.getSourceContainerImage(((ISourceContainer) element).getType().getId()); - if (image == null && element instanceof IAdaptable) { - Object object = ((IAdaptable)element).getAdapter(IAdaptable.class); - image = getWorkbenchLabelProvider().getImage(object); + public Image getImage(Object element) { + // first allow workbench adapter to provide image + Image image = getWorkbenchLabelProvider().getImage(element); + if (image == null) { + ISourceContainerType type = null; + if (element instanceof ISourceContainer) { + type = ((ISourceContainer)element).getType(); + } else if (element instanceof ISourceContainerType) { + type = (ISourceContainerType) element; } - if (image != null) { - return image; + if (type != null) { + // next consult contributed image + image = SourceLookupUIUtils.getSourceContainerImage(type.getId()); } + } + if (image != null) { + return image; } return super.getImage(element); } @@ -47,8 +54,17 @@ public class SourceContainerLabelProvider extends LabelProvider { * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) */ public String getText(Object element) { - if (element instanceof ISourceContainer) - return ((ISourceContainer) element).getName(); + // first, allo workbench adapter to provide label + String label = getWorkbenchLabelProvider().getText(element); + if (label == null || label.length() == 0) { + if (element instanceof ISourceContainer) { + return ((ISourceContainer) element).getName(); + } else if (element instanceof ISourceContainerType) { + return ((ISourceContainerType)element).getName(); + } + } else { + return label; + } return super.getText(element); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupPanel.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupPanel.java index c2ab752ff..b45694154 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupPanel.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupPanel.java @@ -23,6 +23,7 @@ import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.sourcelookup.containers.WorkingSetSourceContainer; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; +import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.util.IPropertyChangeListener; @@ -58,6 +59,8 @@ public class SourceContainerLookupPanel extends AbstractLaunchConfigurationTab i //the director that will be used by the tab to manage/store the containers protected AbstractSourceLookupDirector fLocator; + protected AddContainerAction fAddAction; + protected static final String DIALOG_SETTINGS_PREFIX = "sourceTab"; //$NON-NLS-1$ /** @@ -133,13 +136,13 @@ public class SourceContainerLookupPanel extends AbstractLaunchConfigurationTab i FontMetrics fontMetrics = gc.getFontMetrics(); gc.dispose(); - SourceContainerAction action = new AddContainerAction(); + fAddAction = new AddContainerAction(); Button button = - createPushButton(pathButtonComp, action.getText(), fontMetrics); - action.setButton(button); - addAction(action); + createPushButton(pathButtonComp, fAddAction.getText(), fontMetrics); + fAddAction.setButton(button); + addAction(fAddAction); - action = new RemoveAction(); + SourceContainerAction action = new RemoveAction(); button = createPushButton(pathButtonComp, action.getText(), fontMetrics); action.setButton(button); @@ -255,9 +258,7 @@ public class SourceContainerLookupPanel extends AbstractLaunchConfigurationTab i memento = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, (String)null); type = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID, (String)null); if (type == null) { - // TODO: should the source locator id be API on ILaunchConfigType? - // TODO: spec this attribute in plug-in XML - type = configuration.getType().getAttribute("sourceLocatorId"); //$NON-NLS-1$ + type = configuration.getType().getSourceLocatorId(); } }catch(CoreException e){ setErrorMessage(e.getMessage()); @@ -299,6 +300,7 @@ public class SourceContainerLookupPanel extends AbstractLaunchConfigurationTab i fPathViewer.setEntries(locator.getSourceContainers()); fDuplicatesButton.setSelection(locator.isFindDuplicates()); fLocator = locator; + fAddAction.setSourceLookupDirector(locator); setDirty(false); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupTab.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupTab.java index 5be81b255..9e1e19867 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupTab.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceContainerLookupTab.java @@ -36,7 +36,7 @@ import org.eclipse.ui.help.WorkbenchHelp; public class SourceContainerLookupTab extends AbstractLaunchConfigurationTab { //the panel displaying the containers protected SourceContainerLookupPanel fSourceLookupPanel; - + /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite) */ diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceElementAdapterFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceElementAdapterFactory.java new file mode 100644 index 000000000..6bf7de1e7 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceElementAdapterFactory.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.sourcelookup; + +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.ui.model.IWorkbenchAdapter; + +/** + * Adapter factory for source elements. + * + * @since 3.0 + */ +public class SourceElementAdapterFactory implements IAdapterFactory { + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + public Object getAdapter(Object adaptableObject, Class adapterType) { + if (adapterType.equals(IWorkbenchAdapter.class)) { + return new SourceElementWorkbenchAdapter(); + } + return null; + } + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() + */ + public Class[] getAdapterList() { + return new Class[] {IWorkbenchAdapter.class}; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceElementWorkbenchAdapter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceElementWorkbenchAdapter.java new file mode 100644 index 000000000..513c6c85d --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceElementWorkbenchAdapter.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.sourcelookup; + +import java.io.File; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.debug.internal.core.sourcelookup.containers.LocalFileStorage; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.model.IWorkbenchAdapter; + +/** + * Workbench adapter for source elements. + * + * @since 3.0 + */ +public class SourceElementWorkbenchAdapter implements IWorkbenchAdapter { + /* (non-Javadoc) + * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object o) { + return null; + } + /* (non-Javadoc) + * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object) + */ + public ImageDescriptor getImageDescriptor(Object object) { + return null; + } + /* (non-Javadoc) + * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object) + */ + public String getLabel(Object o) { + if (o instanceof LocalFileStorage) { + LocalFileStorage storage = (LocalFileStorage) o; + IPath path = storage.getFullPath(); + StringBuffer buffer = new StringBuffer(); + String[] segments = path.segments(); + if (segments.length > 0) { + buffer.append(path.lastSegment()); + if (segments.length > 1) { + buffer.append(" - "); //$NON-NLS-1$ + if (path.getDevice() != null) { + buffer.append(path.getDevice()); + } + for (int i = 0; i < segments.length - 1; i++) { + buffer.append(File.separatorChar); + buffer.append(segments[i]); + } + } + return buffer.toString(); + } + } + return ""; //$NON-NLS-1$ + } + /* (non-Javadoc) + * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object) + */ + public Object getParent(Object o) { + return null; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties index 2dedc59a2..3e0020432 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties @@ -22,8 +22,8 @@ sourceTab.revertButton = Re&vert sourceTab.tabTitle = Source sourceTab.defaultButton = Restore De&fault -addSourceLocation.title = Add Source Container -addSourceLocation.description = Add new containers to the source lookup path +addSourceLocation.title = Add Source +addSourceLocation.description = Select the type of source to add to the source lookup path addSourceLocation.addButton = &Add... addSourceLocation.addButton2 = &Add Source Container... addSourceLocation.editorMessage = Source file not found. @@ -44,11 +44,6 @@ sourceSearch.unsupportedError = Unsupported action. sourceSearch.couldNotSave= Could not save launch configuration. sourceSearch.initError = Unable to initialize source container. -multipleSourceDialog.title=Debugger Source Selection -multipleSourceDialog.message=More than one source was found. -multipleSourceDialog.label=Select the source to display: - - projectSelection.chooseLabel = Choose &project(s) to add: projectSelection.selectAllLabel = &Select All projectSelection.deselectAllLabel = &Deselect All @@ -93,3 +88,5 @@ defaultContainer.0 = Exception occurred restoring default source container. sourceLookupPanel.0 = Source Locator associated with this configuration is not an AbstractSourceLookupDirector. sourceLookupPanel.1 = Error occurred - unable to apply source lookup path changes. sourceLookupPanel.2 = Unable to initialize - source locator is not associated with launch configuration. +ResolveDuplicatesHandler.0=Select Source File +ResolveDuplicatesHandler.1=Choose a source file (? = any character, * = any string) diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/DirectorySourceContainerBrowser.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/DirectorySourceContainerBrowser.java index 4ce75f662..d676965c6 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/DirectorySourceContainerBrowser.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/DirectorySourceContainerBrowser.java @@ -11,6 +11,7 @@ package org.eclipse.debug.internal.ui.sourcelookup.browsers; import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.core.sourcelookup.containers.DirectorySourceContainer; import org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser; @@ -23,9 +24,9 @@ import org.eclipse.swt.widgets.Shell; public class DirectorySourceContainerBrowser implements ISourceContainerBrowser { /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell) + * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.ILaunchConfiguration) */ - public ISourceContainer[] createSourceContainers(Shell shell) { + public ISourceContainer[] createSourceContainers(Shell shell, ILaunchConfiguration configuration) { ISourceContainer[] containers = new ISourceContainer[1]; DirectorySourceContainerDialog dialog = new DirectorySourceContainerDialog(shell); String result = dialog.getResult(); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/FolderSourceContainerBrowser.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/FolderSourceContainerBrowser.java index 1a391ddf8..f5496640e 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/FolderSourceContainerBrowser.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/FolderSourceContainerBrowser.java @@ -13,6 +13,7 @@ package org.eclipse.debug.internal.ui.sourcelookup.browsers; import java.util.ArrayList; import org.eclipse.core.resources.IFolder; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.core.sourcelookup.containers.FolderSourceContainer; import org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser; @@ -31,9 +32,9 @@ import org.eclipse.ui.model.WorkbenchLabelProvider; public class FolderSourceContainerBrowser implements ISourceContainerBrowser { /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell) + * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.ILaunchConfiguration) */ - public ISourceContainer[] createSourceContainers(Shell shell) { + public ISourceContainer[] createSourceContainers(Shell shell, ILaunchConfiguration configuration) { Dialog dialog =new FolderSourceContainerDialog(shell, new WorkbenchLabelProvider(), new WorkbenchContentProvider()); if (dialog.open() == Window.OK) { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/ProjectSourceContainerBrowser.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/ProjectSourceContainerBrowser.java index 20132e513..12b576b91 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/ProjectSourceContainerBrowser.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/ProjectSourceContainerBrowser.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.core.sourcelookup.containers.ProjectSourceContainer; import org.eclipse.debug.internal.ui.sourcelookup.BasicContainerContentProvider; @@ -35,9 +36,9 @@ import org.eclipse.ui.model.WorkbenchLabelProvider; public class ProjectSourceContainerBrowser implements ISourceContainerBrowser { /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell) + * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell,org.eclipse.debug.core.ILaunchConfiguration) */ - public ISourceContainer[] createSourceContainers(Shell shell) { + public ISourceContainer[] createSourceContainers(Shell shell, ILaunchConfiguration configuration) { Object input = ResourcesPlugin.getWorkspace().getRoot(); IStructuredContentProvider contentProvider=new BasicContainerContentProvider(); ILabelProvider labelProvider = new WorkbenchLabelProvider(); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkingSetSourceContainerBrowser.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkingSetSourceContainerBrowser.java index caea9bc46..ec349cef2 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkingSetSourceContainerBrowser.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkingSetSourceContainerBrowser.java @@ -12,6 +12,7 @@ package org.eclipse.debug.internal.ui.sourcelookup.browsers; import java.util.ArrayList; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser; import org.eclipse.debug.internal.ui.sourcelookup.containers.WorkingSetSourceContainer; @@ -29,9 +30,9 @@ import org.eclipse.ui.internal.WorkbenchPlugin; public class WorkingSetSourceContainerBrowser implements ISourceContainerBrowser { /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell) + * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.ILaunchConfiguration) */ - public ISourceContainer[] createSourceContainers(Shell shell) { + public ISourceContainer[] createSourceContainers(Shell shell, ILaunchConfiguration configuration) { ArrayList containers = new ArrayList(); IWorkingSetSelectionDialog dialog = WorkbenchPlugin.getDefault().getWorkingSetManager().createWorkingSetSelectionDialog(shell,true); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkspaceSourceContainerBrowser.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkspaceSourceContainerBrowser.java index 6753dd1a7..452b08736 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkspaceSourceContainerBrowser.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/browsers/WorkspaceSourceContainerBrowser.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.sourcelookup.browsers; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.internal.core.sourcelookup.ISourceContainer; import org.eclipse.debug.internal.core.sourcelookup.containers.WorkspaceSourceContainer; import org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser; @@ -23,9 +24,9 @@ import org.eclipse.swt.widgets.Shell; public class WorkspaceSourceContainerBrowser implements ISourceContainerBrowser { /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell) + * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.ILaunchConfiguration) */ - public ISourceContainer[] createSourceContainers(Shell shell) { + public ISourceContainer[] createSourceContainers(Shell shell, ILaunchConfiguration configuration) { ISourceContainer[] containers = new ISourceContainer[1]; containers[0] = new WorkspaceSourceContainer(); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java index d2bb13a54..d85f74bef 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDebugUIConstants.java @@ -790,6 +790,15 @@ public interface IDebugUIConstants { public static final int STATUS_INVALID_EXTENSION_DEFINITION = 100; /** + * Status code for a status handler that invokes a delegate + * status handler asyncronously in the UI thread, and blocks + * until the delegate status handler returns. + * + * @since 3.0 + */ + public static final int STATUS_HANDLER_PROMPT = 200; + + /** * Status code indicating an unexpected internal error. */ public static final int INTERNAL_ERROR = 120; |