aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-css-plugin/src/main
diff options
context:
space:
mode:
authorAlban Auzeill2019-12-23 14:38:46 +0100
committerElena Vilchik2019-12-23 14:38:46 +0100
commite1084ab0bee42625105ff332365b05ab30654d47 (patch)
tree56ed1f1d404b378db88e334294f2ba3a5022c72b /sonar-css-plugin/src/main
parent0161362db5e83f700dded8ff052b358a3f478640 (diff)
downloadsonar-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.java13
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/AnalyzerBridgeServer.java11
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;
}
}