diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2015-03-31 10:49:12 +0200 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2015-03-31 10:55:32 +0200 |
commit | 3cffe27907634572a81e92092ee697c9f2bea0a7 (patch) | |
tree | aecc8b22e470bf2190b81045c39106242f18eced /sonar-batch/src/main/java | |
parent | 42be4e6f92aa002f3c8f5b05bc93ce11f659f200 (diff) | |
download | sonarqube-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.java | 12 | ||||
-rw-r--r-- | sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileMetadata.java | 13 |
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'; |