diff options
4 files changed, 51 insertions, 13 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingResult.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingResult.java index dd69da8e23c..68e24d97bae 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingResult.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingResult.java @@ -87,8 +87,7 @@ class IssueTrackingResult { } unmatchedByRuleAndKey.get(ruleKey).put(i.getKee(), i); Map<Integer, Multimap<String, IssueDto>> unmatchedForRule = unmatchedByRuleAndLineAndChecksum.get(ruleKey); - Integer line = i.getLine(); - Integer lineNotNull = line != null ? line : 0; + Integer lineNotNull = lineNotNull(i); if (!unmatchedForRule.containsKey(lineNotNull)) { unmatchedForRule.put(lineNotNull, HashMultimap.<String, IssueDto>create()); } @@ -97,12 +96,18 @@ class IssueTrackingResult { unmatchedForRuleAndLine.put(checksumNotNull, i); } + private Integer lineNotNull(IssueDto i) { + Integer line = i.getLine(); + Integer lineNotNull = line != null ? line : 0; + return lineNotNull; + } + void setMatch(DefaultIssue issue, IssueDto matching) { matched.put(issue, matching); RuleKey ruleKey = RuleKey.of(matching.getRuleRepo(), matching.getRule()); unmatchedByRuleAndKey.get(ruleKey).remove(matching.getKee()); unmatchedByKey.remove(matching.getKee()); - Integer lineNotNull = matching.getLine() != null ? matching.getLine() : 0; + Integer lineNotNull = lineNotNull(matching); String checksumNotNull = StringUtils.defaultString(matching.getChecksum(), ""); unmatchedByRuleAndLineAndChecksum.get(ruleKey).get(lineNotNull).get(checksumNotNull).remove(matching); } diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/scm/XooScmProvider.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/scm/XooScmProvider.java index 5807d820043..1dbcb2c04fd 100644 --- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/scm/XooScmProvider.java +++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/scm/XooScmProvider.java @@ -22,6 +22,8 @@ package org.sonar.xoo.scm; import org.sonar.api.batch.scm.BlameCommand; import org.sonar.api.batch.scm.ScmProvider; +import java.io.File; + public class XooScmProvider extends ScmProvider { private final XooBlameCommand blame; @@ -31,6 +33,11 @@ public class XooScmProvider extends ScmProvider { } @Override + public boolean supports(File baseDir) { + return new File(baseDir, ".xoo").exists(); + } + + @Override public String key() { return "xoo"; } diff --git a/sonar-batch/src/main/java/org/sonar/batch/util/ProgressReport.java b/sonar-batch/src/main/java/org/sonar/batch/util/ProgressReport.java index 80be1cead2e..0409a99e119 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/util/ProgressReport.java +++ b/sonar-batch/src/main/java/org/sonar/batch/util/ProgressReport.java @@ -24,23 +24,18 @@ import org.slf4j.LoggerFactory; public class ProgressReport implements Runnable { + private static final Logger LOG = LoggerFactory.getLogger(ProgressReport.class); private final long period; - private final Logger logger; private String message = ""; private final Thread thread; private String stopMessage = ""; - public ProgressReport(String threadName, long period, Logger logger) { + public ProgressReport(String threadName, long period) { this.period = period; - this.logger = logger; thread = new Thread(this); thread.setName(threadName); } - public ProgressReport(String threadName, long period) { - this(threadName, period, LoggerFactory.getLogger(ProgressReport.class)); - } - @Override public void run() { while (!Thread.interrupted()) { @@ -73,9 +68,9 @@ public class ProgressReport implements Runnable { } private void log(String message) { - synchronized (logger) { - logger.info(message); - logger.notifyAll(); + synchronized (LOG) { + LOG.info(message); + LOG.notifyAll(); } } diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java index 1c3b4209e51..775c52004ce 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java @@ -150,6 +150,37 @@ public class ScmMediumTest { .withValue("1=;2=julien;3=julien;4=julien;5=simon")); } + @Test + public void testAutoDetection() throws IOException { + + File baseDir = prepareProject(); + new File(baseDir, ".xoo").createNewFile(); + + TaskResult result = tester.newTask() + .properties(ImmutableMap.<String, String>builder() + .put("sonar.task", "scan") + .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) + .put("sonar.projectKey", "com.foo.project") + .put("sonar.projectName", "Foo Project") + .put("sonar.projectVersion", "1.0-SNAPSHOT") + .put("sonar.projectDescription", "Description of Foo Project") + .put("sonar.sources", "src") + .build()) + .start(); + + assertThat(result.measures()).hasSize(4); + + assertThat(result.measures()).contains(new DefaultMeasure<Integer>() + .forMetric(CoreMetrics.LINES) + .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo")) + .withValue(5)); + + assertThat(result.measures()).contains(new DefaultMeasure<String>() + .forMetric(CoreMetrics.SCM_AUTHORS_BY_LINE) + .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo")) + .withValue("1=;2=julien;3=julien;4=julien;5=simon")); + } + private File prepareProject() throws IOException { File baseDir = temp.newFolder(); File srcDir = new File(baseDir, "src"); |