aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch/src/main/java
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2015-03-31 10:49:12 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2015-03-31 10:55:32 +0200
commit3cffe27907634572a81e92092ee697c9f2bea0a7 (patch)
treeaecc8b22e470bf2190b81045c39106242f18eced /sonar-batch/src/main/java
parent42be4e6f92aa002f3c8f5b05bc93ce11f659f200 (diff)
downloadsonarqube-3cffe27907634572a81e92092ee697c9f2bea0a7.tar.gz
sonarqube-3cffe27907634572a81e92092ee697c9f2bea0a7.zip
Improve error message when issue is out of line range during issue tracking
and add test for binary file line computation
Diffstat (limited to 'sonar-batch/src/main/java')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueTracking.java12
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileMetadata.java13
2 files changed, 10 insertions, 15 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueTracking.java b/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueTracking.java
index 54c7970bc34..adbdbc97525 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueTracking.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueTracking.java
@@ -22,6 +22,7 @@ package org.sonar.batch.issue.tracking;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -32,11 +33,7 @@ import org.sonar.api.issue.internal.DefaultIssue;
import javax.annotation.Nullable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
public class IssueTracking implements BatchComponent {
@@ -60,10 +57,13 @@ public class IssueTracking implements BatchComponent {
if (issues.isEmpty()) {
return;
}
+ FileHashes hashedSource = sourceHashHolder.getHashedSource();
for (DefaultIssue issue : issues) {
Integer line = issue.line();
if (line != null) {
- issue.setChecksum(sourceHashHolder.getHashedSource().getHash(line));
+ // Extra verification if some plugin managed to create issue on a wrong line
+ Preconditions.checkState(line <= hashedSource.length(), "Invalid line number for issue %s. File has only %s line(s)", issue, hashedSource.length());
+ issue.setChecksum(hashedSource.getHash(line));
}
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileMetadata.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileMetadata.java
index 122ca40a5eb..05161741c13 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileMetadata.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileMetadata.java
@@ -25,22 +25,17 @@ 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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.AnalysisMode;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
+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;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
+import java.io.*;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.ArrayList;
@@ -52,7 +47,7 @@ import java.util.List;
*/
public class FileMetadata implements BatchComponent {
- private static final Logger LOG = LoggerFactory.getLogger(FileMetadata.class);
+ private static final Logger LOG = Loggers.get(FileMetadata.class);
private static final char LINE_FEED = '\n';
private static final char CARRIAGE_RETURN = '\r';