From 14de16c62104cff7d8cb0a272b1f3abb29458f6e Mon Sep 17 00:00:00 2001 From: David Gageot Date: Tue, 6 Nov 2012 13:00:26 +0100 Subject: [PATCH] SONAR-3885 Exclusion patterns should support negation --- .../core/batch/ProjectFileSystemLogger.java | 2 + .../java/org/sonar/api/resources/Project.java | 60 ++++++++++++++++--- .../org/sonar/api/resources/ProjectTest.java | 22 +++++++ 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ProjectFileSystemLogger.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ProjectFileSystemLogger.java index 3364e99b8f6..d28b0ba002a 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ProjectFileSystemLogger.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ProjectFileSystemLogger.java @@ -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(); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java index a7e8c7bd326..812eeab7d6e 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java @@ -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. 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 exclusionPatterns() { + return trimExclusions(ImmutableList. builder() + .add(configuration.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY)) + .add(configuration.getStringArray(CoreProperties.GLOBAL_EXCLUSIONS_PROPERTY)).build()); + } + + private List 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 patterns) { + List 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 patterns) { + List 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 exclusions) { + private static List trimExclusions(List patterns) { List 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; } /** diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java index 81c3f209886..2ff1a1a6ec0 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java @@ -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"); + } } -- 2.39.5