aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorJenkins CI <ci@sonarsource.com>2015-10-14 17:29:08 +0200
committerJenkins CI <ci@sonarsource.com>2015-10-14 17:29:08 +0200
commit2050de252f953c38a4ca2c4baa43d3e715bb229f (patch)
tree8b69e9a8e4fdcac15ce5b723da33e84af0ac4db9 /sonar-plugin-api
parent997aac4e4051de8006db15bcd810174bf3aa5421 (diff)
parentbf1ca9e5cdb705c969d93755f52c1da34e64c0dd (diff)
downloadsonarqube-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')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java39
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java14
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java38
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");