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 71131eb0d627..ba51985b17c2 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 @@ -22,6 +22,8 @@ import com.intellij.psi.PsiExpressionCodeFragment; import com.intellij.testFramework.EditorTestUtil; import com.intellij.testFramework.fixtures.EditorMouseFixture; +import java.util.concurrent.TimeoutException; + public class CompletionHintsTest extends AbstractParameterInfoTestCase { private boolean myStoredSettingValue; @@ -1637,6 +1639,32 @@ public class CompletionHintsTest extends AbstractParameterInfoTestCase { "int c, int d, int e"); } + public void testUndoRedoAfterOverloadSwitch() { + configureJava("class C { void some(int a) {} void some(int a, int b) {} void m() { s } }"); + complete("some(int a)"); + type('1'); + showParameterInfo(); + methodOverloadDown(); + checkResultWithInlays("class C { void some(int a) {} void some(int a, int b) {} void m() { some(1, ); } }"); + EditorTestUtil.testUndoInEditor(getEditor(), () -> { + myFixture.performEditorAction(IdeActions.ACTION_UNDO); + try { + waitForAllAsyncStuff(); + } + catch (TimeoutException e) { + fail(); + } + myFixture.performEditorAction(IdeActions.ACTION_REDO); + try { + waitForAllAsyncStuff(); + } + catch (TimeoutException e) { + fail(); + } + }); + checkResultWithInlays("class C { void some(int a) {} void some(int a, int b) {} void m() { some(1, ); } }"); + } + private void checkResultWithInlays(String text) { myFixture.checkResultWithInlays(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 911134a33b0d..f9500e1cc6cd 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoController.java @@ -13,6 +13,7 @@ import com.intellij.lang.parameterInfo.*; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.command.undo.UndoManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.event.*; @@ -145,8 +146,11 @@ public class ParameterInfoController extends UserDataHolderBase implements Visib myEditorCaretListener = new CaretListener(){ @Override public void caretPositionChanged(@NotNull CaretEvent e) { - syncUpdateOnCaretMove(); - rescheduleUpdate(); + UndoManager undoManager = UndoManager.getInstance(myProject); + if (!undoManager.isUndoInProgress() && !undoManager.isRedoInProgress()) { + syncUpdateOnCaretMove(); + rescheduleUpdate(); + } } }; myEditor.getCaretModel().addCaretListener(myEditorCaretListener);