diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java index 8473678c4dbf..d5e108e416b0 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java @@ -397,6 +397,35 @@ public class CompletionHintsTest extends LightFixtureCompletionTestCase { checkResultWithInlays("class C { int vararg(int... args){ return 0; } void m() { vararg(1) } }"); } + public void testVarargWithTwoMandatoryArguments() throws Exception { + configureJava("class C { int vararg(int a, int b, int... args){ return 0; } void m() { varar } }"); + complete(); + checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(, ) } }"); + checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(, ) } }"); + assertCaretAfterInlay(); + type("1"); + next(); + checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, ) } }"); + checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, ) } }"); + assertCaretAfterInlay(); + type("2"); + next(); + checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2, ) } }"); + checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2, ) } }"); + assertCaretAfterInlay(); + next(); + checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2) } }"); + checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2) } }"); + prev(); + checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2, ) } }"); + checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2, ) } }"); + assertCaretAfterInlay(); + prev(); + checkResult("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2) } }"); + checkResultWithInlays("class C { int vararg(int a, int b, int... args){ return 0; } void m() { vararg(1, 2) } }"); + assertCaretBeforeInlay(); + } + public void testHintsDontDisappearWhenNavigatingAwayFromUncompletedInvocation() throws Exception { configureJava("class C { void m() { System.setPro } }"); complete("setProperty"); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java index 1d7cc4ff785f..4d8b8d03018c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java @@ -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) {