fix caret position on varargs parameter completion (IDEA-174984)

This commit is contained in:
Dmitry Batrak
2017-07-17 12:48:12 +03:00
parent e5eb11fbd9
commit ea50f77b11
2 changed files with 34 additions and 2 deletions
@@ -397,6 +397,35 @@ public class CompletionHintsTest extends LightFixtureCompletionTestCase {
checkResultWithInlays("class C { int vararg(int... args){ return 0; } void m() { vararg(<hint text=\"args:\"/>1) } }");
}
public void testVarargWithTwoMandatoryArguments() throws Exception {
configureJava("class C { int vararg(int a, int b, int... args){ return 0; } void m() { varar<caret> } }");
complete();
checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<caret>, ) } }");
checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<hint text=\"a:\"/>, <hint text=\"b:\"/><hint text=\", args:\"/>) } }");
assertCaretAfterInlay();
type("1");
next();
checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, <caret>) } }");
checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<hint text=\"a:\"/>1, <hint text=\"b:\"/><hint text=\", args:\"/>) } }");
assertCaretAfterInlay();
type("2");
next();
checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2, <caret>) } }");
checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<hint text=\"a:\"/>1, <hint text=\"b:\"/>2, <hint text=\"args:\"/>) } }");
assertCaretAfterInlay();
next();
checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2)<caret> } }");
checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<hint text=\"a:\"/>1, <hint text=\"b:\"/>2<hint text=\", args:\"/>) } }");
prev();
checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2, <caret>) } }");
checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<hint text=\"a:\"/>1, <hint text=\"b:\"/>2, <hint text=\"args:\"/>) } }");
assertCaretAfterInlay();
prev();
checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2<caret>) } }");
checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(<hint text=\"a:\"/>1, <hint text=\"b:\"/>2<hint text=\", args:\"/>) } }");
assertCaretBeforeInlay();
}
public void testHintsDontDisappearWhenNavigatingAwayFromUncompletedInvocation() throws Exception {
configureJava("class C { void m() { System.setPro<caret> } }");
complete("setProperty");
@@ -374,8 +374,11 @@ public class ParameterInfoController implements Disposable {
if (argsList == null && !areParametersHintsEnabledOnCompletion()) return;
offset = adjustOffsetToInlay(offset);
myEditor.getCaretModel().moveToLogicalPosition(myEditor.offsetToLogicalPosition(offset).leanForward(true));
VisualPosition visualPosition = myEditor.offsetToVisualPosition(offset);
if (myEditor.getInlayModel().hasInlineElementAt(visualPosition)) {
visualPosition = new VisualPosition(visualPosition.line, visualPosition.column + 1);
}
myEditor.getCaretModel().moveToVisualPosition(visualPosition);
myEditor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
myEditor.getSelectionModel().removeSelection();
if (argsList != null) {