diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java index a5f6a3a0ef07..62135ecb3d38 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java @@ -236,7 +236,10 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc return; } - int index = ParameterInfoUtils.getCurrentParameterIndex(o.getNode(), context.getOffset(), JavaTokenType.COMMA); + int offset = context.getOffset(); + TextRange elRange = o.getTextRange(); + int index = offset <= elRange.getStartOffset() || offset >= elRange.getEndOffset() + ? -1 : ParameterInfoUtils.getCurrentParameterIndex(o.getNode(), offset, JavaTokenType.COMMA); context.setCurrentParameter(index); Object[] candidates = context.getObjectsToView(); 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 4d85f0afa7bd..51637736e17f 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 @@ -610,6 +610,18 @@ public class CompletionHintsTest extends LightFixtureCompletionTestCase { checkHintContents(null); } + public void testPopupAfterCaretMovesOutsideOfParenthesis() throws Exception { + configureJava("class C { void m() { System.getPro } }"); + complete("getProperty(String key, String def)"); + waitForAllAsyncStuff(); + checkHintContents("@NotNull String"); + left(); + left(); + left(); + waitForAllAsyncStuff(); + checkHintContents(null); + } + private void checkResult(String text) { myFixture.checkResult(text); } 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 e2253945a0fe..ec0c9b18c352 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java @@ -309,6 +309,14 @@ public class ParameterInfoController implements Disposable { if (elementForUpdating != null) { myHandler.updateParameterInfo(elementForUpdating, context); + if (mySingleParameterInfo) { + if (myComponent.getCurrentParameterIndex() == -1 && myHint.isVisible()) { + myHint.hide(); + } + else if (myComponent.getCurrentParameterIndex() != -1 && !myHint.isVisible()) { + AutoPopupController.getInstance(myProject).autoPopupParameterInfo(myEditor, null); + } + } if (!myDisposed && myHint.isVisible() && !myEditor.isDisposed() && (myEditor.getComponent().getRootPane() != null || ApplicationManager.getApplication().isUnitTestMode())) { myComponent.update(mySingleParameterInfo);