fKeyListener= new ProposalSelectionListener();
fKeyListener= new ProposalSelectionListener();
fKeyListener= new ProposalSelectionListener();
fKeyListener= new ProposalSelectionListener();
@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(); }
/** * This methods differs from its super as it will show the list of proposals that * gets augmented as the {@link IContentAssistProcessor#computeCompletionProposals(ITextViewer, int)} * complete. All computations operation happen in a non-UI Thread so they're not blocking UI. */ @Override public String showProposals(boolean autoActivated) { if (fKeyListener == null) fKeyListener= new ProposalSelectionListener(); final Control control= fContentAssistSubjectControlAdapter.getControl(); if (!Helper.okToUse(fProposalShell) && control != null && !control.isDisposed()) { // add the listener before computing the proposals so we don't move the caret // when the user types fast. fContentAssistSubjectControlAdapter.addKeyListener(fKeyListener); fInvocationOffset= fContentAssistSubjectControlAdapter.getSelectedRange().x; fFilterOffset= fInvocationOffset; fLastCompletionOffset= fFilterOffset; // start invocation of processors as Futures, and make them populate the proposals upon completion fFutures= buildCompletionFuturesOrJobs(fInvocationOffset); runFutures(fInvocationOffset, null, true, autoActivated, true); } else { fLastCompletionOffset= fFilterOffset; handleRepeatedInvocation(); } return getErrorMessage(); }