在IDEA插件开发中,对代码添加波浪线的方式有两种,分别用于不同的场景:
- 使用
Annotator
接口的方式实现,这种实现适用于规则明确的情况下使用,比如说需要对以’@’符号开头的单词添加波浪线。后续涉及到的时候再详细说; - 使用
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