Как да задам номера на реда на IMarker за ICompilationUnit?

Искам да създам маркер със съобщение и цветен кодов ред (както прави 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);

За съжаление номерът на реда се игнорира и маркерът се поставя на първия ред.

Маркерът е на първия ред, а не както се очаква на ред 5

Какво се обърка? Как мога да разреша това?


person Chriss    schedule 17.11.2014    source източник


Отговори (1)


CHAR_START и CHAR_END са отмествания от началото на документа и се използват с предимство пред LINE_NUMBER. Кодът за показване на позицията използва само номера на реда, ако нито един от атрибутите за начало и край на char не е посочен.

Можете да използвате IDocument.getLineOffset(line), за да получите отместване на линията, ако имате IDocument.

Ако използвате текстов редактор, можете да получите IDocument от него, в противен случай можете да конструирате екземпляр на Document класа.

Забележка: Номерата на редовете в IDocument са базирани на 0, номерата на редовете в IMarker са базирани на 1.

person greg-449    schedule 17.11.2014
comment
Трябва ли да изчислявам отместването чрез преброяване на прекъсванията на редовете или има метод, който мога да използвам? - person Chriss; 17.11.2014
comment
Ако имате IDocument, можете да извикате getLineOffset(line) (Забележка: редовете в IDocument започват с 0, редовете в маркерите започват с 1). - person greg-449; 17.11.2014
comment
new Document(compilationUnit.getSource()).getLineOffset(lineNumber-1) върши работа. Можете ли да добавите това към отговора си, може да е полезно за други. Добра работа, благодаря! - person Chriss; 17.11.2014