我想在给定的行号上创建一条带有消息和彩色代码行(如EclEmma一样)的标记。我有一个ICompilationUnit及其资源来创建标记,如下所示:

IMarker marker = resource.createMarker("org.epitest.mutationmarker");
marker.setAttribute(IMarker.MESSAGE, "statusDescription");
marker.setAttribute(IMarker.LINE_NUMBER, 5);
marker.setAttribute(IMarker.CHAR_START, 10);
marker.setAttribute(IMarker.CHAR_END, 20);


不幸的是,该行号被忽略,并且标记位于第一行。



什么地方出了错?我该如何解决?

最佳答案

CHAR_STARTCHAR_END是距文档开头的偏移量,它们优先于LINE_NUMBER使用。如果未指定char start和end属性,则位置显示代码仅使用行号。

如果有IDocument.getLineOffset(line),则可以使用IDocument获取行偏移。

如果使用的是文本编辑器,则可以从中获取IDocument,否则可以构造Document类的实例。

注意:IDocument中的行号基于0,IMarker中的行号基于1。

10-06 13:35