aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java8
-rw-r--r--plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java8
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/ignore/scanner/IssueExclusionsLoader.java3
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java10
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java38
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleInputFileCache.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ProjectFileSystemAdapter.java42
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java10
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FilePredicates.java161
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java39
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AbsolutePathPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/AbsolutePathPredicate.java)4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AndPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/AndPredicate.java)5
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFilePredicates.java160
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFileSystem.java13
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FalsePredicate.java33
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/LanguagePredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/LanguagePredicate.java)5
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/NotPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/NotPredicate.java)5
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/OrPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/OrPredicate.java)8
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/PathPatternPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/PathPatternPredicate.java)4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/RelativePathPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/RelativePathPredicate.java)5
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/StatusPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/StatusPredicate.java)5
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TruePredicate.java33
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TypePredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/TypePredicate.java)5
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/UniqueIndexPredicate.java (renamed from sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/UniqueIndexPredicate.java)2
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/FilePredicatesTest.java213
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFilePredicatesTest.java217
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFileSystemTest.java34
28 files changed, 641 insertions, 433 deletions
diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java
index dec0a7d1b07..9fbe470b280 100644
--- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java
+++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java
@@ -81,10 +81,10 @@ public class SonarBridgeEngine extends CpdEngine {
public void analyse(Project project, String languageKey, SensorContext context) {
String[] cpdExclusions = settings.getStringArray(CoreProperties.CPD_EXCLUSIONS);
logExclusions(cpdExclusions, LOG);
- List<InputFile> sourceFiles = Lists.newArrayList(fs.inputFiles(FilePredicates.and(
- FilePredicates.hasType(InputFile.Type.MAIN),
- FilePredicates.hasLanguage(languageKey),
- FilePredicates.doesNotMatchPathPatterns(cpdExclusions)
+ List<InputFile> sourceFiles = Lists.newArrayList(fs.inputFiles(fs.predicates().and(
+ fs.predicates().hasType(InputFile.Type.MAIN),
+ fs.predicates().hasLanguage(languageKey),
+ fs.predicates().doesNotMatchPathPatterns(cpdExclusions)
)));
if (sourceFiles.isEmpty()) {
return;
diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java
index f01761fbfb3..671cebb77da 100644
--- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java
+++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java
@@ -93,10 +93,10 @@ public class SonarEngine extends CpdEngine {
public void analyse(Project project, String languageKey, SensorContext context) {
String[] cpdExclusions = settings.getStringArray(CoreProperties.CPD_EXCLUSIONS);
logExclusions(cpdExclusions, LOG);
- List<InputFile> sourceFiles = Lists.newArrayList(fs.inputFiles(FilePredicates.and(
- FilePredicates.hasType(InputFile.Type.MAIN),
- FilePredicates.hasLanguage(languageKey),
- FilePredicates.doesNotMatchPathPatterns(cpdExclusions)
+ List<InputFile> sourceFiles = Lists.newArrayList(fs.inputFiles(fs.predicates().and(
+ fs.predicates().hasType(InputFile.Type.MAIN),
+ fs.predicates().hasLanguage(languageKey),
+ fs.predicates().doesNotMatchPathPatterns(cpdExclusions)
)));
if (sourceFiles.isEmpty()) {
return;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java b/sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java
index 7c59d4f310f..3647287bb3e 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java
@@ -63,7 +63,7 @@ public class ResourceKeyMigration implements BatchComponent {
public void migrateIfNeeded(Project module, FileSystem fs) {
if (migrationNeeded) {
- migrateIfNeeded(module, fs.inputFiles(FilePredicates.all()));
+ migrateIfNeeded(module, fs.inputFiles(fs.predicates().all()));
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/ignore/scanner/IssueExclusionsLoader.java b/sonar-batch/src/main/java/org/sonar/batch/issue/ignore/scanner/IssueExclusionsLoader.java
index 17731fdb553..1dad68550bb 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/issue/ignore/scanner/IssueExclusionsLoader.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/issue/ignore/scanner/IssueExclusionsLoader.java
@@ -20,7 +20,6 @@
package org.sonar.batch.issue.ignore.scanner;
-import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
@@ -58,7 +57,7 @@ public final class IssueExclusionsLoader {
public void execute() {
Charset sourcesEncoding = fileSystem.encoding();
- for (InputFile inputFile : fileSystem.inputFiles(FilePredicates.all())) {
+ for (InputFile inputFile : fileSystem.inputFiles(fileSystem.predicates().all())) {
try {
String componentEffectiveKey = ((DefaultInputFile) inputFile).key();
if (componentEffectiveKey != null) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java
index 2acf6ce31f9..8d31f3b5a39 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java
@@ -25,17 +25,21 @@ import com.google.common.io.Files;
import org.sonar.api.BatchComponent;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.SonarIndex;
-import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.config.Settings;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.File;
+import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.Languages;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Resource;
import org.sonar.api.utils.SonarException;
import org.sonar.batch.index.ResourceKeyMigration;
/**
* Index all files/directories of the module in SQ database and importing source code.
+ *
* @since 4.2
*/
public class ComponentIndexer implements BatchComponent {
@@ -61,7 +65,7 @@ public class ComponentIndexer implements BatchComponent {
migration.migrateIfNeeded(module, fs);
boolean shouldImportSource = settings.getBoolean(CoreProperties.CORE_IMPORT_SOURCES_PROPERTY);
- for (InputFile inputFile : fs.inputFiles(FilePredicates.all())) {
+ for (InputFile inputFile : fs.inputFiles(fs.predicates().all())) {
String languageKey = inputFile.language();
boolean unitTest = InputFile.Type.TEST == inputFile.type();
String pathFromSourceDir = ((DefaultInputFile) inputFile).pathRelativeToSourceDir();
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
index 56c812ae8f3..1ffaa77bf29 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
@@ -28,7 +28,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Project;
@@ -38,7 +37,6 @@ import org.sonar.api.utils.SonarException;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-
import java.io.File;
import java.nio.charset.Charset;
import java.util.Arrays;
@@ -69,7 +67,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
private boolean initialized;
public DefaultModuleFileSystem(ModuleInputFileCache moduleInputFileCache, Project module, Settings settings, FileIndexer indexer, ModuleFileSystemInitializer initializer,
- ComponentIndexer componentIndexer) {
+ ComponentIndexer componentIndexer) {
super(moduleInputFileCache);
this.componentIndexer = componentIndexer;
this.moduleKey = module.getKey();
@@ -147,6 +145,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
/**
* Should not be used - only for old plugins
+ *
* @deprecated since 4.0
*/
@Deprecated
@@ -156,6 +155,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
/**
* Should not be used - only for old plugins
+ *
* @deprecated since 4.0
*/
@Deprecated
@@ -189,7 +189,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
for (Map.Entry<String, Collection<String>> entry : query.attributes().entrySet()) {
predicates.add(fromDeprecatedAttribute(entry.getKey(), entry.getValue()));
}
- return ImmutableList.copyOf(files(FilePredicates.and(predicates)));
+ return ImmutableList.copyOf(files(predicates().and(predicates)));
}
@Override
@@ -230,60 +230,60 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
return builder.build();
}
- static FilePredicate fromDeprecatedAttribute(String key, Collection<String> value) {
+ private FilePredicate fromDeprecatedAttribute(String key, Collection<String> value) {
if ("TYPE".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : FilePredicates.hasType(org.sonar.api.batch.fs.InputFile.Type.valueOf(s));
+ return s == null ? predicates().all() : predicates().hasType(org.sonar.api.batch.fs.InputFile.Type.valueOf(s));
}
}));
}
if ("STATUS".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : FilePredicates.hasStatus(org.sonar.api.batch.fs.InputFile.Status.valueOf(s));
+ return s == null ? predicates().all() : predicates().hasStatus(org.sonar.api.batch.fs.InputFile.Status.valueOf(s));
}
}));
}
if ("LANG".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : FilePredicates.hasLanguage(s);
+ return s == null ? predicates().all() : predicates().hasLanguage(s);
}
}));
}
if ("CMP_KEY".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : new AdditionalFilePredicates.KeyPredicate(s);
+ return s == null ? predicates().all() : new AdditionalFilePredicates.KeyPredicate(s);
}
}));
}
if ("CMP_DEPRECATED_KEY".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : new AdditionalFilePredicates.DeprecatedKeyPredicate(s);
+ return s == null ? predicates().all() : new AdditionalFilePredicates.DeprecatedKeyPredicate(s);
}
}));
}
if ("SRC_REL_PATH".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : new AdditionalFilePredicates.SourceRelativePathPredicate(s);
+ return s == null ? predicates().all() : new AdditionalFilePredicates.SourceRelativePathPredicate(s);
}
}));
}
if ("SRC_DIR_PATH".equals(key)) {
- return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
+ return predicates().or(Collections2.transform(value, new Function<String, FilePredicate>() {
@Override
public FilePredicate apply(@Nullable String s) {
- return s == null ? FilePredicates.all() : new AdditionalFilePredicates.SourceDirPredicate(s);
+ return s == null ? predicates().all() : new AdditionalFilePredicates.SourceDirPredicate(s);
}
}));
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleInputFileCache.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleInputFileCache.java
index a4c5776070f..4a909f29cf4 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleInputFileCache.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleInputFileCache.java
@@ -21,7 +21,7 @@ package org.sonar.batch.scan.filesystem;
import org.sonar.api.BatchComponent;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.UniqueIndexPredicate;
+import org.sonar.api.batch.fs.internal.UniqueIndexPredicate;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.resources.Project;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ProjectFileSystemAdapter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ProjectFileSystemAdapter.java
index f606206df25..c42c1d75fac 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ProjectFileSystemAdapter.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ProjectFileSystemAdapter.java
@@ -21,13 +21,16 @@ package org.sonar.batch.scan.filesystem;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import java.util.Arrays;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.CharEncoding;
import org.apache.maven.project.MavenProject;
import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.FilePredicates;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.InputFile;
+import org.sonar.api.resources.Java;
+import org.sonar.api.resources.Language;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.ProjectFileSystem;
+import org.sonar.api.resources.Resource;
import org.sonar.api.scan.filesystem.PathResolver;
import org.sonar.api.utils.SonarException;
@@ -35,6 +38,7 @@ import javax.annotation.Nullable;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
+import java.util.Arrays;
import java.util.List;
/**
@@ -135,8 +139,8 @@ public class ProjectFileSystemAdapter implements ProjectFileSystem {
}
public List<File> getSourceFiles(Language... langs) {
- return Lists.newArrayList(target.files(FilePredicates.and(
- FilePredicates.hasType(org.sonar.api.batch.fs.InputFile.Type.MAIN),
+ return Lists.newArrayList(target.files(target.predicates().and(
+ target.predicates().hasType(org.sonar.api.batch.fs.InputFile.Type.MAIN),
newHasLanguagesPredicate(langs))));
}
@@ -149,15 +153,15 @@ public class ProjectFileSystemAdapter implements ProjectFileSystem {
}
public List<File> getTestFiles(Language... langs) {
- return Lists.newArrayList(target.files(FilePredicates.and(
- FilePredicates.hasType(org.sonar.api.batch.fs.InputFile.Type.TEST),
+ return Lists.newArrayList(target.files(target.predicates().and(
+ target.predicates().hasType(org.sonar.api.batch.fs.InputFile.Type.TEST),
newHasLanguagesPredicate(langs))));
}
public boolean hasTestFiles(Language lang) {
- return target.hasFiles(FilePredicates.and(
- FilePredicates.hasType(org.sonar.api.batch.fs.InputFile.Type.TEST),
- FilePredicates.hasLanguage(lang.getKey())));
+ return target.hasFiles(target.predicates().and(
+ target.predicates().hasType(org.sonar.api.batch.fs.InputFile.Type.TEST),
+ target.predicates().hasLanguage(lang.getKey())));
}
public File writeToWorkingDirectory(String content, String fileName) throws IOException {
@@ -183,25 +187,25 @@ public class ProjectFileSystemAdapter implements ProjectFileSystem {
}
public List<InputFile> mainFiles(String... langs) {
- return Lists.newArrayList((Iterable) target.inputFiles(FilePredicates.and(
- FilePredicates.hasType(org.sonar.api.batch.fs.InputFile.Type.MAIN),
- FilePredicates.hasLanguages(Arrays.asList(langs))
+ return Lists.newArrayList((Iterable) target.inputFiles(target.predicates().and(
+ target.predicates().hasType(org.sonar.api.batch.fs.InputFile.Type.MAIN),
+ target.predicates().hasLanguages(Arrays.asList(langs))
)));
}
public List<InputFile> testFiles(String... langs) {
- return Lists.newArrayList((Iterable) target.inputFiles(FilePredicates.and(
- FilePredicates.hasType(org.sonar.api.batch.fs.InputFile.Type.TEST),
- FilePredicates.hasLanguages(Arrays.asList(langs))
+ return Lists.newArrayList((Iterable) target.inputFiles(target.predicates().and(
+ target.predicates().hasType(org.sonar.api.batch.fs.InputFile.Type.TEST),
+ target.predicates().hasLanguages(Arrays.asList(langs))
)));
}
- private static FilePredicate newHasLanguagesPredicate(Language... languages) {
+ private FilePredicate newHasLanguagesPredicate(Language... languages) {
List<FilePredicate> list = Lists.newArrayList();
for (Language language : languages) {
- list.add(FilePredicates.hasLanguage(language.getKey()));
+ list.add(target.predicates().hasLanguage(language.getKey()));
}
- return FilePredicates.or(list);
+ return target.predicates().or(list);
}
}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
index 4c477cdc6f1..594a777095d 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
@@ -26,7 +26,6 @@ import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
import org.sonar.api.CoreProperties;
-import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.config.Settings;
@@ -38,7 +37,10 @@ import java.nio.charset.Charset;
import java.util.Arrays;
import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
public class DefaultModuleFileSystemTest {
@@ -163,10 +165,10 @@ public class DefaultModuleFileSystemTest {
when(moduleInputFileCache.inputFiles()).thenReturn(Lists.newArrayList(mainInput, testInput));
fs.index();
- Iterable<InputFile> inputFiles = fs.inputFiles(FilePredicates.hasType(InputFile.Type.MAIN));
+ Iterable<InputFile> inputFiles = fs.inputFiles(fs.predicates().hasType(InputFile.Type.MAIN));
assertThat(inputFiles).containsOnly(mainInput);
- Iterable<File> files = fs.files(FilePredicates.hasType(InputFile.Type.MAIN));
+ Iterable<File> files = fs.files(fs.predicates().hasType(InputFile.Type.MAIN));
assertThat(files).containsOnly(mainFile);
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FilePredicates.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FilePredicates.java
index 10d3bf4a77b..dd9f14833ca 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FilePredicates.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FilePredicates.java
@@ -19,148 +19,67 @@
*/
package org.sonar.api.batch.fs;
-import com.google.common.collect.Lists;
-import org.sonar.api.batch.fs.internal.PathPattern;
-
import java.io.File;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.List;
/**
* Factory of {@link org.sonar.api.batch.fs.FilePredicate}
*
* @since 4.2
*/
-public class FilePredicates {
- private static final FilePredicate ALWAYS_TRUE = new AlwaysTruePredicate();
- private static final FilePredicate ALWAYS_FALSE = not(ALWAYS_TRUE);
-
- private FilePredicates() {
- // only static stuff
- }
-
+public interface FilePredicates {
/**
* Returns a predicate that always evaluates to true
*/
- public static FilePredicate all() {
- return ALWAYS_TRUE;
- }
+ FilePredicate all();
/**
* Returns a predicate that always evaluates to false
*/
- public static FilePredicate none() {
- return ALWAYS_FALSE;
- }
+ FilePredicate none();
/**
* Warning - not efficient because absolute path is not indexed yet.
*/
- public static FilePredicate hasAbsolutePath(String s) {
- return new AbsolutePathPredicate(s);
- }
+ FilePredicate hasAbsolutePath(String s);
/**
* TODO document that non-normalized path and Windows-style path are supported
*/
- public static FilePredicate hasRelativePath(String s) {
- return new RelativePathPredicate(s);
- }
-
- public static FilePredicate matchesPathPattern(String inclusionPattern) {
- return new PathPatternPredicate(PathPattern.create(inclusionPattern));
- }
-
- public static FilePredicate matchesPathPatterns(String[] inclusionPatterns) {
- if (inclusionPatterns.length == 0) {
- return ALWAYS_TRUE;
- }
- FilePredicate[] predicates = new FilePredicate[inclusionPatterns.length];
- for (int i = 0; i < inclusionPatterns.length; i++) {
- predicates[i] = new PathPatternPredicate(PathPattern.create(inclusionPatterns[i]));
- }
- return or(predicates);
- }
-
- public static FilePredicate doesNotMatchPathPattern(String exclusionPattern) {
- return not(matchesPathPattern(exclusionPattern));
- }
-
- public static FilePredicate doesNotMatchPathPatterns(String[] exclusionPatterns) {
- if (exclusionPatterns.length == 0) {
- return ALWAYS_TRUE;
- }
- return not(matchesPathPatterns(exclusionPatterns));
- }
-
- public static FilePredicate hasPath(String s) {
- File file = new File(s);
- if (file.isAbsolute()) {
- return hasAbsolutePath(s);
- }
- return hasRelativePath(s);
- }
-
- public static FilePredicate is(File ioFile) {
- if (ioFile.isAbsolute()) {
- return hasAbsolutePath(ioFile.getAbsolutePath());
- }
- return hasRelativePath(ioFile.getPath());
- }
-
- public static FilePredicate hasLanguage(String language) {
- return new LanguagePredicate(language);
- }
-
- public static FilePredicate hasLanguages(Collection<String> languages) {
- List<FilePredicate> list = Lists.newArrayList();
- for (String language : languages) {
- list.add(hasLanguage(language));
- }
- return or(list);
- }
-
- public static FilePredicate hasStatus(InputFile.Status status) {
- return new StatusPredicate(status);
- }
-
- public static FilePredicate hasType(InputFile.Type type) {
- return new TypePredicate(type);
- }
-
- public static FilePredicate not(FilePredicate p) {
- return new NotPredicate(p);
- }
-
- public static FilePredicate or(Collection<FilePredicate> or) {
- return new OrPredicate(or);
- }
-
- public static FilePredicate or(FilePredicate... or) {
- return new OrPredicate(Arrays.asList(or));
- }
-
- public static FilePredicate or(FilePredicate first, FilePredicate second) {
- return new OrPredicate(Arrays.asList(first, second));
- }
-
- public static FilePredicate and(Collection<FilePredicate> and) {
- return new AndPredicate(and);
- }
-
- public static FilePredicate and(FilePredicate... and) {
- return new AndPredicate(Arrays.asList(and));
- }
-
- public static FilePredicate and(FilePredicate first, FilePredicate second) {
- return new AndPredicate(Arrays.asList(first, second));
- }
-
- private static class AlwaysTruePredicate implements FilePredicate {
- @Override
- public boolean apply(InputFile inputFile) {
- return true;
- }
- }
+ FilePredicate hasRelativePath(String s);
+
+ FilePredicate matchesPathPattern(String inclusionPattern);
+
+ FilePredicate matchesPathPatterns(String[] inclusionPatterns);
+
+ FilePredicate doesNotMatchPathPattern(String exclusionPattern);
+
+ FilePredicate doesNotMatchPathPatterns(String[] exclusionPatterns);
+
+ FilePredicate hasPath(String s);
+
+ FilePredicate is(File ioFile);
+
+ FilePredicate hasLanguage(String language);
+
+ FilePredicate hasLanguages(Collection<String> languages);
+
+ FilePredicate hasStatus(InputFile.Status status);
+
+ FilePredicate hasType(InputFile.Type type);
+
+ FilePredicate not(FilePredicate p);
+
+ FilePredicate or(Collection<FilePredicate> or);
+
+ FilePredicate or(FilePredicate... or);
+
+ FilePredicate or(FilePredicate first, FilePredicate second);
+
+ FilePredicate and(Collection<FilePredicate> and);
+
+ FilePredicate and(FilePredicate... and);
+
+ FilePredicate and(FilePredicate first, FilePredicate second);
+
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java
index 6cd38b22911..b362d151206 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java
@@ -27,11 +27,27 @@ import java.nio.charset.Charset;
import java.util.SortedSet;
/**
- * <p>The unit tests needing an instance of FileSystem can use the implementation
- * {@link org.sonar.api.batch.fs.internal.DefaultFileSystem} and the related {@link org.sonar.api.scan.filesystem.internal.DefaultInputFile}:</p>
+ * The {@link FileSystem} manages all the source files to be analyzed.
+ * <p/>
+ * This is not an extension point so it must not be implemented by plugins. It must be injected as a
+ * constructor parameter :
* <pre>
- * DefaultFileSystem fs = new DefaultFileSystem();
- * fs.add(new DefaultInputFile("src/foo/bar.php"));
+ * public class MySensor implements Sensor {
+ * private final FileSystem fs;
+ *
+ * public MySensor(FileSystem fs) {
+ * this.fs = fs;
+ * }
+ * }
+ * </pre>
+ *
+ * <h2>How to use in unit tests</h2>
+ * The unit tests needing an instance of FileSystem can use the implementation
+ * {@link org.sonar.api.batch.fs.internal.DefaultFileSystem} and the related {@link org.sonar.api.batch.fs.internal.DefaultInputFile},
+ * for example :
+ * <pre>
+ * DefaultFileSystem fs = new DefaultFileSystem();
+ * fs.add(new DefaultInputFile("src/foo/bar.php"));
* </pre>
*
* @since 4.2
@@ -58,10 +74,15 @@ public interface FileSystem extends BatchComponent {
File workDir();
/**
+ * Factory of {@link FilePredicate}
+ */
+ FilePredicates predicates();
+
+ /**
* Returns the single element matching the predicate. If more than one elements match
* the predicate, then {@link IllegalArgumentException} is thrown. Returns {@code null}
* if no files match.
- * @see org.sonar.api.batch.fs.FilePredicates
+ * @see #predicates()
*/
@CheckForNull
InputFile inputFile(FilePredicate predicate);
@@ -73,21 +94,21 @@ public interface FileSystem extends BatchComponent {
* Important - result is an {@link java.lang.Iterable} to benefit from streaming and decreasing
* memory consumption. It should be iterated only once, else copy it into a list :
* {@code com.google.common.collect.Lists.newArrayList(inputFiles(predicate))}
- * @see org.sonar.api.batch.fs.FilePredicates
+ * @see #predicates()
*/
Iterable<InputFile> inputFiles(FilePredicate predicate);
/**
* Returns true if at least one {@link org.sonar.api.batch.fs.InputFile} matches
- * the given predicate. This method can be faster than checking if {@link #inputFiles(org.sonar.api.batch.fs.FilePredicate...)}
+ * the given predicate. This method can be faster than checking if {@link #inputFiles(org.sonar.api.batch.fs.FilePredicate)}
* has elements.
- * @see org.sonar.api.batch.fs.FilePredicates
+ * @see #predicates()
*/
boolean hasFiles(FilePredicate predicate);
/**
* Files matching the given predicate.
- * @see org.sonar.api.batch.fs.FilePredicates
+ * @see #predicates()
*/
Iterable<File> files(FilePredicate predicate);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/AbsolutePathPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AbsolutePathPredicate.java
index 35044ace5a9..8e943a0f5f8 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/AbsolutePathPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AbsolutePathPredicate.java
@@ -17,9 +17,11 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
import org.apache.commons.io.FilenameUtils;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/AndPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AndPredicate.java
index 43039ef1ca1..0494ed524dc 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/AndPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AndPredicate.java
@@ -17,7 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
import java.util.Collection;
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFilePredicates.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFilePredicates.java
new file mode 100644
index 00000000000..8eba3dd53c4
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFilePredicates.java
@@ -0,0 +1,160 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.batch.fs.internal;
+
+import com.google.common.collect.Lists;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.FilePredicates;
+import org.sonar.api.batch.fs.InputFile;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Factory of {@link org.sonar.api.batch.fs.FilePredicate}
+ *
+ * @since 4.2
+ */
+public class DefaultFilePredicates implements FilePredicates {
+ /**
+ * Client code should use {@link org.sonar.api.batch.fs.FileSystem#predicates()} to get an instance
+ */
+ DefaultFilePredicates() {
+ }
+
+ /**
+ * Returns a predicate that always evaluates to true
+ */
+ public FilePredicate all() {
+ return TruePredicate.TRUE;
+ }
+
+ /**
+ * Returns a predicate that always evaluates to false
+ */
+ public FilePredicate none() {
+ return FalsePredicate.FALSE;
+ }
+
+ /**
+ * Warning - not efficient because absolute path is not indexed yet.
+ */
+ public FilePredicate hasAbsolutePath(String s) {
+ return new AbsolutePathPredicate(s);
+ }
+
+ /**
+ * TODO document that non-normalized path and Windows-style path are supported
+ */
+ public FilePredicate hasRelativePath(String s) {
+ return new RelativePathPredicate(s);
+ }
+
+ public FilePredicate matchesPathPattern(String inclusionPattern) {
+ return new PathPatternPredicate(PathPattern.create(inclusionPattern));
+ }
+
+ public FilePredicate matchesPathPatterns(String[] inclusionPatterns) {
+ if (inclusionPatterns.length == 0) {
+ return TruePredicate.TRUE;
+ }
+ FilePredicate[] predicates = new FilePredicate[inclusionPatterns.length];
+ for (int i = 0; i < inclusionPatterns.length; i++) {
+ predicates[i] = new PathPatternPredicate(PathPattern.create(inclusionPatterns[i]));
+ }
+ return or(predicates);
+ }
+
+ public FilePredicate doesNotMatchPathPattern(String exclusionPattern) {
+ return not(matchesPathPattern(exclusionPattern));
+ }
+
+ public FilePredicate doesNotMatchPathPatterns(String[] exclusionPatterns) {
+ if (exclusionPatterns.length == 0) {
+ return TruePredicate.TRUE;
+ }
+ return not(matchesPathPatterns(exclusionPatterns));
+ }
+
+ public FilePredicate hasPath(String s) {
+ File file = new File(s);
+ if (file.isAbsolute()) {
+ return hasAbsolutePath(s);
+ }
+ return hasRelativePath(s);
+ }
+
+ public FilePredicate is(File ioFile) {
+ if (ioFile.isAbsolute()) {
+ return hasAbsolutePath(ioFile.getAbsolutePath());
+ }
+ return hasRelativePath(ioFile.getPath());
+ }
+
+ public FilePredicate hasLanguage(String language) {
+ return new LanguagePredicate(language);
+ }
+
+ public FilePredicate hasLanguages(Collection<String> languages) {
+ List<FilePredicate> list = Lists.newArrayList();
+ for (String language : languages) {
+ list.add(hasLanguage(language));
+ }
+ return or(list);
+ }
+
+ public FilePredicate hasStatus(InputFile.Status status) {
+ return new StatusPredicate(status);
+ }
+
+ public FilePredicate hasType(InputFile.Type type) {
+ return new TypePredicate(type);
+ }
+
+ public FilePredicate not(FilePredicate p) {
+ return new NotPredicate(p);
+ }
+
+ public FilePredicate or(Collection<FilePredicate> or) {
+ return new OrPredicate(or);
+ }
+
+ public FilePredicate or(FilePredicate... or) {
+ return new OrPredicate(Arrays.asList(or));
+ }
+
+ public FilePredicate or(FilePredicate first, FilePredicate second) {
+ return new OrPredicate(Arrays.asList(first, second));
+ }
+
+ public FilePredicate and(Collection<FilePredicate> and) {
+ return new AndPredicate(and);
+ }
+
+ public FilePredicate and(FilePredicate... and) {
+ return new AndPredicate(Arrays.asList(and));
+ }
+
+ public FilePredicate and(FilePredicate first, FilePredicate second) {
+ return new AndPredicate(Arrays.asList(first, second));
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFileSystem.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFileSystem.java
index f1f80bb93c8..3a97f46f757 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFileSystem.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFileSystem.java
@@ -27,14 +27,15 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.UniqueIndexPredicate;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import java.io.File;
import java.nio.charset.Charset;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -49,6 +50,7 @@ public class DefaultFileSystem implements FileSystem {
private final SortedSet<String> languages = Sets.newTreeSet();
private File baseDir, workDir;
private Charset encoding;
+ private final FilePredicates predicates = new DefaultFilePredicates();
/**
* Only for testing
@@ -151,9 +153,7 @@ public class DefaultFileSystem implements FileSystem {
*/
public DefaultFileSystem addLanguages(String language, String... others) {
languages.add(language);
- for (String other : others) {
- languages.add(other);
- }
+ Collections.addAll(languages, others);
return this;
}
@@ -163,6 +163,11 @@ public class DefaultFileSystem implements FileSystem {
return languages;
}
+ @Override
+ public FilePredicates predicates() {
+ return predicates;
+ }
+
/**
* This method is called before each search of files.
*/
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FalsePredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FalsePredicate.java
new file mode 100644
index 00000000000..f495049961e
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FalsePredicate.java
@@ -0,0 +1,33 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
+
+class FalsePredicate implements FilePredicate {
+
+ static final FilePredicate FALSE = new FalsePredicate();
+
+ @Override
+ public boolean apply(InputFile inputFile) {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/LanguagePredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/LanguagePredicate.java
index 2483ba03aa2..77d2f74887a 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/LanguagePredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/LanguagePredicate.java
@@ -17,7 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/NotPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/NotPredicate.java
index e875ca19ea3..5f2359ee166 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/NotPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/NotPredicate.java
@@ -17,7 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/OrPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/OrPredicate.java
index e80f9cd16ee..aa442fbb3b8 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/OrPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/OrPredicate.java
@@ -17,7 +17,11 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.FilePredicates;
+import org.sonar.api.batch.fs.InputFile;
import java.util.Arrays;
import java.util.Collection;
@@ -31,7 +35,7 @@ class OrPredicate implements FilePredicate {
OrPredicate(Collection<FilePredicate> predicates) {
if (predicates.isEmpty()) {
- this.predicates = Arrays.asList(FilePredicates.all());
+ this.predicates = Arrays.asList(TruePredicate.TRUE);
} else {
this.predicates = predicates;
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/PathPatternPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/PathPatternPredicate.java
index c01c8db94d7..c2402a43cfe 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/PathPatternPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/PathPatternPredicate.java
@@ -17,8 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.PathPattern;
/**
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/RelativePathPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/RelativePathPredicate.java
index fb224f65933..22aed6e09a5 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/RelativePathPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/RelativePathPredicate.java
@@ -17,10 +17,11 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
import org.apache.commons.io.FilenameUtils;
-import org.sonar.api.batch.fs.internal.RelativePathIndex;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/StatusPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/StatusPredicate.java
index fd0400cd9b5..fe7c934071e 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/StatusPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/StatusPredicate.java
@@ -17,7 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TruePredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TruePredicate.java
new file mode 100644
index 00000000000..b8d9ef30dbf
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TruePredicate.java
@@ -0,0 +1,33 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
+
+class TruePredicate implements FilePredicate {
+
+ static final FilePredicate TRUE = new TruePredicate();
+
+ @Override
+ public boolean apply(InputFile inputFile) {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/TypePredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TypePredicate.java
index cb7297dcd9a..ac8b6d5fe8d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/TypePredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/TypePredicate.java
@@ -17,7 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
+
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/UniqueIndexPredicate.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/UniqueIndexPredicate.java
index 7dd9bf38034..8b7404d2571 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/UniqueIndexPredicate.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/UniqueIndexPredicate.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.api.batch.fs;
+package org.sonar.api.batch.fs.internal;
/**
* @since 4.2
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/FilePredicatesTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/FilePredicatesTest.java
deleted file mode 100644
index 8ed8c4e97d0..00000000000
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/FilePredicatesTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.api.batch.fs;
-
-import org.apache.commons.io.FilenameUtils;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class FilePredicatesTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- DefaultInputFile javaFile;
-
- @Before
- public void before() throws IOException {
- javaFile = new DefaultInputFile("src/main/java/struts/Action.java")
- .setFile(temp.newFile("Action.java"))
- .setLanguage("java")
- .setStatus(InputFile.Status.ADDED);
- }
-
- @Test
- public void all() throws Exception {
- assertThat(FilePredicates.all().apply(javaFile)).isTrue();
- }
-
- @Test
- public void none() throws Exception {
- assertThat(FilePredicates.none().apply(javaFile)).isFalse();
- }
-
- @Test
- public void matches_inclusion_pattern() throws Exception {
- assertThat(FilePredicates.matchesPathPattern("src/main/**/Action.java").apply(javaFile)).isTrue();
- assertThat(FilePredicates.matchesPathPattern("Action.java").apply(javaFile)).isFalse();
- assertThat(FilePredicates.matchesPathPattern("src/**/*.php").apply(javaFile)).isFalse();
- }
-
- @Test
- public void matches_inclusion_patterns() throws Exception {
- assertThat(FilePredicates.matchesPathPatterns(new String[]{"src/other/**.java", "src/main/**/Action.java"}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.matchesPathPatterns(new String[]{}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.matchesPathPatterns(new String[]{"src/other/**.java", "src/**/*.php"}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void does_not_match_exclusion_pattern() throws Exception {
- assertThat(FilePredicates.doesNotMatchPathPattern("src/main/**/Action.java").apply(javaFile)).isFalse();
- assertThat(FilePredicates.doesNotMatchPathPattern("Action.java").apply(javaFile)).isTrue();
- assertThat(FilePredicates.doesNotMatchPathPattern("src/**/*.php").apply(javaFile)).isTrue();
- }
-
- @Test
- public void does_not_match_exclusion_patterns() throws Exception {
- assertThat(FilePredicates.doesNotMatchPathPatterns(new String[]{}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.doesNotMatchPathPatterns(new String[]{"src/other/**.java", "src/**/*.php"}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.doesNotMatchPathPatterns(new String[]{"src/other/**.java", "src/main/**/Action.java"}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_relative_path() throws Exception {
- assertThat(FilePredicates.hasRelativePath("src/main/java/struts/Action.java").apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasRelativePath("src/main/java/struts/Other.java").apply(javaFile)).isFalse();
-
- // path is normalized
- assertThat(FilePredicates.hasRelativePath("src/main/java/../java/struts/Action.java").apply(javaFile)).isTrue();
-
- assertThat(FilePredicates.hasRelativePath("src\\main\\java\\struts\\Action.java").apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasRelativePath("src\\main\\java\\struts\\Other.java").apply(javaFile)).isFalse();
- assertThat(FilePredicates.hasRelativePath("src\\main\\java\\struts\\..\\struts\\Action.java").apply(javaFile)).isTrue();
- }
-
- @Test
- public void has_absolute_path() throws Exception {
- String path = javaFile.file().getAbsolutePath();
- assertThat(FilePredicates.hasAbsolutePath(path).apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasAbsolutePath(FilenameUtils.separatorsToWindows(path)).apply(javaFile)).isTrue();
-
- assertThat(FilePredicates.hasAbsolutePath(temp.newFile().getAbsolutePath()).apply(javaFile)).isFalse();
- assertThat(FilePredicates.hasAbsolutePath("src/main/java/struts/Action.java").apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_path() throws Exception {
- // is relative path
- assertThat(FilePredicates.hasPath("src/main/java/struts/Action.java").apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasPath("src/main/java/struts/Other.java").apply(javaFile)).isFalse();
-
- // is absolute path
- String path = javaFile.file().getAbsolutePath();
- assertThat(FilePredicates.hasAbsolutePath(path).apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasPath(temp.newFile().getAbsolutePath()).apply(javaFile)).isFalse();
- }
-
- @Test
- public void is_file() throws Exception {
- // relative file
- assertThat(FilePredicates.is(new File(javaFile.relativePath())).apply(javaFile)).isTrue();
-
-
- // absolute file
- assertThat(FilePredicates.is(javaFile.file()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.is(javaFile.file().getAbsoluteFile()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.is(javaFile.file().getCanonicalFile()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.is(new File(javaFile.file().toURI())).apply(javaFile)).isTrue();
- assertThat(FilePredicates.is(temp.newFile()).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_language() throws Exception {
- assertThat(FilePredicates.hasLanguage("java").apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasLanguage("php").apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_languages() throws Exception {
- assertThat(FilePredicates.hasLanguages(Arrays.asList("java", "php")).apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasLanguages(Arrays.asList("cobol", "php")).apply(javaFile)).isFalse();
- assertThat(FilePredicates.hasLanguages(Collections.<String>emptyList()).apply(javaFile)).isTrue();
- }
-
- @Test
- public void has_status() throws Exception {
- assertThat(FilePredicates.hasStatus(InputFile.Status.ADDED).apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasStatus(InputFile.Status.CHANGED).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_type() throws Exception {
- assertThat(FilePredicates.hasType(InputFile.Type.MAIN).apply(javaFile)).isTrue();
- assertThat(FilePredicates.hasType(InputFile.Type.TEST).apply(javaFile)).isFalse();
- }
-
- @Test
- public void not() throws Exception {
- assertThat(FilePredicates.not(FilePredicates.hasType(InputFile.Type.MAIN)).apply(javaFile)).isFalse();
- assertThat(FilePredicates.not(FilePredicates.hasType(InputFile.Type.TEST)).apply(javaFile)).isTrue();
- }
-
- @Test
- public void and() throws Exception {
- // empty
- assertThat(FilePredicates.and().apply(javaFile)).isTrue();
- assertThat(FilePredicates.and(new FilePredicate[0]).apply(javaFile)).isTrue();
- assertThat(FilePredicates.and(Collections.<FilePredicate>emptyList()).apply(javaFile)).isTrue();
-
- // two arguments
- assertThat(FilePredicates.and(FilePredicates.all(), FilePredicates.all()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.and(FilePredicates.all(), FilePredicates.none()).apply(javaFile)).isFalse();
- assertThat(FilePredicates.and(FilePredicates.none(), FilePredicates.all()).apply(javaFile)).isFalse();
-
- // collection
- assertThat(FilePredicates.and(Arrays.asList(FilePredicates.all(), FilePredicates.all())).apply(javaFile)).isTrue();
- assertThat(FilePredicates.and(Arrays.asList(FilePredicates.all(), FilePredicates.none())).apply(javaFile)).isFalse();
-
- // array
- assertThat(FilePredicates.and(new FilePredicate[]{FilePredicates.all(), FilePredicates.all()}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.and(new FilePredicate[]{FilePredicates.all(), FilePredicates.none()}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void or() throws Exception {
- // empty
- assertThat(FilePredicates.or().apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(new FilePredicate[0]).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(Collections.<FilePredicate>emptyList()).apply(javaFile)).isTrue();
-
- // two arguments
- assertThat(FilePredicates.or(FilePredicates.all(), FilePredicates.all()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(FilePredicates.all(), FilePredicates.none()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(FilePredicates.none(), FilePredicates.all()).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(FilePredicates.none(), FilePredicates.none()).apply(javaFile)).isFalse();
-
- // collection
- assertThat(FilePredicates.or(Arrays.asList(FilePredicates.all(), FilePredicates.all())).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(Arrays.asList(FilePredicates.all(), FilePredicates.none())).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(Arrays.asList(FilePredicates.none(), FilePredicates.none())).apply(javaFile)).isFalse();
-
- // array
- assertThat(FilePredicates.or(new FilePredicate[]{FilePredicates.all(), FilePredicates.all()}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(new FilePredicate[]{FilePredicates.all(), FilePredicates.none()}).apply(javaFile)).isTrue();
- assertThat(FilePredicates.or(new FilePredicate[]{FilePredicates.none(), FilePredicates.none()}).apply(javaFile)).isFalse();
- }
-}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFilePredicatesTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFilePredicatesTest.java
new file mode 100644
index 00000000000..d2ad8211f0a
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFilePredicatesTest.java
@@ -0,0 +1,217 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.batch.fs.internal;
+
+import org.apache.commons.io.FilenameUtils;
+import org.fest.assertions.Assertions;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.FilePredicates;
+import org.sonar.api.batch.fs.InputFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class DefaultFilePredicatesTest {
+
+ @Rule
+ public TemporaryFolder temp = new TemporaryFolder();
+
+ DefaultInputFile javaFile;
+ FilePredicates predicates = new DefaultFilePredicates();
+
+ @Before
+ public void before() throws IOException {
+ javaFile = new DefaultInputFile("src/main/java/struts/Action.java")
+ .setFile(temp.newFile("Action.java"))
+ .setLanguage("java")
+ .setStatus(InputFile.Status.ADDED);
+ }
+
+ @Test
+ public void all() throws Exception {
+ Assertions.assertThat(predicates.all().apply(javaFile)).isTrue();
+ }
+
+ @Test
+ public void none() throws Exception {
+ assertThat(predicates.none().apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void matches_inclusion_pattern() throws Exception {
+ assertThat(predicates.matchesPathPattern("src/main/**/Action.java").apply(javaFile)).isTrue();
+ assertThat(predicates.matchesPathPattern("Action.java").apply(javaFile)).isFalse();
+ assertThat(predicates.matchesPathPattern("src/**/*.php").apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void matches_inclusion_patterns() throws Exception {
+ assertThat(predicates.matchesPathPatterns(new String[]{"src/other/**.java", "src/main/**/Action.java"}).apply(javaFile)).isTrue();
+ assertThat(predicates.matchesPathPatterns(new String[]{}).apply(javaFile)).isTrue();
+ assertThat(predicates.matchesPathPatterns(new String[]{"src/other/**.java", "src/**/*.php"}).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void does_not_match_exclusion_pattern() throws Exception {
+ assertThat(predicates.doesNotMatchPathPattern("src/main/**/Action.java").apply(javaFile)).isFalse();
+ assertThat(predicates.doesNotMatchPathPattern("Action.java").apply(javaFile)).isTrue();
+ assertThat(predicates.doesNotMatchPathPattern("src/**/*.php").apply(javaFile)).isTrue();
+ }
+
+ @Test
+ public void does_not_match_exclusion_patterns() throws Exception {
+ assertThat(predicates.doesNotMatchPathPatterns(new String[]{}).apply(javaFile)).isTrue();
+ assertThat(predicates.doesNotMatchPathPatterns(new String[]{"src/other/**.java", "src/**/*.php"}).apply(javaFile)).isTrue();
+ assertThat(predicates.doesNotMatchPathPatterns(new String[]{"src/other/**.java", "src/main/**/Action.java"}).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void has_relative_path() throws Exception {
+ assertThat(predicates.hasRelativePath("src/main/java/struts/Action.java").apply(javaFile)).isTrue();
+ assertThat(predicates.hasRelativePath("src/main/java/struts/Other.java").apply(javaFile)).isFalse();
+
+ // path is normalized
+ assertThat(predicates.hasRelativePath("src/main/java/../java/struts/Action.java").apply(javaFile)).isTrue();
+
+ assertThat(predicates.hasRelativePath("src\\main\\java\\struts\\Action.java").apply(javaFile)).isTrue();
+ assertThat(predicates.hasRelativePath("src\\main\\java\\struts\\Other.java").apply(javaFile)).isFalse();
+ assertThat(predicates.hasRelativePath("src\\main\\java\\struts\\..\\struts\\Action.java").apply(javaFile)).isTrue();
+ }
+
+ @Test
+ public void has_absolute_path() throws Exception {
+ String path = javaFile.file().getAbsolutePath();
+ assertThat(predicates.hasAbsolutePath(path).apply(javaFile)).isTrue();
+ assertThat(predicates.hasAbsolutePath(FilenameUtils.separatorsToWindows(path)).apply(javaFile)).isTrue();
+
+ assertThat(predicates.hasAbsolutePath(temp.newFile().getAbsolutePath()).apply(javaFile)).isFalse();
+ assertThat(predicates.hasAbsolutePath("src/main/java/struts/Action.java").apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void has_path() throws Exception {
+ // is relative path
+ assertThat(predicates.hasPath("src/main/java/struts/Action.java").apply(javaFile)).isTrue();
+ assertThat(predicates.hasPath("src/main/java/struts/Other.java").apply(javaFile)).isFalse();
+
+ // is absolute path
+ String path = javaFile.file().getAbsolutePath();
+ assertThat(predicates.hasAbsolutePath(path).apply(javaFile)).isTrue();
+ assertThat(predicates.hasPath(temp.newFile().getAbsolutePath()).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void is_file() throws Exception {
+ // relative file
+ assertThat(predicates.is(new File(javaFile.relativePath())).apply(javaFile)).isTrue();
+
+
+ // absolute file
+ assertThat(predicates.is(javaFile.file()).apply(javaFile)).isTrue();
+ assertThat(predicates.is(javaFile.file().getAbsoluteFile()).apply(javaFile)).isTrue();
+ assertThat(predicates.is(javaFile.file().getCanonicalFile()).apply(javaFile)).isTrue();
+ assertThat(predicates.is(new File(javaFile.file().toURI())).apply(javaFile)).isTrue();
+ assertThat(predicates.is(temp.newFile()).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void has_language() throws Exception {
+ assertThat(predicates.hasLanguage("java").apply(javaFile)).isTrue();
+ assertThat(predicates.hasLanguage("php").apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void has_languages() throws Exception {
+ assertThat(predicates.hasLanguages(Arrays.asList("java", "php")).apply(javaFile)).isTrue();
+ assertThat(predicates.hasLanguages(Arrays.asList("cobol", "php")).apply(javaFile)).isFalse();
+ assertThat(predicates.hasLanguages(Collections.<String>emptyList()).apply(javaFile)).isTrue();
+ }
+
+ @Test
+ public void has_status() throws Exception {
+ assertThat(predicates.hasStatus(InputFile.Status.ADDED).apply(javaFile)).isTrue();
+ assertThat(predicates.hasStatus(InputFile.Status.CHANGED).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void has_type() throws Exception {
+ assertThat(predicates.hasType(InputFile.Type.MAIN).apply(javaFile)).isTrue();
+ assertThat(predicates.hasType(InputFile.Type.TEST).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void not() throws Exception {
+ assertThat(predicates.not(predicates.hasType(InputFile.Type.MAIN)).apply(javaFile)).isFalse();
+ assertThat(predicates.not(predicates.hasType(InputFile.Type.TEST)).apply(javaFile)).isTrue();
+ }
+
+ @Test
+ public void and() throws Exception {
+ // empty
+ assertThat(predicates.and().apply(javaFile)).isTrue();
+ assertThat(predicates.and(new FilePredicate[0]).apply(javaFile)).isTrue();
+ assertThat(predicates.and(Collections.<FilePredicate>emptyList()).apply(javaFile)).isTrue();
+
+ // two arguments
+ assertThat(predicates.and(predicates.all(), predicates.all()).apply(javaFile)).isTrue();
+ assertThat(predicates.and(predicates.all(), predicates.none()).apply(javaFile)).isFalse();
+ assertThat(predicates.and(predicates.none(), predicates.all()).apply(javaFile)).isFalse();
+
+ // collection
+ assertThat(predicates.and(Arrays.asList(predicates.all(), predicates.all())).apply(javaFile)).isTrue();
+ assertThat(predicates.and(Arrays.asList(predicates.all(), predicates.none())).apply(javaFile)).isFalse();
+
+ // array
+ assertThat(predicates.and(new FilePredicate[]{predicates.all(), predicates.all()}).apply(javaFile)).isTrue();
+ assertThat(predicates.and(new FilePredicate[]{predicates.all(), predicates.none()}).apply(javaFile)).isFalse();
+ }
+
+ @Test
+ public void or() throws Exception {
+ // empty
+ assertThat(predicates.or().apply(javaFile)).isTrue();
+ assertThat(predicates.or(new FilePredicate[0]).apply(javaFile)).isTrue();
+ assertThat(predicates.or(Collections.<FilePredicate>emptyList()).apply(javaFile)).isTrue();
+
+ // two arguments
+ assertThat(predicates.or(predicates.all(), predicates.all()).apply(javaFile)).isTrue();
+ assertThat(predicates.or(predicates.all(), predicates.none()).apply(javaFile)).isTrue();
+ assertThat(predicates.or(predicates.none(), predicates.all()).apply(javaFile)).isTrue();
+ assertThat(predicates.or(predicates.none(), predicates.none()).apply(javaFile)).isFalse();
+
+ // collection
+ assertThat(predicates.or(Arrays.asList(predicates.all(), predicates.all())).apply(javaFile)).isTrue();
+ assertThat(predicates.or(Arrays.asList(predicates.all(), predicates.none())).apply(javaFile)).isTrue();
+ assertThat(predicates.or(Arrays.asList(predicates.none(), predicates.none())).apply(javaFile)).isFalse();
+
+ // array
+ assertThat(predicates.or(new FilePredicate[]{predicates.all(), predicates.all()}).apply(javaFile)).isTrue();
+ assertThat(predicates.or(new FilePredicate[]{predicates.all(), predicates.none()}).apply(javaFile)).isTrue();
+ assertThat(predicates.or(new FilePredicate[]{predicates.none(), predicates.none()}).apply(javaFile)).isFalse();
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFileSystemTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFileSystemTest.java
index d8debd649eb..aa898e908c5 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFileSystemTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultFileSystemTest.java
@@ -24,7 +24,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.FilePredicates;
import java.io.File;
import java.nio.charset.Charset;
@@ -80,7 +79,7 @@ public class DefaultFileSystemTest {
public void files() throws Exception {
DefaultFileSystem fs = new DefaultFileSystem();
- assertThat(fs.inputFiles(FilePredicates.all())).isEmpty();
+ assertThat(fs.inputFiles(fs.predicates().all())).isEmpty();
fs.add(new DefaultInputFile("src/Foo.php").setLanguage("php").setFile(temp.newFile()));
fs.add(new DefaultInputFile("src/Bar.java").setLanguage("java").setFile(temp.newFile()));
@@ -89,21 +88,21 @@ public class DefaultFileSystemTest {
// no language
fs.add(new DefaultInputFile("src/readme.txt").setFile(temp.newFile()));
- assertThat(fs.inputFile(FilePredicates.hasRelativePath("src/Bar.java"))).isNotNull();
- assertThat(fs.inputFile(FilePredicates.hasRelativePath("does/not/exist"))).isNull();
+ assertThat(fs.inputFile(fs.predicates().hasRelativePath("src/Bar.java"))).isNotNull();
+ assertThat(fs.inputFile(fs.predicates().hasRelativePath("does/not/exist"))).isNull();
- assertThat(fs.files(FilePredicates.all())).hasSize(4);
- assertThat(fs.files(FilePredicates.hasLanguage("java"))).hasSize(2);
- assertThat(fs.files(FilePredicates.hasLanguage("cobol"))).isEmpty();
+ assertThat(fs.files(fs.predicates().all())).hasSize(4);
+ assertThat(fs.files(fs.predicates().hasLanguage("java"))).hasSize(2);
+ assertThat(fs.files(fs.predicates().hasLanguage("cobol"))).isEmpty();
- assertThat(fs.hasFiles(FilePredicates.all())).isTrue();
- assertThat(fs.hasFiles(FilePredicates.hasLanguage("java"))).isTrue();
- assertThat(fs.hasFiles(FilePredicates.hasLanguage("cobol"))).isFalse();
+ assertThat(fs.hasFiles(fs.predicates().all())).isTrue();
+ assertThat(fs.hasFiles(fs.predicates().hasLanguage("java"))).isTrue();
+ assertThat(fs.hasFiles(fs.predicates().hasLanguage("cobol"))).isFalse();
- assertThat(fs.inputFiles(FilePredicates.all())).hasSize(4);
- assertThat(fs.inputFiles(FilePredicates.hasLanguage("php"))).hasSize(1);
- assertThat(fs.inputFiles(FilePredicates.hasLanguage("java"))).hasSize(2);
- assertThat(fs.inputFiles(FilePredicates.hasLanguage("cobol"))).isEmpty();
+ assertThat(fs.inputFiles(fs.predicates().all())).hasSize(4);
+ assertThat(fs.inputFiles(fs.predicates().hasLanguage("php"))).hasSize(1);
+ assertThat(fs.inputFiles(fs.predicates().hasLanguage("java"))).hasSize(2);
+ assertThat(fs.inputFiles(fs.predicates().hasLanguage("cobol"))).isEmpty();
assertThat(fs.languages()).containsOnly("java", "php");
}
@@ -111,7 +110,8 @@ public class DefaultFileSystemTest {
@Test
public void input_file_returns_null_if_file_not_found() throws Exception {
DefaultFileSystem fs = new DefaultFileSystem();
- assertThat(fs.inputFile(FilePredicates.hasRelativePath("src/Bar.java"))).isNull();
+ assertThat(fs.inputFile(fs.predicates().hasRelativePath("src/Bar.java"))).isNull();
+ assertThat(fs.inputFile(fs.predicates().hasLanguage("cobol"))).isNull();
}
@Test
@@ -123,7 +123,7 @@ public class DefaultFileSystemTest {
fs.add(new DefaultInputFile("src/Bar.java").setLanguage("java").setFile(temp.newFile()));
fs.add(new DefaultInputFile("src/Baz.java").setLanguage("java").setFile(temp.newFile()));
- fs.inputFile(FilePredicates.all());
+ fs.inputFile(fs.predicates().all());
}
@Test
@@ -132,6 +132,6 @@ public class DefaultFileSystemTest {
fs.add(new DefaultInputFile("src/Bar.java").setLanguage("java").setFile(temp.newFile()));
// it would fail if more than one java file
- assertThat(fs.inputFile(FilePredicates.hasLanguage("java"))).isNotNull();
+ assertThat(fs.inputFile(fs.predicates().hasLanguage("java"))).isNotNull();
}
}