mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move handleEmptyLookup to a more appropriate class
This commit is contained in:
+1
-37
@@ -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) {
|
||||
|
||||
+41
-1
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user