8000 replace timer for caret listener with executor and future pattern #785 · Koc/idea-php-symfony2-plugin@5701921 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5701921

Browse files
committed
replace timer for caret listener with executor and future pattern Haehnchen#785
1 parent dad896b commit 5701921

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

src/fr/adrienbrault/idea/symfony2plugin/codeInsight/caret/overlay/CaretTextOverlayListener.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,37 @@
1313
import com.intellij.psi.PsiFile;
1414
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
1515
import fr.adrienbrault.idea.symfony2plugin.codeInsight.caret.overlay.component.CaretOverlayComponent;
16-
import fr.adrienbrault.idea.symfony2plugin.codeInsight.caret.overlay.provider.XmlServiceContainerCaretTextOverlay;
1716
import fr.adrienbrault.idea.symfony2plugin.codeInsight.caret.overlay.util.CaretTextOverlayUtil;
1817
import org.jetbrains.annotations.NotNull;
1918

2019
import javax.swing.*;
2120
import java.awt.*;
22-
import java.util.Timer;
23-
import java.util.TimerTask;
21+
import java.util.concurrent.Executors;
22+
import java.util.concurrent.ScheduledExecutorService;
23+
import java.util.concurrent.ScheduledFuture;
24+
import java.util.concurrent.TimeUnit;
2425

2526
/**
2627
* @author Daniel Espendiller <daniel@espendiller.net>
2728
*/
2829
public class CaretTextOverlayListener implements CaretListener {
2930

30-
private Timer timer = null;
3131
private int startDelayMs = 250;
3232

3333
private final Object lock = new Object();
3434

35+
private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
36+
private ScheduledFuture<?> schedule;
37+
3538
@Override
3639
public void caretPositionChanged(final CaretEvent caretEvent) {
40+
synchronized (lock) {
41+
if(schedule != null) {
42+
schedule.cancel(true);
43+
schedule = null;
44+
}
45+
}
3746

38-
this.clear();
3947
final Editor editor = caretEvent.getEditor();
4048
removeOverlays(editor);
4149

@@ -49,14 +57,9 @@ public void caretPositionChanged(final CaretEvent caretEvent) {
4957
}
5058

5159
synchronized (lock) {
52-
this.timer = new Timer();
53-
this.timer.schedule(new TimerTask() {
54-
@Override
55-
public void run() {
56-
ApplicationManager.getApplication().runReadAction(new MyPsiElementRunnable(project, caretEvent, editor));
57-
timer = null;
58-
}
59-
}, startDelayMs);
60+
schedule = executor.schedule(() -> {
61+
ApplicationManager.getApplication().runReadAction(new MyPsiElementRunnable(project, caretEvent, editor));
62+
}, startDelayMs, TimeUnit.MILLISECONDS);
6063
}
6164
}
6265

@@ -88,12 +91,8 @@ private void removeOverlays(@NotNull Editor editor) {
8891

8992
synchronized public void clear() {
9093
synchronized (lock) {
91-
if(timer == null) {
92-
return;
93-
}
94-
95-
timer.cancel();
96-
timer = null;
94+
executor.shutdownNow();
95+
schedule = null;
9796
}
9897
}
9998

0 commit comments

Comments
 (0)
0