Skip to content

Commit ec31aef

Browse files
committed
Use a separate ExecutorService in AsyncCompletionProposalPopup
This is necessary in order to effectively cancel all running futures in the popup (when one closes the popup).
1 parent a7d2795 commit ec31aef

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/AsyncCompletionProposalPopup.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.util.Set;
2626
import java.util.concurrent.CompletableFuture;
2727
import java.util.concurrent.ExecutionException;
28+
import java.util.concurrent.ExecutorService;
29+
import java.util.concurrent.Executors;
2830
import java.util.concurrent.TimeUnit;
2931
import java.util.concurrent.TimeoutException;
3032
import java.util.concurrent.atomic.AtomicInteger;
@@ -70,6 +72,8 @@ class AsyncCompletionProposalPopup extends CompletionProposalPopup {
7072

7173
private PopupVisibleTimer fPopupVisibleTimer= new PopupVisibleTimer();
7274

75+
private ExecutorService completionFuturesExecutor;
76+
7377
private static final class ComputingProposal implements ICompletionProposal, ICompletionProposalExtension {
7478

7579
private final int fOffset;
@@ -341,6 +345,7 @@ void createProposalSelector() {
341345
void cancelFutures() {
342346
toCancelFutures.forEach(future -> future.cancel(true));
343347
toCancelFutures.clear();
348+
completionFuturesExecutor.shutdownNow();
344349
}
345350

346351
@Override
@@ -371,6 +376,8 @@ protected List<CompletableFuture<List<ICompletionProposal>>> buildCompletionFutu
371376
return Collections.emptyList();
372377
}
373378
List<CompletableFuture<List<ICompletionProposal>>> futures = new ArrayList<>(processors.size());
379+
completionFuturesExecutor= Executors.newSingleThreadExecutor();
380+
374381
for (IContentAssistProcessor processor : processors) {
375382
futures.add(CompletableFuture.supplyAsync(() -> {
376383
AtomicReference<List<ICompletionProposal>> result= new AtomicReference<>();
@@ -389,7 +396,7 @@ protected List<CompletableFuture<List<ICompletionProposal>>> buildCompletionFutu
389396
return Collections.emptyList();
390397
}
391398
return proposals;
392-
}));
399+
}, completionFuturesExecutor));
393400
}
394401
return futures;
395402
}

0 commit comments

Comments
 (0)