diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-19 22:27:03 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-08-19 21:25:05 +0000 |
commit | 4ca751c002784c4bfd349cc5240b045b62277c80 (patch) | |
tree | dfc17b31990e2429535609b85f6d080c4fa0d9fe /platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java | |
parent | 890d9a2952301682ffecaed4495f5f65c84c3642 (diff) | |
parent | 060e58b3afea3ea39f5ba1cb5a443ca3ebda28c8 (diff) | |
download | idea-4ca751c002784c4bfd349cc5240b045b62277c80.tar.gz |
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge"
Diffstat (limited to 'platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java')
-rw-r--r-- | platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java b/platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java index 9cd9ab29f4cd..db138237af81 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java @@ -71,31 +71,17 @@ public class FragmentedEditorHighlighter implements EditorHighlighter { if (range.getEndOffset() >= iterator.getStart()) { int relativeStart = Math.max(iterator.getStart() - range.getStartOffset(), 0); int relativeEnd = Math.min(iterator.getEnd() - range.getStartOffset(), range.getLength() + 1); - boolean merged = false; - if (myMergeByTextAttributes && !myPieces.isEmpty()) { - Element element = myPieces.get(myPieces.size() - 1); - if (element.getEnd() >= offset + relativeStart && - Comparing.equal(element.getAttributes(), iterator.getTextAttributes()) && - Comparing.equal(element.getElementType(), iterator.getTokenType())) { - merged = true; - myPieces.add(new Element(element.getStart(), - offset + relativeEnd, - iterator.getTokenType(), - iterator.getTextAttributes())); - } - } - if (!merged) { - myPieces.add(new Element(offset + relativeStart, - offset + relativeEnd, - iterator.getTokenType(), - iterator.getTextAttributes())); - } + + addElement(new Element(offset + relativeStart, + offset + relativeEnd, + iterator.getTokenType(), + iterator.getTextAttributes())); } if (range.getEndOffset() < iterator.getEnd()) { offset += range.getLength() + 1 + myAdditionalOffset; // myAdditionalOffset because of extra line - for shoene separators int lastEnd = myPieces.isEmpty() ? -1 : myPieces.get(myPieces.size() - 1).getEnd(); - myPieces.add(new Element(Math.max(offset - 1 - myAdditionalOffset, lastEnd), offset, null, TextAttributes.ERASE_MARKER)); + addElement(new Element(Math.max(offset - 1 - myAdditionalOffset, lastEnd), offset, null, TextAttributes.ERASE_MARKER)); index++; continue; } @@ -104,6 +90,26 @@ public class FragmentedEditorHighlighter implements EditorHighlighter { } } + private void addElement(@NotNull Element element) { + boolean merged = false; + if (myMergeByTextAttributes && !myPieces.isEmpty()) { + Element oldElement = myPieces.get(myPieces.size() - 1); + if (oldElement.getEnd() >= element.getStart() && + Comparing.equal(oldElement.getAttributes(), element.getAttributes()) && + Comparing.equal(oldElement.getElementType(), element.getElementType())) { + merged = true; + myPieces.remove(myPieces.size() - 1); + myPieces.add(new Element(oldElement.getStart(), + element.getEnd(), + element.getElementType(), + element.getAttributes())); + } + } + if (!merged) { + myPieces.add(element); + } + } + @NotNull @Override public HighlighterIterator createIterator(int startOffset) { |