diff options
| author | Alban Auzeill | 2019-12-23 14:38:46 +0100 | 
|---|---|---|
| committer | Elena Vilchik | 2019-12-23 14:38:46 +0100 | 
| commit | e1084ab0bee42625105ff332365b05ab30654d47 (patch) | |
| tree | 56ed1f1d404b378db88e334294f2ba3a5022c72b /sonar-css-plugin/src/main | |
| parent | 0161362db5e83f700dded8ff052b358a3f478640 (diff) | |
| download | sonar-css-e1084ab0bee42625105ff332365b05ab30654d47.tar.bz2 | |
Send file content to NodeJS process if encoding not UFT-8 (#224)
Diffstat (limited to 'sonar-css-plugin/src/main')
| -rw-r--r-- | sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java | 13 | ||||
| -rw-r--r-- | sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/AnalyzerBridgeServer.java | 11 | 
2 files changed, 20 insertions, 4 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java index 644ece8..3b32501 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java @@ -35,6 +35,7 @@ import java.util.regex.Pattern;  import java.util.stream.Collectors;  import java.util.stream.StreamSupport;  import javax.annotation.Nullable; +import org.sonar.api.SonarProduct;  import org.sonar.api.batch.fs.FilePredicate;  import org.sonar.api.batch.fs.FilePredicates;  import org.sonar.api.batch.fs.FileSystem; @@ -51,8 +52,8 @@ import org.sonar.api.utils.log.Logger;  import org.sonar.api.utils.log.Loggers;  import org.sonar.css.plugin.CssRules.StylelintConfig;  import org.sonar.css.plugin.server.AnalyzerBridgeServer.Issue; -import org.sonar.css.plugin.server.CssAnalyzerBridgeServer;  import org.sonar.css.plugin.server.AnalyzerBridgeServer.Request; +import org.sonar.css.plugin.server.CssAnalyzerBridgeServer;  import org.sonar.css.plugin.server.exception.ServerAlreadyFailedException;  import org.sonarsource.analyzer.commons.ProgressReport;  import org.sonarsource.nodejs.NodeCommandException; @@ -140,7 +141,7 @@ public class CssRuleSensor implements Sensor {            try {              analyzeFile(context, inputFile, configFile);            } catch (IOException | RuntimeException e) { -            throw new IOException("Failure during analysis of " + inputFile.uri() + ": " + e.getMessage()); +            throw new IOException("Failure during analysis of " + inputFile.uri() + ": " + e.getMessage(), e);            }            progressReport.nextFile();          } else { @@ -164,13 +165,19 @@ public class CssRuleSensor implements Sensor {        LOG.debug("Skipping {} as it has not 'file' scheme", uri);        return;      } -    Request request = new Request(new File(uri).getAbsolutePath(), configFile.toString()); +    String fileContent = shouldSendFileContent(context, inputFile) ? inputFile.contents() : null; +    Request request = new Request(new File(uri).getAbsolutePath(), fileContent, configFile.toString());      LOG.debug("Analyzing " + request.filePath);      Issue[] issues = cssAnalyzerBridgeServer.analyze(request);      LOG.debug("Found {} issue(s)", issues.length);      saveIssues(context, inputFile, issues);    } +  private static boolean shouldSendFileContent(SensorContext context, InputFile file) { +    return context.runtime().getProduct() == SonarProduct.SONARLINT +      || !StandardCharsets.UTF_8.equals(file.charset()); +  } +    private void saveIssues(SensorContext context, InputFile inputFile, Issue[] issues) {      for (Issue issue : issues) {        NewIssue sonarIssue = context.newIssue(); diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/AnalyzerBridgeServer.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/AnalyzerBridgeServer.java index 0656b06..56481ec 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/AnalyzerBridgeServer.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/AnalyzerBridgeServer.java @@ -20,6 +20,7 @@  package org.sonar.css.plugin.server;  import java.io.IOException; +import javax.annotation.Nullable;  import org.sonar.api.Startable;  import org.sonar.api.batch.sensor.SensorContext;  import org.sonar.api.scanner.ScannerSide; @@ -41,10 +42,18 @@ public interface AnalyzerBridgeServer extends Startable {    class Request {      public final String filePath; +    /** +     * The fileContent is sent only in the SonarLint context or when the encoding +     * of the file is not utf-8. Otherwise, for performance reason, it's more efficient to +     * not have the fileContent and let the server getting it using filePath. +     */ +    @Nullable +    public final String fileContent;      public final String configFile; -    public Request(String filePath, String configFile) { +    public Request(String filePath, @Nullable String fileContent, String configFile) {        this.filePath = filePath; +      this.fileContent = fileContent;        this.configFile = configFile;      }    }  | 
