summaryrefslogtreecommitdiff
path: root/platform/platform-api/src/com/intellij/openapi/editor/highlighter/FragmentedEditorHighlighter.java
diff options
context:
space:
mode:
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.java46
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) {