]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3295 sonar.jacoco.excludes must exclude classes from coverage report
authorEvgeny Mandrikov <mandrikov@gmail.com>
Sat, 24 Mar 2012 21:00:37 +0000 (03:00 +0600)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Sat, 24 Mar 2012 21:43:49 +0000 (03:43 +0600)
plugins/sonar-jacoco-plugin/src/main/java/org/sonar/plugins/jacoco/AbstractAnalyzer.java
plugins/sonar-jacoco-plugin/src/main/java/org/sonar/plugins/jacoco/JaCoCoItSensor.java
plugins/sonar-jacoco-plugin/src/main/java/org/sonar/plugins/jacoco/JaCoCoSensor.java
plugins/sonar-jacoco-plugin/src/main/java/org/sonar/plugins/jacoco/JacocoConfiguration.java

index 5042d506bcb5157156563b942005126a5085dd58..6ce0673318ed191d3a9c188092b3615fa49c5755 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.plugins.jacoco;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
 import org.jacoco.core.analysis.*;
 import org.jacoco.core.data.ExecutionDataReader;
@@ -30,6 +31,7 @@ import org.sonar.api.measures.Measure;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.utils.SonarException;
+import org.sonar.api.utils.WildcardPattern;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -49,14 +51,15 @@ public abstract class AbstractAnalyzer {
     }
     String path = getReportPath(project);
     File jacocoExecutionData = project.getFileSystem().resolvePath(path);
+    WildcardPattern[] excludes = WildcardPattern.create(getExcludes(project));
     try {
-      readExecutionData(jacocoExecutionData, buildOutputDir, context);
+      readExecutionData(jacocoExecutionData, buildOutputDir, context, excludes);
     } catch (IOException e) {
       throw new SonarException(e);
     }
   }
 
-  public final void readExecutionData(File jacocoExecutionData, File buildOutputDir, SensorContext context) throws IOException {
+  public final void readExecutionData(File jacocoExecutionData, File buildOutputDir, SensorContext context, WildcardPattern[] excludes) throws IOException {
     SessionInfoStore sessionInfoStore = new SessionInfoStore();
     ExecutionDataStore executionDataStore = new ExecutionDataStore();
 
@@ -79,7 +82,9 @@ public abstract class AbstractAnalyzer {
       JavaFile resource = getResource(coverage);
       // Do not save measures on resource which doesn't exist in the context
       if (context.getResource(resource) != null) {
-        analyzeFile(resource, coverage, context);
+        if (!isExcluded(coverage, excludes)) {
+          analyzeFile(resource, coverage, context);
+        }
         analyzedResources++;
       }
     }
@@ -88,6 +93,17 @@ public abstract class AbstractAnalyzer {
     }
   }
 
+  private static boolean isExcluded(ISourceFileCoverage coverage, WildcardPattern[] excludes) {
+    String name = coverage.getPackageName() + "/" + coverage.getName();
+    for (WildcardPattern pattern : excludes) {
+      if (pattern.match(name)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @VisibleForTesting
   static JavaFile getResource(ISourceFileCoverage coverage) {
     String packageName = StringUtils.replaceChars(coverage.getPackageName(), '/', '.');
     String fileName = StringUtils.substringBeforeLast(coverage.getName(), ".");
@@ -147,4 +163,6 @@ public abstract class AbstractAnalyzer {
 
   protected abstract String getReportPath(Project project);
 
+  protected abstract String[] getExcludes(Project project);
+
 }
index 37cc58a21e00c01468a7c246a3ce4b39ef505e18..ae19078aef7b66d34681ea44453d0535c8dc466d 100644 (file)
@@ -57,6 +57,11 @@ public class JaCoCoItSensor implements Sensor {
       return configuration.getItReportPath();
     }
 
+    @Override
+    protected String[] getExcludes(Project project) {
+      return configuration.getExcludes();
+    }
+
     @Override
     protected void saveMeasures(SensorContext context, JavaFile resource, Collection<Measure> measures) {
       for (Measure measure : measures) {
index 63671d43515bab864cc7087023424214bff4aa57..d40b17d5141b971a1dbfe7596e47c0e0ead28969 100644 (file)
@@ -54,6 +54,11 @@ public class JaCoCoSensor implements Sensor, CoverageExtension {
       return configuration.getReportPath();
     }
 
+    @Override
+    protected String[] getExcludes(Project project) {
+      return configuration.getExcludes();
+    }
+
     @Override
     protected void saveMeasures(SensorContext context, JavaFile resource, Collection<Measure> measures) {
       for (Measure measure : measures) {
index ea44249498783c7f11c9f3e3bdb37db5057529ab..986d6694ab66d72bfdd307835f722c33faf4dbd2 100644 (file)
@@ -144,4 +144,10 @@ public class JacocoConfiguration implements BatchExtension {
   public String[] getAntTargets() {
     return settings.getStringArray(ANT_TARGETS_PROPERTY);
   }
+
+  public String[] getExcludes() {
+    String values = settings.getString(EXCLUDES_PROPERTY);
+    return StringUtils.split(values, ':');
+  }
+
 }