From 1d7e1e31407a49f365b811145b566754250e416a Mon Sep 17 00:00:00 2001 From: Freddy Mallet Date: Sun, 17 Apr 2011 00:27:30 +0200 Subject: [PATCH] fix SONAR-2295 : Line number representation in source code view are wrong for files that use mixed line endings --- .../main/java/org/sonar/channel/CodeBuffer.java | 1 + .../java/org/sonar/colorizer/HtmlDecorator.java | 17 +++++++---------- .../org/sonar/colorizer/HtmlDecoratorTest.java | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/sonar-channel/src/main/java/org/sonar/channel/CodeBuffer.java b/sonar-channel/src/main/java/org/sonar/channel/CodeBuffer.java index 5515e7eb284..dbb28eb7b0b 100644 --- a/sonar-channel/src/main/java/org/sonar/channel/CodeBuffer.java +++ b/sonar-channel/src/main/java/org/sonar/channel/CodeBuffer.java @@ -94,6 +94,7 @@ public class CodeBuffer implements CharSequence { } private void updateCursorPosition(int character) { + //see Java Language Specification : http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.4 if (character == LF || character == CR) { if ((lastChar != LF && lastChar != CR) || lastChar == character || lastChar == LF) { cursor.line++; diff --git a/sonar-colorizer/src/main/java/org/sonar/colorizer/HtmlDecorator.java b/sonar-colorizer/src/main/java/org/sonar/colorizer/HtmlDecorator.java index 0d0b4386118..5e4e2e512d8 100644 --- a/sonar-colorizer/src/main/java/org/sonar/colorizer/HtmlDecorator.java +++ b/sonar-colorizer/src/main/java/org/sonar/colorizer/HtmlDecorator.java @@ -30,7 +30,7 @@ public class HtmlDecorator extends Tokenizer { private static final String CSS_PATH = "/sonar-colorizer.css"; private HtmlOptions options; - private int lineId = 1; + private int lineId; private static final int LF = (int) '\n'; private static final int CR = (int) '\r'; @@ -76,18 +76,15 @@ public class HtmlDecorator extends Tokenizer { @Override public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { - int currentChar = code.peek(); - - if (currentChar == LF) { - codeBuilder.appendWithoutTransforming(getTagAfter()); - codeBuilder.appendWithoutTransforming(getTagBefore()); - } - - if (currentChar == LF || currentChar == CR) { + int lineNumber = code.getLinePosition(); + if (code.peek() == LF || code.peek() == CR) { code.pop(); + if (lineNumber != code.getLinePosition()) { + codeBuilder.appendWithoutTransforming(getTagAfter()); + codeBuilder.appendWithoutTransforming(getTagBefore()); + } return true; } - return false; } diff --git a/sonar-colorizer/src/test/java/org/sonar/colorizer/HtmlDecoratorTest.java b/sonar-colorizer/src/test/java/org/sonar/colorizer/HtmlDecoratorTest.java index a49dafe025b..916640de168 100644 --- a/sonar-colorizer/src/test/java/org/sonar/colorizer/HtmlDecoratorTest.java +++ b/sonar-colorizer/src/test/java/org/sonar/colorizer/HtmlDecoratorTest.java @@ -80,7 +80,7 @@ public class HtmlDecoratorTest { public void shouldAddTagsBetweenEachLine() { HtmlOptions options = new HtmlOptions().setGenerateTable(true).setGenerateHtmlHeader(false); HtmlDecorator decorator = new HtmlDecorator(options); - CodeReader code = new CodeReader("\n\r\n"); + CodeReader code = new CodeReader("\r\n\r"); HtmlCodeBuilder output = new HtmlCodeBuilder(); output.appendWithoutTransforming(decorator.getTagBeginOfFile()); -- 2.39.5