From 9ac9b91f2b88af6da3c367e85edc6cf1c309d38a Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 5 Mar 2014 16:55:04 +0400 Subject: [PATCH] add getCaretCount method to caret model API (IDEA-80056) --- .../src/com/intellij/openapi/editor/CaretModel.java | 5 +++++ .../intellij/codeInsight/editorActions/PasteHandler.java | 2 +- .../intellij/codeInsight/editorActions/TypedHandler.java | 4 ++-- .../intellij/codeInsight/template/impl/TemplateState.java | 2 +- .../src/com/intellij/injected/editor/CaretModelWindow.java | 5 +++++ .../editor/actions/UnselectPreviousOccurrenceAction.java | 2 +- .../intellij/openapi/editor/EditorModificationUtil.java | 2 +- .../com/intellij/openapi/editor/actions/EscapeAction.java | 2 +- .../com/intellij/openapi/editor/impl/CaretModelImpl.java | 7 +++++++ .../openapi/editor/textarea/TextComponentCaretModel.java | 5 +++++ 10 files changed, 29 insertions(+), 7 deletions(-) diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/CaretModel.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/CaretModel.java index dd3aa88ae5b7..1d26b77128b3 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/CaretModel.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/CaretModel.java @@ -180,6 +180,11 @@ public interface CaretModel { @NotNull Caret getPrimaryCaret(); + /** + * Returns number of carets currently existing in the document + */ + int getCaretCount(); + /** * Returns all carets currently existing in the document, ordered by their position in the document. */ diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java index 9c15f4ffde8a..0296e8e139dc 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java @@ -90,7 +90,7 @@ public class PasteHandler extends EditorActionHandler implements EditorTextInser final Project project = editor.getProject(); if (project == null || editor.isColumnMode() || editor.getSelectionModel().hasBlockSelection() - || editor.getCaretModel().getAllCarets().size() > 1) { + || editor.getCaretModel().getCaretCount() > 1) { if (myOriginalHandler != null) { myOriginalHandler.execute(editor, context); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java index 767256f2fb99..259fe9766fb1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java @@ -191,7 +191,7 @@ public class TypedHandler extends TypedActionHandlerBase { } } - if (!editor.getSelectionModel().hasBlockSelection() && editor.getCaretModel().getAllCarets().size() == 1) { + if (!editor.getSelectionModel().hasBlockSelection() && editor.getCaretModel().getCaretCount() == 1) { if (')' == charTyped || ']' == charTyped || '}' == charTyped) { if (FileTypes.PLAIN_TEXT != fileType) { if (handleRParen(editor, fileType, charTyped)) return; @@ -210,7 +210,7 @@ public class TypedHandler extends TypedActionHandlerBase { if (('(' == charTyped || '[' == charTyped || '{' == charTyped) && CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET && - !editor.getSelectionModel().hasBlockSelection() && editor.getCaretModel().getAllCarets().size() == 1 && fileType != FileTypes.PLAIN_TEXT) { + !editor.getSelectionModel().hasBlockSelection() && editor.getCaretModel().getCaretCount() == 1 && fileType != FileTypes.PLAIN_TEXT) { handleAfterLParen(editor, fileType, charTyped); } else if ('}' == charTyped) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java index f7eac646dc67..d3f658cdcf24 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java @@ -167,7 +167,7 @@ public class TemplateState implements Disposable { } private boolean isMultiCaretMode() { - return myEditor != null && myEditor.getCaretModel().supportsMultipleCarets() && myEditor.getCaretModel().getAllCarets().size() > 1; + return myEditor != null && myEditor.getCaretModel().getCaretCount() > 1; } @Override 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 5e8c23ce433d..33b417de0af7 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java @@ -165,6 +165,11 @@ public class CaretModelWindow implements CaretModel { return createInjectedCaret(myDelegate.getPrimaryCaret()); } + @Override + public int getCaretCount() { + return myDelegate.getCaretCount(); + } + @NotNull @Override public List getAllCarets() { diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java b/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java index 87a969e0da88..489aa4e9fb86 100644 --- a/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java +++ b/platform/lang-impl/src/com/intellij/openapi/editor/actions/UnselectPreviousOccurrenceAction.java @@ -35,7 +35,7 @@ public class UnselectPreviousOccurrenceAction extends EditorAction { @Override public void execute(Editor editor, @Nullable Caret caret, DataContext dataContext) { - if (editor.getCaretModel().getAllCarets().size() > 1) { + if (editor.getCaretModel().getCaretCount() > 1) { editor.getCaretModel().removeCaret(editor.getCaretModel().getPrimaryCaret()); } else { diff --git a/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java b/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java index 008ed7d5f02e..8058f6c754a9 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java @@ -165,7 +165,7 @@ public class EditorModificationUtil { if (text == null) return null; if (editor.getCaretModel().supportsMultipleCarets()) { - int caretCount = editor.getCaretModel().getAllCarets().size(); + int caretCount = editor.getCaretModel().getCaretCount(); final Iterator segments = new ClipboardTextPerCaretSplitter().split(text, caretCount).iterator(); editor.getCaretModel().runForEachCaret(new CaretAction() { @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/EscapeAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/EscapeAction.java index 16b66768d791..bc3b85bfce95 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/EscapeAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/EscapeAction.java @@ -50,7 +50,7 @@ public class EscapeAction extends EditorAction { public boolean isEnabled(Editor editor, DataContext dataContext) { SelectionModel selectionModel = editor.getSelectionModel(); CaretModel caretModel = editor.getCaretModel(); - return selectionModel.hasSelection() || selectionModel.hasBlockSelection() || caretModel.getAllCarets().size() > 1; + return selectionModel.hasSelection() || selectionModel.hasBlockSelection() || caretModel.getCaretCount() > 1; } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java index cc7f1339f767..ad9e08d4f7f5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java @@ -240,6 +240,13 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener, } } + @Override + public int getCaretCount() { + synchronized (myCarets) { + return myCarets.size(); + } + } + @Override @NotNull public List getAllCarets() { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaretModel.java b/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaretModel.java index 5d99e598423a..ef86c6f3ae3d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaretModel.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaretModel.java @@ -150,6 +150,11 @@ public class TextComponentCaretModel implements CaretModel { return myCaret; } + @Override + public int getCaretCount() { + return 1; + } + @NotNull @Override public List getAllCarets() {