Skip to content

Commit e597e87

Browse files
committed
PDEX + PPS: add blocking callbacks
1 parent 01bbf0f commit e597e87

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

java/src/processing/mode/java/pdex/PDEX.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,21 @@ public PDEX(JavaEditor editor, PreprocessingService pps) {
102102
public void handleShowUsage(int tabIndex, int startTabOffset, int stopTabOffset) {
103103
Messages.log("* handleShowUsage");
104104
if (!enabled) return; // show usage disabled if java tabs
105-
pps.whenDone(ps -> showUsage.findUsageAndUpdateTree(ps, tabIndex, startTabOffset, stopTabOffset));
105+
pps.whenDoneBlocking(ps -> showUsage.findUsageAndUpdateTree(ps, tabIndex, startTabOffset, stopTabOffset));
106106
}
107107

108108

109109
public void handleRename(int tabIndex, int startTabOffset, int stopTabOffset) {
110110
Messages.log("* handleRename");
111111
if (!enabled) return; // refactoring disabled w/ java tabs
112-
pps.whenDone(ps -> rename.handleRename(ps, tabIndex, startTabOffset, stopTabOffset));
112+
pps.whenDoneBlocking(ps -> rename.handleRename(ps, tabIndex, startTabOffset, stopTabOffset));
113113
}
114114

115115

116116
public void handleCtrlClick(int tabIndex, int offset) {
117117
Messages.log("* handleCtrlClick");
118118
if (!enabled) return; // disabled w/ java tabs
119-
pps.whenDone(ps -> handleCtrlClick(ps, tabIndex, offset));
119+
pps.whenDoneBlocking(ps -> handleCtrlClick(ps, tabIndex, offset));
120120
}
121121

122122

java/src/processing/mode/java/pdex/PreprocessingService.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
import java.util.concurrent.BlockingQueue;
3939
import java.util.concurrent.CompletableFuture;
4040
import java.util.concurrent.CopyOnWriteArraySet;
41+
import java.util.concurrent.ExecutionException;
42+
import java.util.concurrent.TimeUnit;
43+
import java.util.concurrent.TimeoutException;
4144
import java.util.concurrent.atomic.AtomicBoolean;
4245
import java.util.function.Consumer;
4346
import java.util.stream.Collectors;
@@ -125,7 +128,7 @@ private void mainLoop() {
125128

126129
synchronized (requestLock) {
127130
if (requestQueue.isEmpty()) {
128-
Messages.log("PPS: Completed");
131+
Messages.log("PPS: Done");
129132
preprocessingTask.complete(prevResult);
130133
}
131134
}
@@ -176,17 +179,33 @@ public void notifyCodeFolderChanged() {
176179
}
177180

178181

179-
public void whenDone(Consumer<PreprocessedSketch> callback) {
180-
if (!isEnabled) return;
182+
private CompletableFuture<?> registerCallback(Consumer<PreprocessedSketch> callback) {
181183
synchronized (requestLock) {
182184
lastCallback = preprocessingTask
183185
// Run callback after both preprocessing task and previous callback
184186
.thenAcceptBothAsync(lastCallback, (ps, a) -> callback.accept(ps))
185187
// Make sure exception in callback won't cancel whole callback chain
186188
.handleAsync((res, e) -> {
187-
if (e != null) Messages.loge("exception in preprocessing callback", e);
189+
if (e != null) Messages.loge("PPS: exception in callback", e);
188190
return res;
189191
});
192+
return lastCallback;
193+
}
194+
}
195+
196+
197+
public void whenDone(Consumer<PreprocessedSketch> callback) {
198+
if (!isEnabled) return;
199+
registerCallback(callback);
200+
}
201+
202+
203+
public void whenDoneBlocking(Consumer<PreprocessedSketch> callback) {
204+
if (!isEnabled) return;
205+
try {
206+
registerCallback(callback).get(3000, TimeUnit.SECONDS);
207+
} catch (InterruptedException | ExecutionException | TimeoutException e) {
208+
// Don't care
190209
}
191210
}
192211

0 commit comments

Comments
 (0)