Lines 63-68
Link Here
|
63 |
import java.util.Collections; |
63 |
import java.util.Collections; |
64 |
import java.util.Comparator; |
64 |
import java.util.Comparator; |
65 |
import java.util.List; |
65 |
import java.util.List; |
|
|
66 |
import java.util.logging.Level; |
66 |
import java.util.logging.Logger; |
67 |
import java.util.logging.Logger; |
67 |
import java.util.regex.Pattern; |
68 |
import java.util.regex.Pattern; |
68 |
import javax.swing.AbstractAction; |
69 |
import javax.swing.AbstractAction; |
Lines 389-428
Link Here
|
389 |
this.text = text; |
390 |
this.text = text; |
390 |
this.createTime = System.currentTimeMillis(); |
391 |
this.createTime = System.currentTimeMillis(); |
391 |
LOGGER.fine( "Worker for " + text + " - created after " + ( System.currentTimeMillis() - panel.time ) + " ms." ); |
392 |
LOGGER.fine( "Worker for " + text + " - created after " + ( System.currentTimeMillis() - panel.time ) + " ms." ); |
392 |
} |
393 |
} |
393 |
|
394 |
|
394 |
public void run() { |
395 |
public void run() { |
395 |
|
396 |
for (;;) { |
396 |
LOGGER.fine( "Worker for " + text + " - started " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
397 |
final int[] retry = new int[1]; |
397 |
|
398 |
LOGGER.fine( "Worker for " + text + " - started " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
398 |
final List<? extends TypeDescriptor> types = getTypeNames( text ); |
399 |
|
399 |
if ( isCanceled ) { |
400 |
final List<? extends TypeDescriptor> types = getTypeNames( text, retry); |
400 |
LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
401 |
if ( isCanceled ) { |
401 |
return; |
402 |
LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
402 |
} |
403 |
return; |
403 |
ListModel model = Models.fromList(types); |
404 |
} |
404 |
if (typeFilter != null) { |
405 |
ListModel model = Models.fromList(types); |
405 |
model = LazyListModel.create(model, GoToTypeAction.this, 0.1, "Not computed yet"); |
406 |
if (typeFilter != null) { |
406 |
} |
407 |
model = LazyListModel.create(model, GoToTypeAction.this, 0.1, "Not computed yet"); |
407 |
final ListModel fmodel = model; |
408 |
} |
408 |
if ( isCanceled ) { |
409 |
final ListModel fmodel = model; |
409 |
LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
410 |
if ( isCanceled ) { |
410 |
return; |
411 |
LOGGER.fine( "Worker for " + text + " exited after cancel " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
411 |
} |
412 |
return; |
412 |
|
413 |
} |
413 |
if ( !isCanceled && fmodel != null ) { |
414 |
|
414 |
LOGGER.fine( "Worker for text " + text + " finished after " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
415 |
if ( !isCanceled && fmodel != null ) { |
415 |
SwingUtilities.invokeLater(new Runnable() { |
416 |
LOGGER.fine( "Worker for text " + text + " finished after " + ( System.currentTimeMillis() - createTime ) + " ms." ); |
416 |
public void run() { |
417 |
SwingUtilities.invokeLater(new Runnable() { |
417 |
panel.setModel(fmodel); |
418 |
public void run() { |
418 |
if (okButton != null && !types.isEmpty()) { |
419 |
if (!types.isEmpty() || retry[0] == 0) { |
419 |
okButton.setEnabled (true); |
420 |
panel.setModel(fmodel); |
|
|
421 |
} |
422 |
if (okButton != null && !types.isEmpty()) { |
423 |
okButton.setEnabled (true); |
424 |
} |
420 |
} |
425 |
} |
|
|
426 |
}); |
427 |
} |
428 |
if (retry[0] > 0) { |
429 |
try { |
430 |
Thread.sleep(retry[0]); |
431 |
} catch (InterruptedException ex) { |
432 |
LOGGER.log(Level.WARNING, "Waiting for retry", ex); |
421 |
} |
433 |
} |
422 |
}); |
434 |
} else { |
423 |
} |
435 |
return; |
424 |
|
436 |
} |
425 |
|
437 |
} // for |
426 |
} |
438 |
} |
427 |
|
439 |
|
428 |
public void cancel() { |
440 |
public void cancel() { |
Lines 440-446
Link Here
|
440 |
} |
452 |
} |
441 |
|
453 |
|
442 |
@SuppressWarnings("unchecked") |
454 |
@SuppressWarnings("unchecked") |
443 |
private List<? extends TypeDescriptor> getTypeNames(String text) { |
455 |
private List<? extends TypeDescriptor> getTypeNames(String text, int[] retry) { |
444 |
// TODO: Search twice, first for current project, then for all projects |
456 |
// TODO: Search twice, first for current project, then for all projects |
445 |
List<TypeDescriptor> items; |
457 |
List<TypeDescriptor> items; |
446 |
// Multiple providers: merge results |
458 |
// Multiple providers: merge results |
Lines 465-472
Link Here
|
465 |
} |
477 |
} |
466 |
long delta = System.currentTimeMillis() - start; |
478 |
long delta = System.currentTimeMillis() - start; |
467 |
LOGGER.fine("Provider '" + provider.getDisplayName() + "' took " + delta + " ms."); |
479 |
LOGGER.fine("Provider '" + provider.getDisplayName() + "' took " + delta + " ms."); |
468 |
|
|
|
469 |
} |
480 |
} |
|
|
481 |
retry[0] = TypeProviderAccessor.DEFAULT.getRetry(result); |
470 |
if ( !isCanceled ) { |
482 |
if ( !isCanceled ) { |
471 |
//time = System.currentTimeMillis(); |
483 |
//time = System.currentTimeMillis(); |
472 |
Collections.sort(items, new TypeComparator()); |
484 |
Collections.sort(items, new TypeComparator()); |
Lines 513-519
Link Here
|
513 |
final void waitSearchFinished() { |
525 |
final void waitSearchFinished() { |
514 |
task.waitFinished(); |
526 |
task.waitFinished(); |
515 |
} |
527 |
} |
516 |
|
528 |
|
517 |
private static class Renderer extends DefaultListCellRenderer implements ChangeListener { |
529 |
private static class Renderer extends DefaultListCellRenderer implements ChangeListener { |
518 |
|
530 |
|
519 |
private MyPanel rendererComponent; |
531 |
private MyPanel rendererComponent; |