Bug 538876: catch exceptions thrown in AsyncCompletionProposalPopup
Change-Id: I456288d4e02824673ac4731ec8d54a436e3cf560
Signed-off-by: Tobias Melcher <Tobias.Melcher@sap.com>
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/AsyncCompletionProposalPopup.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/AsyncCompletionProposalPopup.java
index 77ed304..9bcb4ef 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/AsyncCompletionProposalPopup.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/AsyncCompletionProposalPopup.java
@@ -33,6 +33,9 @@
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.SafeRunner;
+
import org.eclipse.jface.contentassist.IContentAssistSubjectControl;
import org.eclipse.jface.text.BadLocationException;
@@ -341,11 +344,18 @@
List<CompletableFuture<List<ICompletionProposal>>> futures = new ArrayList<>(processors.size());
for (IContentAssistProcessor processor : processors) {
futures.add(CompletableFuture.supplyAsync(() -> {
- ICompletionProposal[] proposals= processor.computeCompletionProposals(fViewer, invocationOffset);
- if (proposals == null) {
- return Collections.emptyList();
- }
- return Arrays.asList(proposals);
+ final List<ICompletionProposal>[] result= new List[] { null };
+ SafeRunner.run(new ISafeRunnable() {
+ @Override
+ public void run() throws Exception {
+ ICompletionProposal[] proposals= processor.computeCompletionProposals(fViewer, invocationOffset);
+ if (proposals == null) {
+ result[0]= Collections.emptyList();
+ }
+ result[0]= Arrays.asList(proposals);
+ }
+ });
+ return result[0];
}));
}
return futures;