IDEA-131953 Multiple carets misbehave when auto completion dropdown opens

This commit is contained in:
Dmitry Batrak
2014-10-29 12:20:22 +04:00
parent f0408587f5
commit a169953a59
2 changed files with 56 additions and 3 deletions
@@ -650,6 +650,47 @@ public interface Test {
assert !lookup
}
public void testMulticaretLeftRightMovements() {
myFixture.configureByText("a.java", """
class Foo {
void foo(String iterable) {
<caret>ter x
<caret>ter x
}
}
""")
type('i')
assert lookup
edt { myFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_CARET_RIGHT) }
myFixture.checkResult """
class Foo {
void foo(String iterable) {
it<caret>er x
it<caret>er x
}
}
"""
joinAutopopup()
joinCompletion()
assert lookup
assert !lookup.calculating
edt { myFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_CARET_LEFT) }
myFixture.checkResult """
class Foo {
void foo(String iterable) {
i<caret>ter x
i<caret>ter x
}
}
"""
joinAutopopup()
joinCompletion()
assert lookup
assert !lookup.calculating
}
public void testTypingInAnotherEditor() {
myFixture.configureByText("a.java", "")
type 'c'
@@ -26,6 +26,7 @@ import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.CaretAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
import com.intellij.openapi.project.DumbAwareAction;
@@ -211,7 +212,7 @@ public abstract class LookupActionHandler extends EditorActionHandler {
}
@Override
protected void executeInLookup(LookupImpl lookup, DataContext context, Caret caret) {
protected void executeInLookup(LookupImpl lookup, DataContext context, final Caret caret) {
final Editor editor = lookup.getEditor();
final int offset = editor.getCaretModel().getOffset();
CharSequence seq = editor.getDocument().getCharsSequence();
@@ -231,8 +232,19 @@ public abstract class LookupActionHandler extends EditorActionHandler {
if (!lookup.performGuardedChange(new Runnable() {
@Override
public void run() {
editor.getSelectionModel().removeSelection();
editor.getCaretModel().moveToOffset(offset + 1);
CaretAction action = new CaretAction() {
@Override
public void perform(Caret caret) {
caret.removeSelection();
caret.moveToOffset(caret.getOffset() + 1);
}
};
if (caret == null) {
editor.getCaretModel().runForEachCaret(action);
}
else {
action.perform(caret);
}
}
})) {
return;