diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java b/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java index cee529aecccf..33b417de0af7 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java @@ -17,16 +17,18 @@ package com.intellij.injected.editor; import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.event.CaretAdapter; import com.intellij.openapi.editor.event.CaretEvent; import com.intellij.openapi.editor.event.CaretListener; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.openapi.util.Segment; -import com.intellij.openapi.util.TextRange; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.WeakHashMap; /** * @author Alexey @@ -102,7 +104,7 @@ public class CaretModelWindow implements CaretModel { private final ListenerWrapperMap<CaretListener> myCaretListeners = new ListenerWrapperMap<CaretListener>(); @Override public void addCaretListener(@NotNull final CaretListener listener) { - CaretListener wrapper = new CaretListener() { + CaretListener wrapper = new CaretAdapter() { @Override public void caretPositionChanged(CaretEvent e) { if (!myEditorWindow.getDocument().isValid()) return; // injected document can be destroyed by now @@ -163,6 +165,11 @@ public class CaretModelWindow implements CaretModel { return createInjectedCaret(myDelegate.getPrimaryCaret()); } + @Override + public int getCaretCount() { + return myDelegate.getCaretCount(); + } + @NotNull @Override public List<Caret> getAllCarets() { @@ -204,17 +211,14 @@ public class CaretModelWindow implements CaretModel { } @Override - public void setCaretsAndSelections(@NotNull List<LogicalPosition> caretPositions, @NotNull List<? extends Segment> selections) { - List<LogicalPosition> convertedPositions = new ArrayList<LogicalPosition>(caretPositions); - for (LogicalPosition position : caretPositions) { - convertedPositions.add(myEditorWindow.injectedToHost(position)); - } - List<Segment> convertedSelections = new ArrayList<Segment>(selections.size()); - for (Segment selection : selections) { - convertedSelections.add(new TextRange(myEditorWindow.getDocument().injectedToHost(selection.getStartOffset()), - myEditorWindow.getDocument().injectedToHost(selection.getEndOffset()))); + public void setCaretsAndSelections(@NotNull List<CaretState> caretStates) { + List<CaretState> convertedStates = new ArrayList<CaretState>(caretStates.size()); + for (CaretState state : caretStates) { + convertedStates.add(new CaretState(state.getCaretPosition() == null ? null : myEditorWindow.injectedToHost(state.getCaretPosition()), + state.getSelectionStart() == null ? null : myEditorWindow.injectedToHost(state.getSelectionStart()), + state.getSelectionEnd() == null ? null : myEditorWindow.injectedToHost(state.getSelectionEnd()))); } - myDelegate.setCaretsAndSelections(convertedPositions, convertedSelections); + myDelegate.setCaretsAndSelections(convertedStates); } private InjectedCaret createInjectedCaret(Caret caret) { |