mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-131953 Multiple carets misbehave when auto completion dropdown opens
This commit is contained in:
@@ -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'
|
||||
|
||||
+15
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user