From 68513be5ce8b386dbc9252d65d4b9a3f47a693da Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 10 Nov 2016 15:17:04 +0300 Subject: [PATCH] optimize caret cloning - do a cheap check first this makes EditorMultiCaretColumnModeTest.testPageMovementsInteroperateWithLineMovements work much faster, as position markers in CaretImpl are not created needlessly, and System.gc() in RangeMarkerTree.errMsg is not invoked --- .../com/intellij/openapi/editor/impl/CaretImpl.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java index fb201c504137..4cb50d3f0949 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java @@ -840,6 +840,11 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable { public Caret clone(boolean above) { assertIsDispatchThread(); int lineShift = above ? -1 : 1; + LogicalPosition oldPosition = getLogicalPosition(); + int newLine = oldPosition.line + lineShift; + if (newLine < 0 || newLine >= myEditor.getDocument().getLineCount()) { + return null; + } final CaretImpl clone = cloneWithoutSelection(); final int newSelectionStartOffset; final int newSelectionEndOffset; @@ -875,12 +880,6 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable { newSelectionStartColumn = -1; newSelectionEndColumn = -1; } - LogicalPosition oldPosition = getLogicalPosition(); - int newLine = oldPosition.line + lineShift; - if (newLine < 0 || newLine >= myEditor.getDocument().getLineCount()) { - Disposer.dispose(clone); - return null; - } clone.moveToLogicalPosition(new LogicalPosition(newLine, myLastColumnNumber), false, null, false); clone.myLastColumnNumber = myLastColumnNumber; clone.myDesiredX = myDesiredX >= 0 ? myDesiredX : getCurrentX();