Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
RadoBuransky committed Feb 6, 2014
1 parent c48f687 commit 95c7fb0
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 17 deletions.
19 changes: 9 additions & 10 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@
</repositories>

<properties>
<sonar.version>3.0</sonar.version>
<sonar.version>3.6</sonar.version>
<sonar-java.version>1.4</sonar-java.version>

<!--<sonar.pluginKey>scala</sonar.pluginKey>
<sonar.pluginName>Scala</sonar.pluginName>-->
Expand All @@ -78,27 +79,24 @@

<sonar.pluginClass>com.buransky.plugins.scoverage.ScoveragePlugin</sonar.pluginClass>

<scala.version>2.10.3</scala.version>
<scala.version>2.10.0</scala.version>
</properties>

<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.sonar.plugins</groupId>
<artifactId>sonar-surefire-plugin</artifactId>
<version>${sonar.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.sonar.plugins</groupId>
<artifactId>sonar-cobertura-plugin</artifactId>
<version>${sonar.version}</version>
<groupId>org.codehaus.sonar-plugins.java</groupId>
<artifactId>sonar-java-plugin</artifactId>
<version>${sonar-java.version}</version>
<type>sonar-plugin</type>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
Expand All @@ -115,6 +113,7 @@
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonar.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,43 +11,67 @@
import org.sonar.api.batch.CoverageExtension;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.config.Settings;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.CoverageMeasuresBuilder;
import org.sonar.api.measures.Measure;
import org.sonar.api.resources.*;
import org.sonar.api.scan.filesystem.ModuleFileSystem;
import scala.collection.JavaConversions;
import org.sonar.api.scan.filesystem.PathResolver;

import java.util.HashMap;
import java.util.Map;

public class ScoverageSensor implements Sensor, CoverageExtension {
private static final Logger log = LoggerFactory.getLogger(ScoverageSensor.class);
private final ScoverageReportParser scoverageReportParser;
private final Settings settings;
private final PathResolver pathResolver;
private final ModuleFileSystem moduleFileSystem;

public ScoverageSensor() {
this(XmlScoverageReportParser$.MODULE$.apply());
private static final String SCOVERAGE_REPORT_PATH_PROPERTY = "sonar.scoverage.reportPath";

public ScoverageSensor(Settings settings, PathResolver pathResolver, ModuleFileSystem fileSystem) {
this(XmlScoverageReportParser$.MODULE$.apply(), settings, pathResolver, fileSystem);
}

public ScoverageSensor(ScoverageReportParser scoverageReportParser) {
public ScoverageSensor(ScoverageReportParser scoverageReportParser, Settings settings,
PathResolver pathResolver, ModuleFileSystem moduleFileSystem) {
this.scoverageReportParser = scoverageReportParser;
this.settings = settings;
this.pathResolver = pathResolver;
this.moduleFileSystem = moduleFileSystem;
}

public boolean shouldExecuteOnProject(Project project) {
return project.getAnalysisType().isDynamic(true) && Scala.INSTANCE.getKey().equals(project.getLanguageKey());
}

public void analyse(Project project, SensorContext context) {
processProject(scoverageReportParser.parse(getScoverageReportPath(project)), project, context);
//parseFakeReport(project, context);
String reportPath = getScoverageReportPath();
if (reportPath != null)
processProject(scoverageReportParser.parse(reportPath), project, context);
}

@Override
public String toString() {
return "Scoverage sensor";
}

private String getScoverageReportPath(Project project) {
return "";
private String getScoverageReportPath() {
String path = settings.getString(SCOVERAGE_REPORT_PATH_PROPERTY);
if (path == null) {
log.error("Scoverage report path not set! [" + SCOVERAGE_REPORT_PATH_PROPERTY + "]");
return null;
}
java.io.File report = pathResolver.relativeFile(moduleFileSystem.baseDir(), path);
if (!report.exists() || !report.isFile()) {
log.error("Scoverage report not found at {}", report);
return null;
}

return report.getAbsolutePath();
}

private void processProject(ProjectStatementCoverage projectCoverage,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@ package com.buransky.plugins.scoverage.xml

import scala.io.Source
import com.buransky.plugins.scoverage.{ProjectStatementCoverage, ScoverageReportParser, ScoverageException}
import org.apache.log4j.Logger

class XmlScoverageReportParser extends ScoverageReportParser {
private val log = Logger.getLogger(classOf[XmlScoverageReportParser])

def parse(reportFilePath: String): ProjectStatementCoverage = {
require(reportFilePath != null)
require(!reportFilePath.trim.isEmpty)

log.info("Parsing Scoverage report. [" + reportFilePath + "]")

val parser = new XmlScoverageReportConstructingParser(sourceFromFile(reportFilePath))
parser.parse()
}
Expand Down

0 comments on commit 95c7fb0

Please sign in to comment.