* @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());
}
/**
* @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};
.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;
}
/**
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");
+ }
}