diff options
author | Jenkins CI <ci@sonarsource.com> | 2015-10-14 17:29:08 +0200 |
---|---|---|
committer | Jenkins CI <ci@sonarsource.com> | 2015-10-14 17:29:08 +0200 |
commit | 2050de252f953c38a4ca2c4baa43d3e715bb229f (patch) | |
tree | 8b69e9a8e4fdcac15ce5b723da33e84af0ac4db9 /sonar-plugin-api | |
parent | 997aac4e4051de8006db15bcd810174bf3aa5421 (diff) | |
parent | bf1ca9e5cdb705c969d93755f52c1da34e64c0dd (diff) | |
download | sonarqube-2050de252f953c38a4ca2c4baa43d3e715bb229f.tar.gz sonarqube-2050de252f953c38a4ca2c4baa43d3e715bb229f.zip |
Automatic merge from branch-5.2
* origin/branch-5.2:
SONAR-6880 Fix return_to
fix the components page of just provisioned project
Add missing commons-email dependency for plugins using API < 5.2
SONAR-6277 Fix incorrect offset conversion with old Mac line ends '\r'
Diffstat (limited to 'sonar-plugin-api')
3 files changed, 69 insertions, 22 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java index 8d449f4ab4c..aa275e19b28 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java @@ -20,18 +20,6 @@ package org.sonar.api.batch.fs.internal; import com.google.common.primitives.Ints; -import org.apache.commons.codec.binary.Hex; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.io.ByteOrderMark; -import org.apache.commons.io.input.BOMInputStream; -import org.sonar.api.batch.BatchSide; -import org.sonar.api.CoreProperties; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; - -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -48,6 +36,16 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.ArrayList; import java.util.List; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.io.ByteOrderMark; +import org.apache.commons.io.input.BOMInputStream; +import org.sonar.api.CoreProperties; +import org.sonar.api.batch.BatchSide; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; /** * Computes hash of files. Ends of Lines are ignored, so files with @@ -311,11 +309,19 @@ public class FileMetadata { c = (char) i; if (afterCR) { for (CharHandler handler : handlers) { - if (c != CARRIAGE_RETURN && c != LINE_FEED) { + if (c == CARRIAGE_RETURN) { + handler.newLine(); + handler.handleAll(c); + } else if (c == LINE_FEED) { + handler.handleAll(c); + handler.newLine(); + afterCR = false; + } else { + handler.newLine(); handler.handleIgnoreEoL(c); + handler.handleAll(c); + afterCR = false; } - handler.handleAll(c); - handler.newLine(); } afterCR = c == CARRIAGE_RETURN; } else if (c == LINE_FEED) { @@ -337,6 +343,9 @@ public class FileMetadata { i = reader.read(); } for (CharHandler handler : handlers) { + if (afterCR) { + handler.newLine(); + } handler.eof(); } } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java index 99f70ac964b..f5792ad178d 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java @@ -25,6 +25,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.sonar.api.batch.fs.InputFile; +import org.sonar.api.batch.fs.TextRange; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -179,6 +180,19 @@ public class DefaultInputFileTest { } @Test + public void checkValidRangeUsingGlobalOffset() { + DefaultInputFile file = new DefaultInputFile("ABCDE", "src/Foo.php"); + file.setLines(2); + file.setOriginalLineOffsets(new int[] {0, 10}); + file.setLastValidOffset(15); + TextRange newRange = file.newRange(10, 13); + assertThat(newRange.start().line()).isEqualTo(2); + assertThat(newRange.start().lineOffset()).isEqualTo(0); + assertThat(newRange.end().line()).isEqualTo(2); + assertThat(newRange.end().lineOffset()).isEqualTo(3); + } + + @Test public void testRangeOverlap() { DefaultInputFile file = new DefaultInputFile("ABCDE", "src/Foo.php"); file.setLines(2); diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java index 9dbd8442527..7cd43d46423 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java @@ -19,6 +19,10 @@ */ package org.sonar.api.batch.fs.internal; +import java.io.File; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import javax.annotation.Nullable; import org.apache.commons.codec.binary.Hex; import org.apache.commons.io.FileUtils; import org.junit.Rule; @@ -29,12 +33,6 @@ import org.sonar.api.batch.fs.internal.FileMetadata.LineHashConsumer; import org.sonar.api.utils.log.LogTester; import org.sonar.api.utils.log.LoggerLevel; -import javax.annotation.Nullable; - -import java.io.File; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; - import static org.apache.commons.codec.digest.DigestUtils.md5Hex; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -137,6 +135,32 @@ public class FileMetadataTest { } @Test + public void mac_without_latest_eol() throws Exception { + File tempFile = temp.newFile(); + FileUtils.write(tempFile, "foo\rbar\rbaz", StandardCharsets.UTF_8, true); + + FileMetadata.Metadata metadata = new FileMetadata().readMetadata(tempFile, StandardCharsets.UTF_8); + assertThat(metadata.lines).isEqualTo(3); + assertThat(metadata.nonBlankLines).isEqualTo(3); + assertThat(metadata.hash).isEqualTo(md5Hex("foo\nbar\nbaz")); + assertThat(metadata.originalLineOffsets).containsOnly(0, 4, 8); + assertThat(metadata.lastValidOffset).isEqualTo(11); + } + + @Test + public void mac_with_latest_eol() throws Exception { + File tempFile = temp.newFile(); + FileUtils.write(tempFile, "foo\rbar\rbaz\r", StandardCharsets.UTF_8, true); + + FileMetadata.Metadata metadata = new FileMetadata().readMetadata(tempFile, StandardCharsets.UTF_8); + assertThat(metadata.lines).isEqualTo(4); + assertThat(metadata.nonBlankLines).isEqualTo(3); + assertThat(metadata.hash).isEqualTo(md5Hex("foo\nbar\nbaz\n")); + assertThat(metadata.originalLineOffsets).containsOnly(0, 4, 8, 12); + assertThat(metadata.lastValidOffset).isEqualTo(12); + } + + @Test public void mix_of_newlines_with_latest_eol() throws Exception { File tempFile = temp.newFile(); FileUtils.write(tempFile, "foo\nbar\r\nbaz\n", StandardCharsets.UTF_8, true); @@ -284,7 +308,7 @@ public class FileMetadataTest { FileMetadata.Metadata metadata = new FileMetadata().readMetadata(woff, StandardCharsets.UTF_8); assertThat(metadata.lines).isEqualTo(135); - assertThat(metadata.nonBlankLines).isEqualTo(134); + assertThat(metadata.nonBlankLines).isEqualTo(133); assertThat(metadata.hash).isNotEmpty(); assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains("Invalid character encountered in file"); |