public void eraseHighlight(List<RangeHighlighter> list) { for (RangeHighlighter l : list) { this.markupModelEx.removeHighlighter(l); } }
TextRange htr = expression.getHighlightedTextRange(); highlighter = (RangeHighlighterEx) editorEx.getMarkupModel() .addRangeHighlighter(htr.getStartOffset(), htr.getEndOffset(), HighlighterLayer.WARNING - 1, highlightedTextAttributes, HighlighterTargetArea.EXACT_RANGE); RangeHighlighterEx __highlighter = m.remove(expression); if (__highlighter != null) { editorEx.getMarkupModel().removeHighlighter(__highlighter);
private void highlightLine(int index, NamedTextAttr namedTextAttr) { UIUtil.invokeAndWaitIfNeeded((Runnable) () -> { try { MarkupModelEx markupModel = myEditor.getMarkupModel(); final Document doc = markupModel.getDocument(); final int lineStartOffset = doc.getLineStartOffset(index); final int lineEndOffset = doc.getLineEndOffset(index); // IDEA-53203: add ERASE_MARKER for manually defined attributes markupModel.addRangeHighlighter(lineStartOffset, lineEndOffset, HighlighterLayer.SELECTION - 1, TextAttributes.ERASE_MARKER, HighlighterTargetArea.EXACT_RANGE); RangeHighlighter rangeHighlight = markupModel.addRangeHighlighter(lineStartOffset, lineEndOffset, HighlighterLayer.SELECTION - 1, namedTextAttr, HighlighterTargetArea.EXACT_RANGE); rangeHighlight.setErrorStripeMarkColor(namedTextAttr.getErrorStripeColor()); rangeHighlight.setErrorStripeTooltip(namedTextAttr.getName()); } catch (Exception e) { throw new RuntimeException(e); } }); }
public synchronized void setIcon(PsiMethod psiMethod, MarkupModelEx markupModel) { try { RangeHighlighter highlighter = markupModel.addRangeHighlighter( psiMethod.getTextOffset(), psiMethod.getTextOffset() + 1, DebuggerColors.BREAKPOINT_HIGHLIGHTER_LAYER, null, HighlighterTargetArea.EXACT_RANGE); highlighter.setGutterIconRenderer( new ProfilerGutterIconRenderer( configuration.getIncludingConfigs( PluginConfigManager.newMethodConfig(psiMethod) ) ) ); rangeHighlighters.put(psiMethod, highlighter); } catch (ProcessCanceledException | IllegalArgumentException exception) { /* IllegalArgumentException may be thrown by markupModel if range is outdated */ LOG.warn("Range is outdated", exception); } }
@Override public void updateView(@NotNull List<NamedTextAttr> namedTextAttrList) { UIUtil.invokeLaterIfNeeded(() -> { if (myEditor.isDisposed()) { return; } myEditor.getMarkupModel().removeAllHighlighters(); myEditor.getSelectionModel().removeSelection(); if (namedTextAttrList.isEmpty()) { ApplicationManager.getApplication().runWriteAction(() -> { myEditor.getDocument().setText(""); }); return; } StringBuilder sb = new StringBuilder(); for (NamedTextAttr namedTextAttr : namedTextAttrList) { sb.append(namedTextAttr.getName()).append("\n"); } ApplicationManager.getApplication().runWriteAction(() -> { myEditor.getDocument().setText(sb.toString()); }); int size = namedTextAttrList.size(); for (int i = 0; i < size; i++) { highlightLine(i, namedTextAttrList.get(i)); } }); }
RangeHighlighter leftHighlighter = markupModelEx.addRangeHighlighter( leftBraceOffset, leftBraceOffset + leftBraceText.length(), textAttributes, HighlighterTargetArea.EXACT_RANGE); RangeHighlighter rightHighlighter = markupModelEx.addRangeHighlighter( rightBraceOffset, rightBraceOffset + rightBraceText.length(),
public synchronized void removeInvalidMethods(MarkupModelEx markupModel) { List<PsiMethod> invalidMethods = null; for (PsiMethod psiMethod : rangeHighlighters.keySet()) { if (!psiMethod.isValid()) { if (invalidMethods == null) { invalidMethods = new ArrayList<>(); } invalidMethods.add(psiMethod); } } if (invalidMethods != null) { for (PsiMethod invalidMethod : invalidMethods) { try { markupModel.removeHighlighter(rangeHighlighters.get(invalidMethod)); } catch (AssertionError ignored) { /* Method is thrown if range is outdated. * It means line marker was already removed. */ } rangeHighlighters.remove(invalidMethod); } } }
@Override public void fileClosed(@NotNull FileEditorManager fileEditorManager, @NotNull VirtualFile virtualFile) { FileEditor[] editors = fileEditorManager.getEditors(virtualFile); for (FileEditor editor : editors) { EditorEx editorEx = getEditorEx(editor); if (editorEx != null) { Map<Expression, RangeHighlighterEx> m = highlighters.remove(editorEx); if (m != null) { m.forEach((expression, highlighter) -> editorEx.getMarkupModel().removeHighlighter(highlighter) ); } } } }
/** * Before calling this method all PsiMethod instances in {@link #rangeHighlighters} * should be valid. To remove invalid instances call {@link #removeInvalidMethods(MarkupModelEx)} */ public synchronized void removeIconIfPresent(PsiMethod method, MarkupModelEx markupModel) { for (PsiMethod methodWithIcon : rangeHighlighters.keySet()) { /* PsiMethod does not have equals() and hashCode() method * so we check all methods in set by isEquivalentTo() */ try { if (methodWithIcon.isEquivalentTo(method)) { RangeHighlighter highlighter = rangeHighlighters.get(methodWithIcon); markupModel.removeHighlighter(highlighter); rangeHighlighters.remove(methodWithIcon); return; } } catch (AssertionError e) { /* it is thrown from com.intellij.psi.impl.source.tree.AstPath.ChildPath.getNode * when isEquivalentTo() method is called * I do not know why and how to fix it. It is okay to just ignore it */ LOG.warn(e); } } }