diff options
author | simonbrandhof <simon.brandhof@gmail.com> | 2010-09-26 21:46:58 +0000 |
---|---|---|
committer | simonbrandhof <simon.brandhof@gmail.com> | 2010-09-26 21:46:58 +0000 |
commit | 36e81898a5a6e2b2029a2279a257d2ac06345f73 (patch) | |
tree | b52bf836e5698b1e4f2df79b2d144ad8e23ea64e /sonar-plugin-api | |
parent | 1723690eeb56a709c9ba87c0be94117186cead2a (diff) | |
download | sonarqube-36e81898a5a6e2b2029a2279a257d2ac06345f73.tar.gz sonarqube-36e81898a5a6e2b2029a2279a257d2ac06345f73.zip |
SONAR-1711 Allow to exclude sources from code analysis based on cutoff date
Diffstat (limited to 'sonar-plugin-api')
5 files changed, 69 insertions, 9 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/DefaultFormulaData.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/DefaultFormulaData.java index 79a4d3ff634..3fa3da535c6 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/DefaultFormulaData.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/DefaultFormulaData.java @@ -19,12 +19,12 @@ */ package org.sonar.api.batch; +import com.google.common.collect.Lists; import org.sonar.api.measures.FormulaData; import org.sonar.api.measures.Measure; import org.sonar.api.measures.MeasuresFilter; import org.sonar.api.measures.Metric; -import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -56,7 +56,7 @@ public class DefaultFormulaData implements FormulaData { } public Collection<FormulaData> getChildren() { - List<FormulaData> result = new ArrayList<FormulaData>(); + List<FormulaData> result = Lists.newArrayList(); for (DecoratorContext childContext : decoratorContext.getChildren()) { result.add(new DefaultFormulaData(childContext)); } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/FileFilter.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/FileFilter.java new file mode 100644 index 00000000000..5be1d69f32d --- /dev/null +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/FileFilter.java @@ -0,0 +1,26 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2009 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * Sonar is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * Sonar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package org.sonar.api.batch; + +import org.sonar.api.BatchExtension; + +public abstract class FileFilter implements java.io.FileFilter, BatchExtension { + +} diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java index 18a86fd9893..03337afa5e7 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java @@ -19,6 +19,7 @@ */ package org.sonar.api.batch; +import com.google.common.collect.Lists; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.project.MavenProject; import org.sonar.api.BatchComponent; @@ -28,7 +29,6 @@ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; -import java.util.ArrayList; import java.util.List; /** @@ -63,7 +63,7 @@ public class ProjectClasspath implements BatchComponent { protected URLClassLoader createClassLoader() { try { - List<URL> urls = new ArrayList<URL>(); + List<URL> urls = Lists.newArrayList(); for (File file : getElements()) { urls.add(file.toURI().toURL()); } @@ -76,7 +76,7 @@ public class ProjectClasspath implements BatchComponent { protected List<File> createElements() { try { - List<File> files = new ArrayList<File>(); + List<File> files = Lists.newArrayList(); if (pom.getCompileClasspathElements() != null) { for (String classPathString : (List<String>) pom.getCompileClasspathElements()) { files.add(new File(classPathString)); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/DefaultProjectFileSystem.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/DefaultProjectFileSystem.java index 1c04e67b0a5..d66011d11a1 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/DefaultProjectFileSystem.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/DefaultProjectFileSystem.java @@ -19,11 +19,13 @@ */ package org.sonar.api.resources; +import com.google.common.collect.Lists; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.filefilter.*; import org.apache.commons.lang.CharEncoding; import org.apache.commons.lang.StringUtils; +import org.sonar.api.batch.FileFilter; import org.sonar.api.batch.maven.MavenUtils; import org.sonar.api.utils.SonarException; import org.sonar.api.utils.WildcardPattern; @@ -43,6 +45,7 @@ import java.util.List; public class DefaultProjectFileSystem implements ProjectFileSystem { private Project project; + private List<IOFileFilter> filters = Lists.newArrayList(); /** * Creates a DefaultProjectFileSystem based on a project @@ -61,6 +64,18 @@ public class DefaultProjectFileSystem implements ProjectFileSystem { } + public DefaultProjectFileSystem addFileFilters(List<FileFilter> l) { + for (FileFilter fileFilter : l) { + addFileFilter(fileFilter); + } + return this; + } + + public DefaultProjectFileSystem addFileFilter(FileFilter fileFilter) { + filters.add(new DelegateFileFilter(fileFilter)); + return this; + } + /** * Basedir is the project root directory. */ @@ -214,8 +229,9 @@ public class DefaultProjectFileSystem implements ProjectFileSystem { if (dir.exists()) { IOFileFilter exclusionFilter = new ExclusionFilter(dir, exclusionPatterns); IOFileFilter visibleFileFilter = HiddenFileFilter.VISIBLE; - AndFileFilter filters = new AndFileFilter(new AndFileFilter(exclusionFilter, suffixFilter), visibleFileFilter); - result.addAll(FileUtils.listFiles(dir, filters, HiddenFileFilter.VISIBLE)); + List dirFilters = Lists.newArrayList(visibleFileFilter, suffixFilter, exclusionFilter); + dirFilters.addAll(this.filters); + result.addAll(FileUtils.listFiles(dir, new AndFileFilter(dirFilters), HiddenFileFilter.VISIBLE)); } } return result; @@ -233,7 +249,7 @@ public class DefaultProjectFileSystem implements ProjectFileSystem { private IOFileFilter getFileSuffixFilter(Language... langs) { IOFileFilter suffixFilter = FileFilterUtils.trueFileFilter(); - if (langs != null && langs.length>0) { + if (langs != null && langs.length > 0) { List<String> suffixes = new ArrayList<String>(); for (Language lang : langs) { if (lang.getFileSuffixes() != null) { @@ -346,5 +362,4 @@ public class DefaultProjectFileSystem implements ProjectFileSystem { } return false; } - } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java index 82e6574c544..4aa606b97e4 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java @@ -19,12 +19,14 @@ */ package org.sonar.api.resources; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.SystemUtils; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.junit.Before; import org.junit.Test; +import org.sonar.api.batch.FileFilter; import org.sonar.api.test.MavenTestUtils; import java.io.File; @@ -32,6 +34,7 @@ import java.util.List; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; public class DefaultProjectFileSystemTest { @@ -156,6 +159,22 @@ public class DefaultProjectFileSystemTest { } } + + @Test + public void shouldAddExtendedFilters() { + DefaultProjectFileSystem fs = new DefaultProjectFileSystem(project); + assertThat(fs.getSourceFiles().size(), is(2)); + assertThat(fs.getSourceFiles(), hasItem(named("Bar.java"))); + + fs.addFileFilter(new FileFilter() { + public boolean accept(File file) { + return !StringUtils.equals(file.getName(), "Bar.java"); + } + }); + assertThat(fs.getSourceFiles().size(), is(1)); + assertThat(fs.getSourceFiles(), not(hasItem(named("Bar.java")))); + } + private static Matcher<java.io.File> named(final String name) { return new TypeSafeMatcher<java.io.File>() { java.io.File fileTested; |