diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form b/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form index cb148be0fa62..36d917667655 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form +++ b/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form @@ -56,7 +56,7 @@ - + @@ -64,16 +64,6 @@ - - - - - - - - - - diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java b/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java index 4a19f6d197cf..9021da119bfe 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java @@ -62,7 +62,6 @@ public class CodeCompletionPanel { private JBRadioButton myAllLetters; private JBLabel myBasicShortcut; private JBLabel mySmartShortcut; - private JBLabel myDocComment; public CodeCompletionPanel() { ChangeListener updateCaseCheckboxes = __ -> { @@ -78,7 +77,6 @@ public class CodeCompletionPanel { myBasicShortcut.setForeground(JBColor.GRAY); mySmartShortcut.setForeground(JBColor.GRAY); - myDocComment.setForeground(JBColor.GRAY); myCbAutocompletion.addActionListener( new ActionListener() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupManagerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupManagerImpl.java index 913aa31093d1..6365178a86ff 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupManagerImpl.java @@ -35,8 +35,6 @@ import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; import com.intellij.ui.LightweightHint; import com.intellij.util.Alarm; import com.intellij.util.BitUtil; @@ -129,31 +127,9 @@ public class LookupManagerImpl extends LookupManager { @NotNull final LookupArranger arranger) { hideActiveLookup(); - final CodeInsightSettings settings = CodeInsightSettings.getInstance(); - - final PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument()); - final LookupImpl lookup = createLookup(editor, arranger, myProject); final Alarm alarm = new Alarm(); - final Runnable request = () -> { - if (myActiveLookup != lookup) return; - - LookupElement currentItem = lookup.getCurrentItem(); - if (currentItem != null && currentItem.isValid() && isAutoPopupJavadocSupportedBy(currentItem)) { - final CompletionProcess completion = CompletionService.getCompletionService().getCurrentCompletion(); - if (completion != null && !completion.isAutopopupCompletion()) { - try { - DocumentationManager.getInstance(myProject).showJavaDocInfo(editor, psiFile, false); - } - catch (IndexNotReadyException ignored) { - } - } - } - }; - if (settings.AUTO_POPUP_JAVADOC_INFO) { - alarm.addRequest(request, settings.JAVADOC_INFO_DELAY); - } ApplicationManager.getApplication().assertIsDispatchThread(); @@ -173,8 +149,9 @@ public class LookupManagerImpl extends LookupManager { @Override public void currentItemChanged(LookupEvent event) { alarm.cancelAllRequests(); + CodeInsightSettings settings = CodeInsightSettings.getInstance(); if (settings.AUTO_POPUP_JAVADOC_INFO && DocumentationManager.getInstance(myProject).getDocInfoHint() == null) { - alarm.addRequest(request, settings.JAVADOC_INFO_DELAY); + alarm.addRequest(() -> showJavadoc(lookup), settings.JAVADOC_INFO_DELAY); } } @@ -208,7 +185,29 @@ public class LookupManagerImpl extends LookupManager { return lookup; } - protected boolean isAutoPopupJavadocSupportedBy(LookupElement lookupItem) { + private void showJavadoc(LookupImpl lookup) { + if (myActiveLookup != lookup) return; + + DocumentationManager docManager = DocumentationManager.getInstance(myProject); + if (docManager.getDocInfoHint() != null) return; // will auto-update + + LookupElement currentItem = lookup.getCurrentItem(); + CompletionProcess completion = CompletionService.getCompletionService().getCurrentCompletion(); + if (currentItem != null && currentItem.isValid() && isAutoPopupJavadocSupportedBy(currentItem) && completion != null) { + try { + boolean hideLookupWithDoc = completion.isAutopopupCompletion() || CodeInsightSettings.getInstance().JAVADOC_INFO_DELAY == 0; + docManager.showJavaDocInfo(lookup.getEditor(), lookup.getPsiFile(), false, () -> { + if (hideLookupWithDoc && completion == CompletionService.getCompletionService().getCurrentCompletion()) { + hideActiveLookup(); + } + }); + } + catch (IndexNotReadyException ignored) { + } + } + } + + protected boolean isAutoPopupJavadocSupportedBy(@SuppressWarnings("unused") LookupElement lookupItem) { return true; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/actions/ChooseItemAction.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/actions/ChooseItemAction.java index b394469cc6f0..634414b5a695 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/actions/ChooseItemAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/actions/ChooseItemAction.java @@ -19,6 +19,7 @@ package com.intellij.codeInsight.lookup.impl.actions; import com.intellij.codeInsight.completion.CodeCompletionFeatures; import com.intellij.codeInsight.completion.CompletionProcess; import com.intellij.codeInsight.completion.CompletionService; +import com.intellij.codeInsight.hint.HintManagerImpl; import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.codeInsight.lookup.impl.LookupImpl; @@ -36,7 +37,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; -public abstract class ChooseItemAction extends EditorAction { +public abstract class ChooseItemAction extends EditorAction implements HintManagerImpl.ActionToIgnore { public ChooseItemAction(Handler handler) { super(handler); }