move handleEmptyLookup to a more appropriate class

This commit is contained in:
peter
2011-01-25 21:03:48 +01:00
parent 3a79277122
commit fe69b2ca7c
2 changed files with 42 additions and 38 deletions
@@ -21,8 +21,6 @@ import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.completion.impl.CompletionServiceImpl;
import com.intellij.codeInsight.editorActions.CompletionAutoPopupHandler;
import com.intellij.codeInsight.hint.EditorHintListener;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.codeInsight.lookup.*;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.featureStatistics.FeatureUsageTracker;
@@ -62,11 +60,9 @@ import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.reference.SoftReference;
import com.intellij.ui.LightweightHint;
import com.intellij.util.Consumer;
import com.intellij.util.ThreeState;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.messages.MessageBusConnection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -478,7 +474,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
final LookupElement[] items) {
if (items.length == 0) {
LookupManager.getInstance(indicator.getProject()).hideActiveLookup();
handleEmptyLookup(indicator);
indicator.handleEmptyLookup();
return;
}
@@ -603,38 +599,6 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
return invokedExplicitly && CodeInsightSettings.getInstance().AUTOCOMPLETE_COMMON_PREFIX;
}
protected void handleEmptyLookup(final CompletionProgressIndicator indicator) {
indicator.assertDisposed();
assert !indicator.isAutopopupCompletion();
if (!ApplicationManager.getApplication().isUnitTestMode() && invokedExplicitly) {
for (final CompletionContributor contributor : CompletionContributor.forParameters(indicator.getParameters())) {
final String text = contributor.handleEmptyLookup(indicator.getParameters(), indicator.getEditor());
if (StringUtil.isNotEmpty(text)) {
LightweightHint hint = showErrorHint(indicator.getProject(), indicator.getEditor(), text);
CompletionServiceImpl.setCompletionPhase(indicator.areModifiersChanged() ? CompletionPhase.NoCompletion : new CompletionPhase.NoSuggestionsHint(hint, indicator));
return;
}
}
}
CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion);
}
private static LightweightHint showErrorHint(Project project, Editor editor, String text) {
final LightweightHint[] result = {null};
final EditorHintListener listener = new EditorHintListener() {
public void hintShown(final Project project, final LightweightHint hint, final int flags) {
result[0] = hint;
}
};
final MessageBusConnection connection = project.getMessageBus().connect();
connection.subscribe(EditorHintListener.TOPIC, listener);
assert text != null;
HintManager.getInstance().showErrorHint(editor, text);
connection.disconnect();
return result[0];
}
private static void lookupItemSelected(final CompletionProgressIndicator indicator, @NotNull final LookupElement item, final char completionChar,
final List<LookupElement> items) {
if (indicator.getHandler().autopopup) {
@@ -17,6 +17,8 @@
package com.intellij.codeInsight.completion;
import com.intellij.codeInsight.completion.impl.CompletionServiceImpl;
import com.intellij.codeInsight.hint.EditorHintListener;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.codeInsight.lookup.*;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.openapi.actionSystem.IdeActions;
@@ -42,9 +44,11 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.ReferenceRange;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.ui.LightweightHint;
import com.intellij.util.ObjectUtils;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.messages.MessageBusConnection;
import com.intellij.util.ui.update.MergingUpdateQueue;
import com.intellij.util.ui.update.Update;
import org.jetbrains.annotations.NotNull;
@@ -464,7 +468,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
final CompletionProgressIndicator current = CompletionServiceImpl.getCompletionService().getCurrentCompletion();
LOG.assertTrue(current == null, current + "!=" + CompletionProgressIndicator.this);
myHandler.handleEmptyLookup(CompletionProgressIndicator.this);
handleEmptyLookup();
}
}
else {
@@ -619,4 +623,40 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
public String toString() {
return myState.toString();
}
protected void handleEmptyLookup() {
assertDisposed();
assert !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(
areModifiersChanged() ? CompletionPhase.NoCompletion : new CompletionPhase.NoSuggestionsHint(hint, this));
return;
}
}
CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion);
}
private static LightweightHint showErrorHint(Project project, Editor editor, String text) {
final LightweightHint[] result = {null};
final EditorHintListener listener = new EditorHintListener() {
public void hintShown(final Project project, final LightweightHint hint, final int flags) {
result[0] = hint;
}
};
final MessageBusConnection connection = project.getMessageBus().connect();
connection.subscribe(EditorHintListener.TOPIC, listener);
assert text != null;
HintManager.getInstance().showErrorHint(editor, text);
connection.disconnect();
return result[0];
}
}