public List<HighlightInfo> getHighlights() { clearLineMarkers(myEditor); final int count = myPairsToHighlight.size(); final List<HighlightInfo> highlightInfos = new ArrayList<HighlightInfo>(count * 2); final MarkupModel markupModel = myEditor.getMarkupModel(); final Color[] baseColors = XmlTagTreeHighlightingUtil.getBaseColors(); final Color[] colorsForEditor = count > 1 ? toColorsForEditor(baseColors) : new Color[] { myEditor .getColorsScheme() .getAttributes(CodeInsightColors.MATCHED_BRACE_ATTRIBUTES) .getBackgroundColor() }; final Color[] colorsForLineMarkers = toColorsForLineMarkers(baseColors); final List<RangeHighlighter> newHighlighters = new ArrayList<RangeHighlighter>(); assert colorsForEditor.length > 0; for (int i = 0; i < count && i < baseColors.length; i++) { Pair<TextRange, TextRange> pair = myPairsToHighlight.get(i); if (pair.first == null && pair.second == null) { continue; } Color color = colorsForEditor[i]; if (color == null) { continue; } if (pair.first != null && !pair.first.isEmpty()) { highlightInfos.add(createHighlightInfo(color, pair.first)); } if (pair.second != null && !pair.second.isEmpty()) { highlightInfos.add(createHighlightInfo(color, pair.second)); } final int start = pair.first != null ? pair.first.getStartOffset() : pair.second.getStartOffset(); final int end = pair.second != null ? pair.second.getEndOffset() : pair.first.getEndOffset(); final Color lineMarkerColor = colorsForLineMarkers[i]; if (count > 1 && lineMarkerColor != null && start != end) { final RangeHighlighter highlighter = createHighlighter(markupModel, new TextRange(start, end), lineMarkerColor); newHighlighters.add(highlighter); } } myEditor.putUserData(TAG_TREE_HIGHLIGHTERS_IN_EDITOR_KEY, newHighlighters); return highlightInfos; }