Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java118
1 files changed, 64 insertions, 54 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java
index b2a9e557a..3a766774b 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java
@@ -11,12 +11,12 @@
package org.eclipse.debug.internal.ui.contextlaunching;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
+import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.core.expressions.IEvaluationContext;
@@ -54,6 +54,7 @@ import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWindowListener;
@@ -80,6 +81,7 @@ import com.ibm.icu.text.MessageFormat;
*
* @since 3.3
*/
+@SuppressWarnings("restriction")
public class LaunchingResourceManager implements IPropertyChangeListener, IWindowListener, ISelectionListener, ILaunchHistoryChangedListener, ILaunchesListener2 {
/**
@@ -91,12 +93,12 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
* The map of ToolBars that have mouse tracker listeners associated with them:
* stored as Map<IWorkbenchWindow, ToolBar>
*/
- private HashMap fToolbars = new HashMap();
+ private HashMap<IWorkbenchWindow, ToolBar> fToolbars = new HashMap<IWorkbenchWindow, ToolBar>();
/**
* the map of current labels
*/
- private HashMap fCurrentLabels = new HashMap();
+ private HashMap<ILaunchGroup, String> fCurrentLabels = new HashMap<ILaunchGroup, String>();
/**
* The selection has changed and we need to update the labels
@@ -106,19 +108,19 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/**
* Set of windows that have been opened and that we have registered selection listeners with
*/
- private HashSet fWindows = new HashSet();
+ private HashSet<IWorkbenchWindow> fWindows = new HashSet<IWorkbenchWindow>();
/**
* Cache of IResource -> ILaunchConfiguration[] used during a tooltip update job.
* The cache is cleared after each tooltip update job is complete.
*/
- private HashMap fConfigCache = new HashMap();
+ private HashMap<IResource, ILaunchConfiguration[]> fConfigCache = new HashMap<IResource, ILaunchConfiguration[]>();
/**
* Cache of IResource -> LaunchShortcutExtension used during a tooltip update job.
* The cache is cleared after each tooltip update job is complete.
*/
- private HashMap fExtCache = new HashMap();
+ private HashMap<IResource, List<LaunchShortcutExtension>> fExtCache = new HashMap<IResource, List<LaunchShortcutExtension>>();
/**
* Constant denoting the empty string;
@@ -129,11 +131,13 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
* Provides a mouse tracker listener for the launching main toolbar
*/
private MouseTrackAdapter fMouseListener = new MouseTrackAdapter() {
+ @Override
public void mouseEnter(MouseEvent e) {
if(fUpdateLabel) {
fUpdateLabel = false;
fCurrentLabels.clear();
Job job = new Job("Compute launch button tooltip") { //$NON-NLS-1$
+ @Override
protected IStatus run(IProgressMonitor monitor) {
computeLabels();
fConfigCache.clear();
@@ -197,7 +201,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
* @return the current resource label;
*/
public String getLaunchLabel(ILaunchGroup group) {
- return (String) fCurrentLabels.get(group);
+ return fCurrentLabels.get(group);
}
/**
@@ -227,7 +231,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
Object[] listeners = fLabelListeners.getListeners();
SelectedResourceManager srm = SelectedResourceManager.getDefault();
IStructuredSelection selection = srm.getCurrentSelection();
- List shortcuts = null;
+ List<LaunchShortcutExtension> shortcuts = null;
IResource resource = srm.getSelectedResource();
for(int i = 0; i < listeners.length; i++) {
group = ((ILaunchLabelChangedListener)listeners[i]).getLaunchGroup();
@@ -282,7 +286,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
}
}
if(launched) {
- return MessageFormat.format(ContextMessages.LaunchingResourceManager_0, new String[] {config.getName()});
+ return MessageFormat.format(ContextMessages.LaunchingResourceManager_0, new Object[] { config.getName() });
}
return config.getName();
}
@@ -310,19 +314,18 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
* @param group the {@link ILaunchGroup} to launch using
* @return the label for the resource or the empty string, never <code>null</code>
*/
- protected String getLabel(IStructuredSelection selection, IResource resource, List shortcuts, ILaunchGroup group) {
- List sc = pruneShortcuts(shortcuts, resource, group.getMode());
+ protected String getLabel(IStructuredSelection selection, IResource resource, List<LaunchShortcutExtension> shortcuts, ILaunchGroup group) {
+ List<LaunchShortcutExtension> sc = pruneShortcuts(shortcuts, resource, group.getMode());
LaunchConfigurationManager lcm = DebugUIPlugin.getDefault().getLaunchConfigurationManager();
//see if the context is a shared configuration
ILaunchConfiguration config = lcm.isSharedConfig(resource);
if(config != null) {
return appendLaunched(config);
}
- //TODO cache the results ?
- List configs = getParticipatingLaunchConfigurations(selection, resource, sc, group.getMode());
+ List<ILaunchConfiguration> configs = getParticipatingLaunchConfigurations(selection, resource, sc, group.getMode());
int csize = configs.size();
if(csize == 1) {
- return appendLaunched((ILaunchConfiguration)configs.get(0));
+ return appendLaunched(configs.get(0));
}
else if(csize > 1) {
config = lcm.getMRUConfiguration(configs, group, resource);
@@ -334,7 +337,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
}
}
else {
- List exts = (List) fExtCache.get(resource);
+ List<LaunchShortcutExtension> exts = fExtCache.get(resource);
if(exts == null && resource != null) {
fExtCache.put(resource, sc);
}
@@ -358,7 +361,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
return resource.getName();
}
else {
- return MessageFormat.format(ContextMessages.LaunchingResourceManager_1, new String[] {((LaunchShortcutExtension) sc.get(0)).getLabel()});
+ return MessageFormat.format(ContextMessages.LaunchingResourceManager_1, new Object[] { sc.get(0).getLabel() });
}
}
else {
@@ -376,12 +379,12 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
*
* @since 3.4
*/
- protected List pruneShortcuts(List shortcuts, IResource resource, String mode) {
- List list = new ArrayList(shortcuts);
+ protected List<LaunchShortcutExtension> pruneShortcuts(List<LaunchShortcutExtension> shortcuts, IResource resource, String mode) {
+ List<LaunchShortcutExtension> list = new ArrayList<LaunchShortcutExtension>(shortcuts);
if(resource == null) {
LaunchShortcutExtension ext = null;
- for(ListIterator iter = list.listIterator(); iter.hasNext();) {
- ext = (LaunchShortcutExtension) iter.next();
+ for (ListIterator<LaunchShortcutExtension> iter = list.listIterator(); iter.hasNext();) {
+ ext = iter.next();
if(!ext.isParticipant()) {
iter.remove();
}
@@ -402,14 +405,12 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
*
* @since 3.4
*/
- public IResource getLaunchableResource(List shortcuts, IStructuredSelection selection) {
+ public IResource getLaunchableResource(List<LaunchShortcutExtension> shortcuts, IStructuredSelection selection) {
if(selection != null && !selection.isEmpty()) {
- ArrayList resources = new ArrayList();
+ ArrayList<IResource> resources = new ArrayList<IResource>();
IResource resource = null;
Object o = selection.getFirstElement();
- LaunchShortcutExtension ext = null;
- for(Iterator iter = shortcuts.iterator(); iter.hasNext();) {
- ext = (LaunchShortcutExtension) iter.next();
+ for (LaunchShortcutExtension ext : shortcuts) {
if(o instanceof IEditorPart) {
resource = ext.getLaunchableResource((IEditorPart) o);
}
@@ -422,7 +423,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
}
}
if(resources.size() > 0) {
- return (IResource) resources.get(0);
+ return resources.get(0);
}
}
return null;
@@ -436,10 +437,10 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
*
* @since 3.4
*/
- public List getShortcutsForSelection(IStructuredSelection selection, String mode) {
- ArrayList list = new ArrayList();
- List sc = DebugUIPlugin.getDefault().getLaunchConfigurationManager().getLaunchShortcuts();
- List ctxt = new ArrayList();
+ public List<LaunchShortcutExtension> getShortcutsForSelection(IStructuredSelection selection, String mode) {
+ ArrayList<LaunchShortcutExtension> list = new ArrayList<LaunchShortcutExtension>();
+ List<LaunchShortcutExtension> sc = DebugUIPlugin.getDefault().getLaunchConfigurationManager().getLaunchShortcuts();
+ List<IEditorInput> ctxt = new ArrayList<IEditorInput>();
// work around to bug in Structured Selection that returns actual underlying array in selection
// @see bug 211646
ctxt.addAll(selection.toList());
@@ -449,9 +450,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
}
IEvaluationContext context = DebugUIPlugin.createEvaluationContext(ctxt);
context.addVariable("selection", ctxt); //$NON-NLS-1$
- LaunchShortcutExtension ext = null;
- for(Iterator iter = sc.iterator(); iter.hasNext();) {
- ext = (LaunchShortcutExtension) iter.next();
+ for (LaunchShortcutExtension ext : sc) {
try {
if(ext.evalEnablementExpression(context, ext.getContextualLaunchEnablementExpression()) &&
ext.getModes().contains(mode) && !WorkbenchActivityHelper.filterItem(ext)) {
@@ -476,16 +475,15 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
*
* @since 3.4
*/
- public List getParticipatingLaunchConfigurations(IStructuredSelection selection, IResource resource, List shortcuts, String mode) {
- HashSet configs = new HashSet();
+ public List<ILaunchConfiguration> getParticipatingLaunchConfigurations(IStructuredSelection selection, IResource resource, List<LaunchShortcutExtension> shortcuts, String mode) {
+ List<ILaunchConfiguration> configs = new ArrayList<ILaunchConfiguration>();
int voteDefault = 0;
if(selection != null) {
Object o = selection.getFirstElement();
LaunchShortcutExtension ext = null;
ILaunchConfiguration[] cfgs = null;
- //TODO this falls victim to contributors code performance
for(int i = 0; i < shortcuts.size(); i++) {
- ext = (LaunchShortcutExtension) shortcuts.get(i);
+ ext = shortcuts.get(i);
if(o instanceof IEditorPart) {
cfgs = ext.getLaunchConfigurations((IEditorPart)o);
}
@@ -493,8 +491,8 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
cfgs = ext.getLaunchConfigurations(selection);
}
if (cfgs == null) {
- Set types = ext.getAssociatedConfigurationTypes();
- addAllToList(configs, DebugUIPlugin.getDefault().getLaunchConfigurationManager().getApplicableLaunchConfigurations((String[]) types.toArray(new String[types.size()]), resource));
+ Set<String> types = ext.getAssociatedConfigurationTypes();
+ addAllToList(configs, DebugUIPlugin.getDefault().getLaunchConfigurationManager().getApplicableLaunchConfigurations(types.toArray(new String[types.size()]), resource));
voteDefault++;
} else {
if(cfgs.length > 0) {
@@ -509,11 +507,11 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
// consider default configurations if no configurations were contributed
addAllToList(configs, DebugUIPlugin.getDefault().getLaunchConfigurationManager().getApplicableLaunchConfigurations(null, resource));
}
- Iterator iterator = configs.iterator();
+ Iterator<ILaunchConfiguration> iterator = configs.iterator();
while (iterator.hasNext()) {
- ILaunchConfiguration config = (ILaunchConfiguration) iterator.next();
+ ILaunchConfiguration config = iterator.next();
try {
- Set modes = config.getModes();
+ Set<String> modes = config.getModes();
modes.add(mode);
if (!config.getType().supportsModeCombination(modes)) {
iterator.remove();
@@ -521,7 +519,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
}
catch (CoreException e) {}
}
- return new ArrayList(configs);
+ return configs;
}
/**
@@ -530,12 +528,14 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
* @param list the {@link List} to append to
* @param values the array of {@link Object}s to add to the list
*/
- private void addAllToList(Collection list, Object[] values) {
- if(list == null || values == null) {
+ private void addAllToList(List<ILaunchConfiguration> list, ILaunchConfiguration[] configs) {
+ if (list == null || configs == null) {
return;
}
- for(int i = 0; i < values.length; i++) {
- list.add(values[i]);
+ for (int i = 0; i < configs.length; i++) {
+ if (!list.contains(configs[i])) {
+ list.add(configs[i]);
+ }
}
}
@@ -570,19 +570,18 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
DebugUIPlugin.getDefault().getLaunchConfigurationManager().removeLaunchHistoryListener(this);
DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this);
- for(Iterator iter = fWindows.iterator(); iter.hasNext();) {
- ((IWorkbenchWindow)iter.next()).getSelectionService().removeSelectionListener(this);
+ for (IWorkbenchWindow window : fWindows) {
+ window.getSelectionService().removeSelectionListener(this);
}
- IWorkbenchWindow window = null;
// set fUpdateLabel to false so that mouse track listener will do nothing if called
// before the asynchronous execution disposes them
fUpdateLabel = false;
- for(Iterator iter = fToolbars.keySet().iterator(); iter.hasNext();) {
- window = (IWorkbenchWindow) iter.next();
- final ToolBar bar = (ToolBar) fToolbars.get(window);
+ for (Entry<IWorkbenchWindow, ToolBar> entry : fToolbars.entrySet()) {
+ final ToolBar bar = entry.getValue();
if(bar != null && !bar.isDisposed()) {
final MouseTrackAdapter listener = fMouseListener;
DebugUIPlugin.getStandardDisplay().asyncExec(new Runnable() {
+ @Override
public void run() {
bar.removeMouseTrackListener(listener);
}
@@ -599,6 +598,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/**
* @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow)
*/
+ @Override
public void windowActivated(IWorkbenchWindow window) {
if(!fToolbars.containsKey(window)) {
addMouseListener(window);
@@ -608,8 +608,9 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/**
* @see org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow)
*/
+ @Override
public void windowClosed(IWorkbenchWindow window) {
- ToolBar bar = (ToolBar) fToolbars.remove(window);
+ ToolBar bar = fToolbars.remove(window);
if(bar != null && !bar.isDisposed()) {
bar.removeMouseTrackListener(fMouseListener);
}
@@ -621,11 +622,13 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/**
* @see org.eclipse.ui.IWindowListener#windowDeactivated(org.eclipse.ui.IWorkbenchWindow)
*/
+ @Override
public void windowDeactivated(IWorkbenchWindow window) {}
/**
* @see org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow)
*/
+ @Override
public void windowOpened(IWorkbenchWindow window) {
if(fWindows.add(window)) {
window.getSelectionService().addSelectionListener(this);
@@ -655,6 +658,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/**
* @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
+ @Override
public void propertyChange(PropertyChangeEvent event) {
if(event.getProperty().equals(IInternalDebugUIConstants.PREF_USE_CONTEXTUAL_LAUNCH) ||
event.getProperty().equals(IInternalDebugUIConstants.PREF_LAUNCH_LAST_IF_NOT_LAUNCHABLE)) {
@@ -668,6 +672,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/* (non-Javadoc)
* @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
*/
+ @Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if(isContextLaunchEnabled()) {
fUpdateLabel = true;
@@ -677,6 +682,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.ILaunchHistoryChangedListener#launchHistoryChanged()
*/
+ @Override
public void launchHistoryChanged() {
//this always must be set to true, because as the history is loaded these events are fired, and we need to
//update on workspace load.
@@ -686,6 +692,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/* (non-Javadoc)
* @see org.eclipse.debug.core.ILaunchesListener2#launchesTerminated(org.eclipse.debug.core.ILaunch[])
*/
+ @Override
public void launchesTerminated(ILaunch[] launches) {
fUpdateLabel = true;
}
@@ -693,6 +700,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/* (non-Javadoc)
* @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[])
*/
+ @Override
public void launchesAdded(ILaunch[] launches) {
fUpdateLabel = true;
}
@@ -700,11 +708,13 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
/* (non-Javadoc)
* @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[])
*/
+ @Override
public void launchesChanged(ILaunch[] launches) {}
/* (non-Javadoc)
* @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[])
*/
+ @Override
public void launchesRemoved(ILaunch[] launches) {
//we want to ensure that even if a launch is removed from the debug view
//when it is not terminated we update the label just in case.

Back to the top