void scheduleAdvertising() { if (myLookup.isAvailableToUser()) { return; } final List<CompletionContributor> list = CompletionContributor.forParameters(myParameters); for (final CompletionContributor contributor : list) { if (myLookup.getAdvertisementText() != null) return; if (!myLookup.isCalculating() && !myLookup.isVisible()) return; @SuppressWarnings("deprecation") String s = contributor.advertise(myParameters); if (myLookup.getAdvertisementText() != null) return; if (s != null) { myLookup.setAdvertisementText(s); ApplicationManager.getApplication() .invokeLater( new Runnable() { @Override public void run() { if (isAutopopupCompletion() && !myLookup.isAvailableToUser()) { return; } if (!CompletionServiceImpl.isPhase( CompletionPhase.BgCalculation.class, CompletionPhase.ItemsCalculated.class)) { return; } if (CompletionServiceImpl.getCompletionPhase().indicator != CompletionProgressIndicator.this) { return; } updateLookup(); } }, myQueue.getModalityState()); return; } } }
protected void handleEmptyLookup(final boolean awaitSecondInvocation) { LOG.assertTrue(!isAutopopupCompletion()); if (ApplicationManager.getApplication().isUnitTestMode() || !myHandler.invokedExplicitly) { CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion); return; } for (final CompletionContributor contributor : CompletionContributor.forParameters(getParameters())) { final String text = contributor.handleEmptyLookup(getParameters(), getEditor()); if (StringUtil.isNotEmpty(text)) { LightweightHint hint = showErrorHint(getProject(), getEditor(), text); CompletionServiceImpl.setCompletionPhase( awaitSecondInvocation ? new CompletionPhase.NoSuggestionsHint(hint, this) : CompletionPhase.NoCompletion); return; } } CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion); }
void duringCompletion(CompletionInitializationContext initContext) { if (isAutopopupCompletion()) { if (shouldFocusLookup(myParameters)) { myLookup.setFocused(true); } else if (FeatureUsageTracker.getInstance() .isToBeAdvertisedInLookup( CodeCompletionFeatures.EDITING_COMPLETION_CONTROL_ENTER, getProject())) { myLookup.addAdvertisement( "Press " + CompletionContributor.getActionShortcut( IdeActions.ACTION_CHOOSE_LOOKUP_ITEM_ALWAYS) + " to choose the first suggestion"); } if (!myEditor.isOneLineMode() && FeatureUsageTracker.getInstance() .isToBeAdvertisedInLookup( CodeCompletionFeatures.EDITING_COMPLETION_CONTROL_ARROWS, getProject())) { myLookup.addAdvertisement( CompletionContributor.getActionShortcut(IdeActions.ACTION_LOOKUP_DOWN) + " and " + CompletionContributor.getActionShortcut(IdeActions.ACTION_LOOKUP_UP) + " will move caret down and up in the editor"); } } ProgressManager.checkCanceled(); if (!initContext .getOffsetMap() .wasModified(CompletionInitializationContext.IDENTIFIER_END_OFFSET)) { try { final int selectionEndOffset = initContext.getSelectionEndOffset(); final PsiReference reference = initContext.getFile().findReferenceAt(selectionEndOffset); if (reference != null) { initContext.setReplacementOffset(findReplacementOffset(selectionEndOffset, reference)); } } catch (IndexNotReadyException ignored) { } } for (CompletionContributor contributor : CompletionContributor.forLanguage(initContext.getPositionLanguage())) { ProgressManager.checkCanceled(); if (DumbService.getInstance(initContext.getProject()).isDumb() && !DumbService.isDumbAware(contributor)) { continue; } contributor.duringCompletion(initContext); } }