diff options
author | BoykoAlex | 2019-09-13 19:46:14 +0000 |
---|---|---|
committer | Mickael Istria | 2019-09-20 07:37:24 +0000 |
commit | d82a4a4095918a66621d6c589379d3ba9b10a03f (patch) | |
tree | 9ccc94b68a8f3d59f1170480e1018a3f07341dfa /org.eclipse.jface.text/src/org/eclipse/jface | |
parent | b4ca5bddb0bb5b94ee079ba332f8d7e79e6b0047 (diff) | |
download | eclipse.platform.text-d82a4a4095918a66621d6c589379d3ba9b10a03f.tar.gz eclipse.platform.text-d82a4a4095918a66621d6c589379d3ba9b10a03f.tar.xz eclipse.platform.text-d82a4a4095918a66621d6c589379d3ba9b10a03f.zip |
Bug 550920 - Recompute proposals if some cannot be filtered out
Change-Id: I51282e29252b8e27d318fceed7d9634cb708f2e0
Signed-off-by: BoykoAlex <aboyko@pivotal.io>
Diffstat (limited to 'org.eclipse.jface.text/src/org/eclipse/jface')
-rw-r--r-- | org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/AsyncCompletionProposalPopup.java | 35 |
1 files changed, 20 insertions, 15 deletions
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 3c1a8100422..89520fefa20 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 @@ -32,7 +32,6 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.SafeRunner; @@ -231,21 +230,27 @@ class AsyncCompletionProposalPopup extends CompletionProposalPopup { } List<ICompletionProposal> newProposals= new ArrayList<>(computedProposals); fComputedProposals= newProposals; - Display.getDefault().asyncExec(() -> { - if (autoInsert && !autoActivated && remaining.isEmpty() && newProposals.size() == 1 && canAutoInsert(newProposals.get(0))) { - if (Helper.okToUse(fProposalShell)) { - insertProposal(newProposals.get(0), (char) 0, 0, offset); - hide(); + Control control= fContentAssistSubjectControlAdapter.getControl(); + if (!control.isDisposed()) { + control.getDisplay().asyncExec(() -> { + // Don't run anything if offset has changed while runnable was scheduled (i.e. filtering might have occurred for fast CA) + if (offset == fInvocationOffset) { + if (autoInsert && !autoActivated && remaining.isEmpty() && newProposals.size() == 1 && canAutoInsert(newProposals.get(0))) { + if (Helper.okToUse(fProposalShell)) { + insertProposal(newProposals.get(0), (char) 0, 0, offset); + hide(); + } + return; + } + if (remaining.isEmpty() && callback != null) { + callback.accept(newProposals); + } else { + setProposals(newProposals, false); + displayProposals(); + } } - return; - } - if (remaining.isEmpty() && callback != null) { - callback.accept(newProposals); - } else { - setProposals(newProposals, false); - displayProposals(); - } - }); + }); + } }); } displayProposals(); |