From 751ec20cc5bf6fa0f0ee5269257f812a2de3b2bb Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 20 Feb 2014 20:04:21 +0100 Subject: [PATCH] save one volatile read on each charAt in editor --- .../openapi/editor/impl/EditorImpl.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 81a571666566..a6701c5f7458 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -536,7 +536,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } }); } - updateHasTabsFlag(document.getCharsSequence()); + updateHasTabsFlag(document.getImmutableCharSequence()); } public static boolean isPresentationMode(Project project) { @@ -1036,7 +1036,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi }; Disposer.register(myDisposable, myHighlighterDisposable); highlighter.setEditor(this); - highlighter.setText(document.getCharsSequence()); + highlighter.setText(document.getImmutableCharSequence()); EditorHighlighterCache.rememberEditorHighlighterForCachesOptimization(document, highlighter); if (myPanel != null) { @@ -1140,7 +1140,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi // We mark that we're under such circumstances then. boolean activeSoftWrapProcessed = logicalPosition.softWrapLinesOnCurrentLogicalLine <= 0; - CharSequence text = myDocument.getCharsSequence(); + CharSequence text = myDocument.getImmutableCharSequence(); LogicalPosition endLogicalPosition = visualToLogicalPosition(new VisualPosition(line + 1, 0)); int endOffset = logicalPositionToOffset(endLogicalPosition); @@ -1324,7 +1324,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return mySoftWrapModel.offsetToLogicalPosition(offset); } int line = offsetToLogicalLine(offset, false); - int column = calcColumnNumber(offset, line, false, myDocument.getCharsSequence()); + int column = calcColumnNumber(offset, line, false, myDocument.getImmutableCharSequence()); return new LogicalPosition(line, column); } @@ -1526,7 +1526,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } int offset = startOffset; - CharSequence text = myDocument.getCharsSequence(); + CharSequence text = myDocument.getImmutableCharSequence(); int textLength = myDocument.getTextLength(); // We need to calculate max offset to provide to the IterationState here based on the given start offset and target @@ -2287,7 +2287,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi // background is already drawn. boolean[] caretRowPainted = new boolean[1]; - CharSequence text = myDocument.getCharsSequence(); + CharSequence text = myDocument.getImmutableCharSequence(); while (!iterationState.atEnd() && !lIterator.atEnd()) { int hEnd = iterationState.getEndOffset(); @@ -2748,7 +2748,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi int fontType = attributes.getFontType(); g.setColor(currentColor); - CharSequence chars = myDocument.getCharsSequence(); + CharSequence chars = myDocument.getImmutableCharSequence(); while (!iterationState.atEnd() && !lIterator.atEnd()) { int hEnd = iterationState.getEndOffset(); @@ -3623,7 +3623,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (pos.column == 0) return start; int end = myDocument.getLineEndOffset(pos.line); - CharSequence text = myDocument.getCharsSequence(); + CharSequence text = myDocument.getImmutableCharSequence(); return EditorUtil.calcOffset(this, text, start, end, pos.column, EditorUtil.getTabSize(this), debugBuffer); } @@ -3873,7 +3873,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi LOG.assertTrue(lineIndex >= 0 && lineIndex < myDocument.getLineCount()); if (softWrapAware && getSoftWrapModel().isSoftWrappingEnabled()) { - int column = calcColumnNumber(offset, lineIndex, false, myDocument.getCharsSequence()); + int column = calcColumnNumber(offset, lineIndex, false, myDocument.getImmutableCharSequence()); return mySoftWrapModel.adjustLogicalPosition(new LogicalPosition(lineIndex, column), offset).line; } else { @@ -3883,7 +3883,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @Override public int calcColumnNumber(int offset, int lineIndex) { - return calcColumnNumber(offset, lineIndex, true, myDocument.getCharsSequence()); + return calcColumnNumber(offset, lineIndex, true, myDocument.getImmutableCharSequence()); } public int calcColumnNumber(int offset, int lineIndex, boolean softWrapAware, CharSequence documentCharSequence) { @@ -3954,7 +3954,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (!mySettings.isCaretInsideTabs()) { int offset = logicalPositionToOffset(new LogicalPosition(line, column)); - CharSequence text = myDocument.getCharsSequence(); + CharSequence text = myDocument.getImmutableCharSequence(); if (offset >= 0 && offset < myDocument.getTextLength()) { if (text.charAt(offset) == '\t') { column = calcColumnNumber(offset, line); @@ -4573,7 +4573,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi g.fillRect(x, y, width, lineHeight - 1); final LogicalPosition startPosition = caret == null ? getCaretModel().getLogicalPosition() : caret.getLogicalPosition(); final int offset = logicalPositionToOffset(startPosition); - CharSequence chars = myDocument.getCharsSequence(); + CharSequence chars = myDocument.getImmutableCharSequence(); if (chars.length() > offset && myDocument.getTextLength() > offset) { FoldRegion folding = myFoldingModel.getCollapsedRegionAtOffset(offset); final char ch; @@ -5283,7 +5283,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi private String getText(int startIdx, int endIdx) { if (startIdx >= 0 && endIdx > startIdx) { - CharSequence chars = getDocument().getCharsSequence(); + CharSequence chars = getDocument().getImmutableCharSequence(); return chars.subSequence(startIdx, endIdx).toString(); } @@ -6419,7 +6419,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return; } - final CharSequence text = myDocument.getCharsSequence(); + final CharSequence text = myDocument.getImmutableCharSequence(); int documentLength = myDocument.getTextLength(); int x = 0; boolean lastLineLengthCalculated = false;