DOIFOR技术基于MarkupModel为指定代码片段添加波浪线
DOIFOR技术基于MarkupModel为指定代码片段添加波浪线
IDEA

image

在IDEA插件开发中,对代码添加波浪线的方式有两种,分别用于不同的场景:

  1. 使用Annotator​接口的方式实现,这种实现适用于规则明确的情况下使用,比如说需要对以’@’符号开头的单词添加波浪线。后续涉及到的时候再详细说;
  2. 使用MarkupModel​实现,这种方式更加灵活,可以在任意时刻对任意代码添加各种标记,波浪线也是其中的一种,下面详细说说这个方法。

先看看核心代码:

        Caret caret = e.getRequiredData(CommonDataKeys.CARET);
        MarkupModel markupModel = caret.getEditor().getMarkupModel();
        TextAttributes attributes = new TextAttributes();
        attributes.setEffectType(EffectType.WAVE_UNDERSCORE);
        attributes.setEffectColor(JBColor.RED);
        markupModel.addRangeHighlighter(caret.getSelectionRange().getStartOffset(),
                caret.getSelectionRange().getEndOffset(),
                HighlighterLayer.WARNING,
                attributes, HighlighterTargetArea.EXACT_RANGE);

  • 代码中Caret主要用于获取Editor和代码片段范围信息的实例,当然也可以通过其他途径获取这些信息
  • MarkupModel实例主要是通过editor.getMarkupModel获取
  • 然后构造波浪线的标记
  • 调用markupModel.addRangeHighlighter方法添加标记
  • 标记层级设置为HighlighterLayer.WARNING,以确保高于语法高亮

这种方式相当的灵活,可以使用action来激活,也可以在监听器(消息订阅、各种组件的listener等)中调用。

One Comment

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注