IDEA-186367 Parameter info popup is confused about overloaded method signature

This commit is contained in:
Dmitry Batrak
2018-02-12 14:50:59 +03:00
parent bd3dc1f174
commit ed3a1c551c
4 changed files with 43 additions and 19 deletions
@@ -336,7 +336,7 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
}
}
context.setHighlightedParameter(ObjectUtils.coalesce(chosenInfo, completeMatch));
context.setHighlightedParameter(ObjectUtils.coalesce(completeMatch, chosenInfo));
Object highlightedCandidate = candidates.length == 1 ? candidates[0] : context.getHighlightedParameter();
if (highlightedCandidate != null) {
@@ -6,6 +6,8 @@ import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.completion.LightFixtureCompletionTestCase;
import com.intellij.codeInsight.daemon.impl.ParameterHintsPresentationManager;
import com.intellij.codeInsight.hint.ParameterInfoController;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.editor.Editor;
@@ -15,6 +17,7 @@ import com.intellij.util.ui.UIUtil;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.LockSupport;
import java.util.stream.Stream;
public abstract class AbstractParameterInfoTestCase extends LightFixtureCompletionTestCase {
private EditorHintFixture myHintFixture;
@@ -51,10 +54,24 @@ public abstract class AbstractParameterInfoTestCase extends LightFixtureCompleti
assertEquals(hintText, myHintFixture.getCurrentHintText());
}
public void checkResult(String text) {
myFixture.checkResult(text);
}
public void type(String text) {
myFixture.type(text);
}
public void complete(String partOfItemText) {
LookupElement[] elements = myFixture.completeBasic();
LookupElement element = Stream.of(elements).filter(e -> {
LookupElementPresentation p = new LookupElementPresentation();
e.renderElement(p);
return (p.getItemText() + p.getTailText()).contains(partOfItemText);
}).findAny().get();
selectItem(element);
}
private void waitForParameterInfoUpdate() throws TimeoutException {
ParameterInfoController.waitForDelayedActions(getEditor(), 1, TimeUnit.MINUTES);
}
@@ -378,4 +378,29 @@ public class ParameterInfoTest extends AbstractParameterInfoTestCase {
"-\n" +
"<html>int a, <b>int b</b>, int c</html>");
}
public void testOverloadIsChangedAfterCompletion() {
configureJava("class C { void m() { System.out.pr<caret> } }");
complete("print(int i)");
type("'a");
checkResult("class C { void m() { System.out.print('a<caret>'); } }");
showParameterInfo();
checkHintContents("<html><b>boolean b</b></html>\n" +
"-\n" +
"[<html><b>char c</b></html>]\n" +
"-\n" +
"<html><b>int i</b></html>\n" +
"-\n" +
"<html><b>long l</b></html>\n" +
"-\n" +
"<html><b>float v</b></html>\n" +
"-\n" +
"<html><b>double v</b></html>\n" +
"-\n" +
"<html><b>char[] chars</b></html>\n" +
"-\n" +
"<html><b>@Nullable String s</b></html>\n" +
"-\n" +
"<html><b>@Nullable Object o</b></html>");
}
}
@@ -6,8 +6,6 @@ import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.codeInsight.hints.JavaInlayParameterHintsProvider;
import com.intellij.codeInsight.hints.Option;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.java.codeInsight.AbstractParameterInfoTestCase;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
@@ -17,8 +15,6 @@ import com.intellij.psi.JavaCodeFragmentFactory;
import com.intellij.psi.PsiExpressionCodeFragment;
import com.intellij.testFramework.EditorTestUtil;
import java.util.stream.Stream;
public class CompletionHintsTest extends AbstractParameterInfoTestCase {
private boolean myStoredSettingValue;
@@ -898,10 +894,6 @@ public class CompletionHintsTest extends AbstractParameterInfoTestCase {
}
}
private void checkResult(String text) {
myFixture.checkResult(text);
}
private void checkResultWithInlays(String text) {
myFixture.checkResultWithInlays(text);
}
@@ -949,14 +941,4 @@ public class CompletionHintsTest extends AbstractParameterInfoTestCase {
private void escape() {
myFixture.performEditorAction(IdeActions.ACTION_EDITOR_ESCAPE);
}
private void complete(String partOfItemText) {
LookupElement[] elements = myFixture.completeBasic();
LookupElement element = Stream.of(elements).filter(e -> {
LookupElementPresentation p = new LookupElementPresentation();
e.renderElement(p);
return (p.getItemText() + p.getTailText()).contains(partOfItemText);
}).findAny().get();
selectItem(element);
}
}