]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3885 Exclusion patterns should support negation
authorDavid Gageot <david@gageot.net>
Tue, 6 Nov 2012 12:00:26 +0000 (13:00 +0100)
committerDavid Gageot <david@gageot.net>
Tue, 6 Nov 2012 12:00:37 +0000 (13:00 +0100)
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ProjectFileSystemLogger.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java
sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java

index 3364e99b8f60d03586e41ec48d4731506414f742..d28b0ba002ac290855b508caa64103470e0e3a23 100644 (file)
@@ -33,7 +33,9 @@ public class ProjectFileSystemLogger extends Initializer {
 
   @Override
   public void execute(Project project) {
+    logExclusionPatterns("Included sources: {}", project.getInclusionPatterns());
     logExclusionPatterns("Excluded sources: {}", project.getExclusionPatterns());
+    logExclusionPatterns("Included tests: {}", project.getTestExclusionPatterns());
     logExclusionPatterns("Excluded tests: {}", project.getTestExclusionPatterns());
 
     ProjectFileSystem projectFileSystem = project.getFileSystem();
index a7e8c7bd326b524c9dad7fc21e4cd6ca3fe9f533..812eeab7d6ea8cb218b974d082134bd877f40bea 100644 (file)
@@ -362,9 +362,7 @@ public class Project extends Resource {
    * @since 3.3 also applies exclusions in general settings page and global exclusions.
    */
   public String[] getExclusionPatterns() {
-    return trimExclusions(ImmutableList.<String> builder()
-      .add(configuration.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY))
-      .add(configuration.getStringArray(CoreProperties.GLOBAL_EXCLUSIONS_PROPERTY)).build());
+    return removeNegativePatterns(exclusionPatterns());
   }
 
   /**
@@ -374,6 +372,34 @@ public class Project extends Resource {
    * @since 3.3
    */
   public String[] getTestExclusionPatterns() {
+    return removeNegativePatterns(testExclusionPatterns());
+  }
+
+  /**
+   * Patterns of resource inclusion as defined in project settings page.
+   *
+   * @since 3.4
+   */
+  public String[] getInclusionPatterns() {
+    return onlyNegativePatterns(exclusionPatterns());
+  }
+
+  /**
+   * Patterns of test inclusion as defined in project settings page.
+   *
+   * @since 3.4
+   */
+  public String[] getTestInclusionPatterns() {
+    return onlyNegativePatterns(testExclusionPatterns());
+  }
+
+  private List<String> exclusionPatterns() {
+    return trimExclusions(ImmutableList.<String> builder()
+        .add(configuration.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY))
+        .add(configuration.getStringArray(CoreProperties.GLOBAL_EXCLUSIONS_PROPERTY)).build());
+  }
+
+  private List<String> testExclusionPatterns() {
     String[] globalTestExclusions = configuration.getStringArray(CoreProperties.GLOBAL_TEST_EXCLUSIONS_PROPERTY);
     if (globalTestExclusions.length == 0) {
       globalTestExclusions = new String[] {CoreProperties.GLOBAL_TEST_EXCLUSIONS_DEFAULT};
@@ -384,13 +410,33 @@ public class Project extends Resource {
         .add(globalTestExclusions).build());
   }
 
+  private static String[] removeNegativePatterns(List<String> patterns) {
+    List<String> filtered = Lists.newArrayList();
+    for (String pattern : patterns) {
+      if (!pattern.startsWith("!")) {
+        filtered.add(pattern);
+      }
+    }
+    return filtered.toArray(new String[filtered.size()]);
+  }
+
+  private static String[] onlyNegativePatterns(List<String> patterns) {
+    List<String> filtered = Lists.newArrayList();
+    for (String pattern : patterns) {
+      if (pattern.startsWith("!")) {
+        filtered.add(pattern.substring(1));
+      }
+    }
+    return filtered.toArray(new String[filtered.size()]);
+  }
+
   // http://jira.codehaus.org/browse/SONAR-2261 - exclusion must be trimmed
-  private static String[] trimExclusions(List<String> exclusions) {
+  private static List<String> trimExclusions(List<String> patterns) {
     List<String> trimmed = Lists.newArrayList();
-    for (String exclusion : exclusions) {
-      trimmed.add(StringUtils.trim(exclusion));
+    for (String pattern : patterns) {
+      trimmed.add(StringUtils.trim(pattern));
     }
-    return trimmed.toArray(new String[trimmed.size()]);
+    return trimmed;
   }
 
   /**
index 81c3f209886c2e7e587892999a2e5cb3a55d7212..2ff1a1a6ec04c54e8b098b39512e09e217534d87 100644 (file)
@@ -103,4 +103,26 @@ public class ProjectTest {
 
     assertThat(project.getExclusionPatterns()).containsOnly("**/*Foo.java", "**/*Bar.java");
   }
+
+  @Test
+  public void should_support_inclusion_patterns() {
+    conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, "!**/*foo.java, **/*bar.java");
+    conf.setProperty(CoreProperties.GLOBAL_EXCLUSIONS_PROPERTY, "!**/*quix.java");
+
+    Project project = new Project("key").setConfiguration(conf);
+
+    assertThat(project.getExclusionPatterns()).containsOnly("**/*bar.java");
+    assertThat(project.getInclusionPatterns()).containsOnly("**/*foo.java", "**/*quix.java");
+  }
+
+  @Test
+  public void should_support_test_inclusion_patterns() {
+    conf.setProperty(CoreProperties.PROJECT_TEST_EXCLUSIONS_PROPERTY, "!**/*Test.java, **/*FunctionalTest.java");
+    conf.setProperty(CoreProperties.GLOBAL_TEST_EXCLUSIONS_PROPERTY, "!**/*IntegrationTest.java");
+
+    Project project = new Project("key").setConfiguration(conf);
+
+    assertThat(project.getTestExclusionPatterns()).containsOnly("**/*FunctionalTest.java");
+    assertThat(project.getTestInclusionPatterns()).containsOnly("**/*Test.java", "**/*IntegrationTest.java");
+  }
 }