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 151032 Details for
Bug 293882
[WorkingSets] AbstractWorkingSetManager creates too many jobs
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]
Fix
workingSetUpdater.patch (text/plain), 5.96 KB, created by
Min Idzelis
on 2009-11-01 16:01:32 EST
(
hide
)
Description:
Fix
Filename:
MIME Type:
Creator:
Min Idzelis
Created:
2009-11-01 16:01:32 EST
Size:
5.96 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java,v >retrieving revision 1.39 >diff -u -r1.39 AbstractWorkingSetManager.java >--- Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java 25 May 2009 20:52:11 -0000 1.39 >+++ Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java 1 Nov 2009 21:03:54 -0000 >@@ -19,11 +19,11 @@ > import java.util.Comparator; > import java.util.HashMap; > import java.util.Iterator; >+import java.util.LinkedList; > import java.util.List; > import java.util.Map; > import java.util.SortedSet; > import java.util.TreeSet; >- > import org.eclipse.core.commands.common.EventManager; > import org.eclipse.core.runtime.Assert; > import org.eclipse.core.runtime.IAdaptable; >@@ -35,6 +35,7 @@ > import org.eclipse.core.runtime.Platform; > import org.eclipse.core.runtime.SafeRunner; > import org.eclipse.core.runtime.Status; >+import org.eclipse.core.runtime.SubMonitor; > import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker; > import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler; > import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker; >@@ -64,7 +65,6 @@ > import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; > import org.eclipse.ui.internal.registry.WorkingSetDescriptor; > import org.eclipse.ui.internal.registry.WorkingSetRegistry; >-import org.eclipse.ui.progress.WorkbenchJob; > import org.eclipse.ui.statushandlers.StatusManager; > import org.osgi.framework.Bundle; > import org.osgi.framework.BundleContext; >@@ -96,7 +96,92 @@ > ((AbstractWorkingSet) o2).getUniqueId()); > } > }); >- >+ >+ class UpdateWorkingSetJob extends Job { >+ private List names = new LinkedList(); >+ >+ public UpdateWorkingSetJob() { >+ super( >+ NLS >+ .bind( >+ WorkbenchMessages.AbstractWorkingSetManager_updatersActivating, >+ "")); //$NON-NLS-1$ >+ setSystem(true); >+ } >+ >+ public void add(String name) { >+ synchronized (names) { >+ names.add(name); >+ } >+ schedule(100); >+ } >+ >+ public String remove() { >+ synchronized (names) { >+ if (names.isEmpty()) >+ return null; >+ return (String) names.remove(0); >+ } >+ } >+ >+ public int size() { >+ synchronized (names) { >+ return names.size(); >+ } >+ } >+ >+ protected IStatus run(IProgressMonitor monitor) { >+ SubMonitor mon = SubMonitor.convert(monitor); >+ int sizeTracker = size(); >+ mon.beginTask("", sizeTracker); //$NON-NLS-1$ >+ String symbolicName = remove(); >+ while (symbolicName != null) { >+ if (size() != sizeTracker) { >+ sizeTracker = size(); >+ mon.setWorkRemaining(sizeTracker); >+ } >+ mon >+ .subTask(NLS >+ .bind( >+ WorkbenchMessages.AbstractWorkingSetManager_updatersActivating, >+ symbolicName)); >+ final WorkingSetDescriptor[] descriptors = WorkbenchPlugin >+ .getDefault().getWorkingSetRegistry() >+ .getUpdaterDescriptorsForNamespace(symbolicName); >+ >+ synchronized (updaters) { >+ for (int i = 0; i < descriptors.length; i++) { >+ WorkingSetDescriptor descriptor = descriptors[i]; >+ List workingSets = getWorkingSetsForId(descriptor >+ .getId()); >+ if (workingSets.size() == 0) { >+ continue; >+ } >+ final IWorkingSetUpdater updater = getUpdater(descriptor); >+ for (Iterator iter = workingSets.iterator(); iter >+ .hasNext();) { >+ final IWorkingSet workingSet = (IWorkingSet) iter >+ .next(); >+ SafeRunner.run(new WorkingSetRunnable() { >+ >+ public void run() throws Exception { >+ if (!updater.contains(workingSet)) { >+ updater.add(workingSet); >+ } >+ } >+ }); >+ } >+ } >+ } >+ sizeTracker--; >+ mon.worked(1); >+ symbolicName = remove(); >+ } >+ monitor.done(); >+ return Status.OK_STATUS; >+ } >+ >+ } > /** > * Size of the list of most recently used working sets. > */ >@@ -107,6 +192,8 @@ > private Map/*<String, IWorkingSetUpdater>*/ updaters= new HashMap(); > > private Map/*<String, IWorkingSetElementAdapter>*/ elementAdapters = new HashMap(); >+ >+ private UpdateWorkingSetJob updateWorkingSet = new UpdateWorkingSetJob(); > > private static final IWorkingSetUpdater NULL_UPDATER= new IWorkingSetUpdater() { > public void add(IWorkingSet workingSet) { >@@ -671,46 +758,7 @@ > } > > if (event.getBundle().getState() == Bundle.ACTIVE) { >- final WorkingSetDescriptor[] descriptors = WorkbenchPlugin.getDefault() >- .getWorkingSetRegistry().getUpdaterDescriptorsForNamespace( >- symbolicName); >- >- Job job = new WorkbenchJob( >- NLS >- .bind( >- WorkbenchMessages.AbstractWorkingSetManager_updatersActivating, >- symbolicName)) { >- >- public IStatus runInUIThread(IProgressMonitor monitor) { >- synchronized (updaters) { >- for (int i = 0; i < descriptors.length; i++) { >- WorkingSetDescriptor descriptor = descriptors[i]; >- List workingSets = getWorkingSetsForId(descriptor >- .getId()); >- if (workingSets.size() == 0) { >- continue; >- } >- final IWorkingSetUpdater updater = getUpdater(descriptor); >- for (Iterator iter = workingSets.iterator(); iter >- .hasNext();) { >- final IWorkingSet workingSet = (IWorkingSet) iter >- .next(); >- SafeRunner.run(new WorkingSetRunnable() { >- >- public void run() throws Exception { >- if (!updater.contains(workingSet)) { >- updater.add(workingSet); >- } >- } >- }); >- } >- } >- } >- return Status.OK_STATUS; >- } >- }; >- job.setSystem(true); >- job.schedule(); >+ updateWorkingSet.add(symbolicName); > } > } >
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 293882
: 151032