summaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2010-09-26 21:46:58 +0000
committersimonbrandhof <simon.brandhof@gmail.com>2010-09-26 21:46:58 +0000
commit36e81898a5a6e2b2029a2279a257d2ac06345f73 (patch)
treeb52bf836e5698b1e4f2df79b2d144ad8e23ea64e /sonar-plugin-api
parent1723690eeb56a709c9ba87c0be94117186cead2a (diff)
downloadsonarqube-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')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/DefaultFormulaData.java4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/FileFilter.java26
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java6
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/resources/DefaultProjectFileSystem.java23
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java19
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;