@Override public String incrementalComplete() { cancelFutures(); if (Helper.okToUse(fProposalShell) && fFilteredProposals != null) { return super.incrementalComplete(); } final Control control= fContentAssistSubjectControlAdapter.getControl(); if (fKeyListener == null) fKeyListener= new ProposalSelectionListener(); if (!Helper.okToUse(fProposalShell) && !control.isDisposed()) fContentAssistSubjectControlAdapter.addKeyListener(fKeyListener); fInvocationOffset= fContentAssistSubjectControlAdapter.getSelectedRange().x; fFilterOffset= fInvocationOffset; fLastCompletionOffset= fFilterOffset; fFutures= buildCompletionFuturesOrJobs(fInvocationOffset); fFilteredProposals= runFutures(fInvocationOffset, (List<ICompletionProposal> proposals) -> { ensureDocumentListenerInstalled(); if (proposals.size() > 0 && completeCommonPrefix()) { hide(); } else { fFilteredProposals= proposals; setProposals(proposals, false); displayProposals(); } }, true, false, true); return getErrorMessage(); }