]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7883 Expose InputFile charset in API 1098/head
authorJulien HENRY <julien.henry@sonarsource.com>
Tue, 12 Jul 2016 09:34:40 +0000 (11:34 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Tue, 12 Jul 2016 11:03:43 +0000 (13:03 +0200)
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CpdTokenizerSensor.java
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/HasTagSensor.java
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/MultilineIssuesSensor.java
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/NoSonarSensor.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/InputFile.java
sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java

index aa2c69faa57417bbf802acbcfa799240bedb3664..ed06b22574ae006abf9ef34b194a3b2e63c8963b 100644 (file)
@@ -42,7 +42,7 @@ public class CpdTokenizerSensor implements Sensor {
     NewCpdTokens newCpdTokens = context.newCpdTokens().onFile(inputFile);
     try {
       StringBuilder sb = new StringBuilder();
-      for (String line : FileUtils.readLines(inputFile.file(), context.fileSystem().encoding())) {
+      for (String line : FileUtils.readLines(inputFile.file(), inputFile.charset())) {
         int startOffset = 0;
         int endOffset = 0;
         for (int i = 0; i < line.length(); i++) {
index 9f030e6db69fe2e3f37f5a19e2bdffd8fea5481a..afea04da8921acf8aef383026b1054f8cb3d6f78 100644 (file)
@@ -58,7 +58,7 @@ public class HasTagSensor extends AbstractXooRuleSensor {
     }
     try {
       int[] lineCounter = {1};
-      Files.lines(inputFile.path(), context.fileSystem().encoding()).forEachOrdered(lineStr -> {
+      Files.lines(inputFile.path(), inputFile.charset()).forEachOrdered(lineStr -> {
         int startIndex = -1;
         while ((startIndex = lineStr.indexOf(tag, startIndex + 1)) != -1) {
           NewIssue newIssue = context.newIssue();
index babb207377ec3a1d1809c5ea552f9097c55e09d2..ef63c48adf355e85d9b5b55790bcb68ef1e829ed 100644 (file)
@@ -84,7 +84,7 @@ public class MultilineIssuesSensor implements Sensor {
     Map<Integer, Table<Integer, Integer, TextPointer>> endFlowsPositions) {
     int currentLine = 0;
     try {
-      for (String lineStr : Files.readAllLines(file.path(), context.fileSystem().encoding())) {
+      for (String lineStr : Files.readAllLines(file.path(), file.charset())) {
         currentLine++;
 
         Matcher m = START_FLOW_PATTERN.matcher(lineStr);
@@ -159,7 +159,7 @@ public class MultilineIssuesSensor implements Sensor {
     Map<Integer, TextPointer> endPositions) {
     int currentLine = 0;
     try {
-      for (String lineStr : Files.readAllLines(file.path(), context.fileSystem().encoding())) {
+      for (String lineStr : Files.readAllLines(file.path(), file.charset())) {
         currentLine++;
 
         Matcher m = START_ISSUE_PATTERN.matcher(lineStr);
index d57e2f1eb93af87e37a75e51225c7b5a59c09e05..93e4d169070d20c5d067907f1a115ab720b9dae8 100644 (file)
@@ -50,15 +50,15 @@ public class NoSonarSensor implements Sensor {
   @Override
   public void execute(SensorContext context) {
     for (InputFile inputFile : context.fileSystem().inputFiles(context.fileSystem().predicates().hasLanguage(Xoo.KEY))) {
-      processFile(inputFile, context);
+      processFile(inputFile);
     }
   }
 
-  private void processFile(InputFile inputFile, SensorContext context) {
+  private void processFile(InputFile inputFile) {
     try {
       Set<Integer> noSonarLines = new HashSet<>();
       int[] lineCounter = {1};
-      try (Stream<String> stream = Files.lines(inputFile.path(), context.fileSystem().encoding())) {
+      try (Stream<String> stream = Files.lines(inputFile.path(), inputFile.charset())) {
         stream.forEachOrdered(lineStr -> {
           if (lineStr.contains("//NOSONAR")) {
             noSonarLines.add(lineCounter[0]);
index af020cdbc032bd0c11d9bc1b6aec7a77f4141faa..0e8bf735df684c721b843fcc6d1a0d27bd6476f5 100644 (file)
@@ -60,8 +60,9 @@ public interface FileSystem {
   File baseDir();
 
   /**
-   * Default encoding of input files. If it's not defined, then
-   * the platform default encoding is returned
+   * Default encoding of files in this project. If it's not defined, then
+   * the platform default encoding is returned.
+   * When reading an {@link InputFile} it is preferable to use {@link InputFile#charset()} 
    */
   Charset encoding();
 
index 722abe9e5ff9686f3ab9495eb37b38cfe41b8d8c..dafc0c8ad790bac3425e8690f8e006cbcb7493f7 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.api.batch.fs;
 
 import java.io.File;
+import java.nio.charset.Charset;
 import java.nio.file.Path;
 import javax.annotation.CheckForNull;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
@@ -156,4 +157,10 @@ public interface InputFile extends InputPath {
    * @since 5.2
    */
   TextRange selectLine(int line);
+
+  /**
+   * Charset to be used to decode this specific file.
+   * @since 6.0
+   */
+  Charset charset();
 }
index 6b06eabe4b964e814ae02025281b83f276ede7d6..da9ead4cba783cf6cfbf3409696109a1e5f74c2c 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.api.batch.fs.internal;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import org.junit.Rule;
 import org.junit.Test;
@@ -43,7 +44,8 @@ public class DefaultInputFileTest {
       .setLines(42)
       .setLanguage("php")
       .setStatus(InputFile.Status.ADDED)
-      .setType(InputFile.Type.TEST);
+      .setType(InputFile.Type.TEST)
+      .setCharset(StandardCharsets.ISO_8859_1);
 
     assertThat(inputFile.relativePath()).isEqualTo("src/Foo.php");
     assertThat(new File(inputFile.relativePath())).isRelative();
@@ -53,6 +55,7 @@ public class DefaultInputFileTest {
     assertThat(inputFile.status()).isEqualTo(InputFile.Status.ADDED);
     assertThat(inputFile.type()).isEqualTo(InputFile.Type.TEST);
     assertThat(inputFile.lines()).isEqualTo(42);
+    assertThat(inputFile.charset()).isEqualTo(StandardCharsets.ISO_8859_1);
   }
 
   @Test