|
Lines 13-21
Link Here
|
| 13 |
import org.eclipse.core.resources.IWorkspace; |
13 |
import org.eclipse.core.resources.IWorkspace; |
| 14 |
import org.eclipse.core.resources.ResourcesPlugin; |
14 |
import org.eclipse.core.resources.ResourcesPlugin; |
| 15 |
import org.eclipse.core.runtime.IAdaptable; |
15 |
import org.eclipse.core.runtime.IAdaptable; |
|
|
16 |
import org.eclipse.core.runtime.IProgressMonitor; |
| 17 |
import org.eclipse.core.runtime.IStatus; |
| 18 |
import org.eclipse.core.runtime.Status; |
| 19 |
import org.eclipse.core.runtime.jobs.Job; |
| 16 |
import org.eclipse.jface.resource.ImageDescriptor; |
20 |
import org.eclipse.jface.resource.ImageDescriptor; |
| 17 |
import org.eclipse.jface.util.IPropertyChangeListener; |
21 |
import org.eclipse.jface.util.IPropertyChangeListener; |
| 18 |
import org.eclipse.jface.util.PropertyChangeEvent; |
22 |
import org.eclipse.jface.util.PropertyChangeEvent; |
|
|
23 |
import org.eclipse.swt.widgets.Display; |
| 19 |
import org.eclipse.ui.IMemento; |
24 |
import org.eclipse.ui.IMemento; |
| 20 |
import org.eclipse.ui.IWorkbenchWindow; |
25 |
import org.eclipse.ui.IWorkbenchWindow; |
| 21 |
import org.eclipse.ui.IWorkingSet; |
26 |
import org.eclipse.ui.IWorkingSet; |
|
Lines 385-390
Link Here
|
| 385 |
} |
390 |
} |
| 386 |
} |
391 |
} |
| 387 |
|
392 |
|
|
|
393 |
/* |
| 394 |
* Not a definite test ,but a snippet to reproduce the bug 272528 |
| 395 |
*/ |
| 396 |
public void testConcurrentGetWorkingSets() throws Throwable { |
| 397 |
IWorkingSet[] testSets = new IWorkingSet[50]; |
| 398 |
for (int i = 0; i < testSets.length; i++) { |
| 399 |
testSets[i] = fWorkingSetManager.createWorkingSet(i |
| 400 |
+ WORKING_SET_NAME_1 + i, new IAdaptable[0]); |
| 401 |
fWorkingSetManager.addWorkingSet(testSets[i]); |
| 402 |
} |
| 403 |
final String familyName = "testWorkingSetManagerThreadSafety"; |
| 404 |
class WSetGetter extends Job { |
| 405 |
boolean done = false; |
| 406 |
|
| 407 |
WSetGetter() { |
| 408 |
super("WSetGetter"); |
| 409 |
setSystem(true); |
| 410 |
} |
| 411 |
|
| 412 |
protected IStatus run(IProgressMonitor monitor) { |
| 413 |
try { |
| 414 |
for (int i = 0; i < 1000; i++) { |
| 415 |
fWorkingSetManager.getWorkingSets(); |
| 416 |
if (i % 100 == 0) { |
| 417 |
Thread.yield(); |
| 418 |
} |
| 419 |
} |
| 420 |
} finally { |
| 421 |
done = true; |
| 422 |
} |
| 423 |
return Status.OK_STATUS; |
| 424 |
} |
| 425 |
|
| 426 |
public boolean belongsTo(Object family) { |
| 427 |
return familyName == family; |
| 428 |
} |
| 429 |
} |
| 430 |
WSetGetter[] getters = new WSetGetter[10]; |
| 431 |
for (int i = 0; i < getters.length; i++) { |
| 432 |
getters[i] = new WSetGetter(); |
| 433 |
} |
| 434 |
try { |
| 435 |
for (int i = 0; i < getters.length; i++) { |
| 436 |
getters[i].schedule(); |
| 437 |
fWorkingSetManager.getWorkingSets(); |
| 438 |
} |
| 439 |
|
| 440 |
boolean sleep = true; |
| 441 |
while (sleep) { |
| 442 |
Thread.sleep(200); |
| 443 |
Display.getDefault().readAndDispatch(); |
| 444 |
fWorkingSetManager.getWorkingSets(); |
| 445 |
sleep = false; |
| 446 |
for (int i = 0; i < getters.length && !sleep; i++) { |
| 447 |
if (!getters[i].done) { |
| 448 |
sleep = true; |
| 449 |
} |
| 450 |
} |
| 451 |
} |
| 452 |
} finally { |
| 453 |
for (int i = 0; i < testSets.length; i++) { |
| 454 |
fWorkingSetManager.removeWorkingSet(testSets[i]); |
| 455 |
} |
| 456 |
} |
| 457 |
} |
| 388 |
/** |
458 |
/** |
| 389 |
* @param setIds |
459 |
* @param setIds |
| 390 |
* @param i |
460 |
* @param i |