]> source.dussan.org Git - sonarqube.git/commitdiff
Remove unused classes
authorSimon Brandhof <simon.brandhof@gmail.com>
Mon, 24 Feb 2014 21:58:22 +0000 (22:58 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Wed, 26 Feb 2014 11:15:58 +0000 (12:15 +0100)
17 files changed:
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AdditionalFilePredicates.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FilePredicateAdapters.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InputFileBuilder.java
sonar-batch/src/test/java/org/sonar/batch/index/MeasurePersisterTest.java
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AdditionalFilePredicatesTest.java [new file with mode: 0644]
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java [deleted file]
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFiltersTest.java
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileSystemLoggerTest.java [deleted file]
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java [deleted file]
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileBuilderTest.java
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/PathPattern.java

diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AdditionalFilePredicates.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AdditionalFilePredicates.java
new file mode 100644 (file)
index 0000000..41f7efc
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * 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.batch.scan.filesystem;
+
+import org.apache.commons.io.FilenameUtils;
+import org.sonar.api.batch.fs.FilePredicate;
+import org.sonar.api.batch.fs.InputFile;
+import org.sonar.api.batch.fs.internal.DefaultInputFile;
+
+/**
+ * Additional {@link org.sonar.api.batch.fs.FilePredicate}s that are
+ * not published in public API
+ */
+class AdditionalFilePredicates {
+
+  private AdditionalFilePredicates() {
+    // only static inner classes
+  }
+
+  static class KeyPredicate implements FilePredicate {
+    private final String key;
+
+    KeyPredicate(String key) {
+      this.key = key;
+    }
+
+    @Override
+    public boolean apply(InputFile f) {
+      return key.equals(((DefaultInputFile) f).key());
+    }
+  }
+
+  static class DeprecatedKeyPredicate implements FilePredicate {
+    private final String key;
+
+    DeprecatedKeyPredicate(String key) {
+      this.key = key;
+    }
+
+    @Override
+    public boolean apply(InputFile f) {
+      return key.equals(((DefaultInputFile) f).deprecatedKey());
+    }
+  }
+
+  static class SourceRelativePathPredicate implements FilePredicate {
+    private final String path;
+
+    SourceRelativePathPredicate(String s) {
+      this.path = FilenameUtils.normalize(s, true);
+    }
+
+    @Override
+    public boolean apply(InputFile f) {
+      return path.equals(((DefaultInputFile) f).pathRelativeToSourceDir());
+    }
+  }
+
+  static class SourceDirPredicate implements FilePredicate {
+    private final String path;
+
+    SourceDirPredicate(String s) {
+      this.path = FilenameUtils.normalize(s, true);
+    }
+
+    @Override
+    public boolean apply(InputFile f) {
+      return path.equals(((DefaultInputFile) f).sourceDirAbsolutePath());
+    }
+  }
+}
index d3ef6c52cf6832f9b8283cb2aa30e9687b95c7d7..67c194ab0c4b770b4655a91bb6e5d8a566e0083b 100644 (file)
@@ -259,7 +259,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
       return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
         @Override
         public FilePredicate apply(@Nullable String s) {
-          return s == null ? FilePredicates.all() : new FilePredicateAdapters.KeyPredicate(s);
+          return s == null ? FilePredicates.all() : new AdditionalFilePredicates.KeyPredicate(s);
         }
       }));
     }
@@ -267,7 +267,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
       return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
         @Override
         public FilePredicate apply(@Nullable String s) {
-          return s == null ? FilePredicates.all() : new FilePredicateAdapters.DeprecatedKeyPredicate(s);
+          return s == null ? FilePredicates.all() : new AdditionalFilePredicates.DeprecatedKeyPredicate(s);
         }
       }));
     }
@@ -275,7 +275,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
       return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
         @Override
         public FilePredicate apply(@Nullable String s) {
-          return s == null ? FilePredicates.all() : new FilePredicateAdapters.SourceRelativePathPredicate(s);
+          return s == null ? FilePredicates.all() : new AdditionalFilePredicates.SourceRelativePathPredicate(s);
         }
       }));
     }
@@ -283,7 +283,7 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
       return FilePredicates.or(Collections2.transform(value, new Function<String, FilePredicate>() {
         @Override
         public FilePredicate apply(@Nullable String s) {
-          return s == null ? FilePredicates.all() : new FilePredicateAdapters.SourceDirPredicate(s);
+          return s == null ? FilePredicates.all() : new AdditionalFilePredicates.SourceDirPredicate(s);
         }
       }));
     }
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java
deleted file mode 100644 (file)
index e9ec379..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.batch.scan.filesystem;
-
-
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.InputFileFilter;
-import org.sonar.api.batch.fs.internal.PathPattern;
-
-class ExclusionFilter implements InputFileFilter {
-  private final PathPattern pattern;
-
-  ExclusionFilter(String s) {
-    this.pattern = PathPattern.create(s);
-  }
-
-  @Override
-  public boolean accept(InputFile inputFile) {
-    return !pattern.match(inputFile);
-  }
-
-  @Override
-  public String toString() {
-    return "Excludes: " + pattern;
-  }
-}
index 50acca5c07499bd64963038c11f81830b94168ee..68a75c21cab5ba709d13267dc9b693af9e407658 100644 (file)
@@ -65,7 +65,7 @@ public class ExclusionFilters implements BatchComponent {
     }
   }
 
-  public boolean accept(File ioFile, String relativePathFromBasedir, InputFile.Type type) {
+  public boolean accept(InputFile inputFile, InputFile.Type type) {
     PathPattern[] inclusionPatterns = null;
     PathPattern[] exclusionPatterns = null;
     if (InputFile.Type.MAIN==type) {
@@ -78,7 +78,7 @@ public class ExclusionFilters implements BatchComponent {
     boolean matchInclusion = false;
     if (inclusionPatterns != null && inclusionPatterns.length > 0) {
       for (PathPattern pattern : inclusionPatterns) {
-        matchInclusion |= pattern.match(ioFile, relativePathFromBasedir);
+        matchInclusion |= pattern.match(inputFile);
       }
       if (!matchInclusion) {
         return false;
@@ -86,7 +86,7 @@ public class ExclusionFilters implements BatchComponent {
     }
     if (exclusionPatterns != null && exclusionPatterns.length > 0) {
       for (PathPattern pattern : exclusionPatterns) {
-        if (pattern.match(ioFile, relativePathFromBasedir)) {
+        if (pattern.match(inputFile)) {
           return false;
         }
       }
index 7ad6bc131431d2081b0d0f1e971984f7f7f8ede8..c0f0e4a3aa00c9f9928bf6c7d0e6b2379194ec3a 100644 (file)
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 import org.sonar.api.BatchComponent;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.InputFileFilter;
+import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.scan.filesystem.PathResolver;
 import org.sonar.api.utils.SonarException;
@@ -73,7 +74,6 @@ public class FileIndexer implements BatchComponent {
     }
     logger.info("Index files");
     exclusionFilters.prepare(fileSystem);
-    // TODO log configuration too (replace FileSystemLogger)
 
     Progress progress = new Progress(fileCache.byModule(fileSystem.moduleKey()));
 
@@ -98,15 +98,9 @@ public class FileIndexer implements BatchComponent {
 
   private void indexFiles(InputFileBuilder inputFileBuilder, DefaultModuleFileSystem fileSystem, Progress progress, List<File> sourceFiles, InputFile.Type type) {
     for (File sourceFile : sourceFiles) {
-      String path = pathResolver.relativePath(fileSystem.baseDir(), sourceFile);
-      if (path == null) {
-        LoggerFactory.getLogger(getClass()).warn(String.format(
-          FILE_IS_NOT_DECLARED_IN_MODULE_BASEDIR, sourceFile.getAbsoluteFile(), fileSystem.baseDir()
-          ));
-      } else {
-        if (exclusionFilters.accept(sourceFile, path, type)) {
-          indexFile(inputFileBuilder, fileSystem, progress, sourceFile, path, type);
-        }
+      DefaultInputFile inputFile = inputFileBuilder.create(sourceFile);
+      if (inputFile != null && exclusionFilters.accept(inputFile, type)) {
+        indexFile(inputFileBuilder, fileSystem, progress, inputFile, type);
       }
     }
   }
@@ -114,24 +108,21 @@ public class FileIndexer implements BatchComponent {
   private void indexDirectory(InputFileBuilder inputFileBuilder, DefaultModuleFileSystem fileSystem, Progress status, File dirToIndex) {
     Collection<File> files = FileUtils.listFiles(dirToIndex, FILE_FILTER, DIR_FILTER);
     for (File sourceFile : files) {
-      String path = pathResolver.relativePath(fileSystem.baseDir(), sourceFile);
-      if (path == null) {
-        LoggerFactory.getLogger(getClass()).warn(String.format(
-          FILE_IS_NOT_DECLARED_IN_MODULE_BASEDIR, sourceFile.getAbsoluteFile(), fileSystem.baseDir()
-          ));
-      } else {
-        if (exclusionFilters.accept(sourceFile, path, InputFile.Type.MAIN)) {
-          indexFile(inputFileBuilder, fileSystem, status, sourceFile, path, InputFile.Type.MAIN);
+      DefaultInputFile inputFile = inputFileBuilder.create(sourceFile);
+      if (inputFile != null) {
+        if (exclusionFilters.accept(inputFile, InputFile.Type.MAIN)) {
+          indexFile(inputFileBuilder, fileSystem, status, inputFile, InputFile.Type.MAIN);
         }
-        if (exclusionFilters.accept(sourceFile, path, InputFile.Type.TEST)) {
-          indexFile(inputFileBuilder, fileSystem, status, sourceFile, path, InputFile.Type.TEST);
+        if (exclusionFilters.accept(inputFile, InputFile.Type.TEST)) {
+          indexFile(inputFileBuilder, fileSystem, status, inputFile, InputFile.Type.TEST);
         }
       }
     }
   }
 
-  private void indexFile(InputFileBuilder inputFileBuilder, DefaultModuleFileSystem fs, Progress status, File file, String path, InputFile.Type type) {
-    InputFile inputFile = inputFileBuilder.create(file, type);
+  private void indexFile(InputFileBuilder inputFileBuilder, DefaultModuleFileSystem fs,
+                         Progress status, DefaultInputFile inputFile, InputFile.Type type) {
+    inputFile = inputFileBuilder.complete(inputFile, type);
     if (inputFile != null && accept(inputFile)) {
       fs.add(inputFile);
       status.markAsIndexed(inputFile);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FilePredicateAdapters.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FilePredicateAdapters.java
deleted file mode 100644 (file)
index beb959f..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.batch.scan.filesystem;
-
-import org.apache.commons.io.FilenameUtils;
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-
-class FilePredicateAdapters {
-  static class KeyPredicate implements FilePredicate {
-    private final String key;
-
-    KeyPredicate(String key) {
-      this.key = key;
-    }
-
-    @Override
-    public boolean apply(InputFile f) {
-      return key.equals(((DefaultInputFile) f).key());
-    }
-  }
-
-  static class DeprecatedKeyPredicate implements FilePredicate {
-    private final String key;
-
-    DeprecatedKeyPredicate(String key) {
-      this.key = key;
-    }
-
-    @Override
-    public boolean apply(InputFile f) {
-      return key.equals(((DefaultInputFile) f).deprecatedKey());
-    }
-  }
-
-  static class SourceRelativePathPredicate implements FilePredicate {
-    private final String path;
-
-    SourceRelativePathPredicate(String s) {
-      this.path = FilenameUtils.normalize(s, true);
-    }
-
-    @Override
-    public boolean apply(InputFile f) {
-      return path.equals(((DefaultInputFile) f).pathRelativeToSourceDir());
-    }
-  }
-
-  static class SourceDirPredicate implements FilePredicate {
-    private final String path;
-
-    SourceDirPredicate(String s) {
-      this.path = FilenameUtils.normalize(s, true);
-    }
-
-    @Override
-    public boolean apply(InputFile f) {
-      return path.equals(((DefaultInputFile) f).sourceDirAbsolutePath());
-    }
-  }
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java
deleted file mode 100644 (file)
index 6464f15..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.batch.scan.filesystem;
-
-
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.InputFileFilter;
-import org.sonar.api.batch.fs.internal.PathPattern;
-
-class InclusionFilter implements InputFileFilter {
-  private final PathPattern pattern;
-
-  InclusionFilter(String s) {
-    this.pattern = PathPattern.create(s);
-  }
-
-  @Override
-  public boolean accept(InputFile inputFile) {
-    return pattern.match(inputFile);
-  }
-
-  @Override
-  public String toString() {
-    return "Includes: " + pattern;
-  }
-}
index 9f8f79f7dd733f204132a85cb7e55d6f02b6593f..142f2d1c252a405b434d7fdadb078477f51cb00b 100644 (file)
@@ -73,19 +73,27 @@ class InputFileBuilder {
   }
 
   @CheckForNull
-  DefaultInputFile create(File file, InputFile.Type type) {
+  DefaultInputFile create(File file) {
     String relativePath = pathResolver.relativePath(fs.baseDir(), file);
     if (relativePath == null) {
       LoggerFactory.getLogger(getClass()).warn(
-        "File '%s' is ignored. It is not in module basedir '%s'.", file.getAbsolutePath(), fs.baseDir());
+        "File '%s' is ignored. It is not located in module basedir '%s'.", file.getAbsolutePath(), fs.baseDir());
       return null;
     }
     DefaultInputFile inputFile = new DefaultInputFile(relativePath);
+    inputFile.setBasedir(fs.baseDir());
+    inputFile.setFile(file);
+    return inputFile;
+  }
+
+  /**
+   * Optimization to not set all InputFile data if the file is excluded from analysis.
+   */
+  @CheckForNull
+  DefaultInputFile complete(DefaultInputFile inputFile, InputFile.Type type) {
     inputFile.setType(type);
     inputFile.setKey(new StringBuilder().append(moduleKey).append(":").append(inputFile.relativePath()).toString());
     inputFile.setBasedir(fs.baseDir());
-    inputFile.setAbsolutePath(file.getAbsolutePath());
-    inputFile.setFile(file);
     FileMetadata.Metadata metadata = FileMetadata.INSTANCE.read(inputFile.file(), fs.encoding());
     inputFile.setLines(metadata.lines);
     inputFile.setHash(metadata.hash);
index 372a863bd889ddd4d6a6eee8b6969e2c9628c618..7acfba1e42355c5ad930fc0c2c7d38420abfc9dc 100644 (file)
@@ -55,15 +55,15 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
   public static final int FILE_SNAPSHOT_ID = 3003;
   public static final int COVERAGE_METRIC_ID = 2;
 
-  private MeasurePersister measurePersister;
-  private RuleFinder ruleFinder = mock(RuleFinder.class);
-  private ResourcePersister resourcePersister = mock(ResourcePersister.class);
-  private MemoryOptimizer memoryOptimizer = mock(MemoryOptimizer.class);
-  private Project project = new Project("foo");
-  private JavaPackage aPackage = new JavaPackage("org.foo");
-  private JavaFile aFile = new JavaFile("org.foo.Bar");
-  private Snapshot projectSnapshot = snapshot(PROJECT_SNAPSHOT_ID);
-  private Snapshot packageSnapshot = snapshot(PACKAGE_SNAPSHOT_ID);
+  MeasurePersister measurePersister;
+  RuleFinder ruleFinder = mock(RuleFinder.class);
+  ResourcePersister resourcePersister = mock(ResourcePersister.class);
+  MemoryOptimizer memoryOptimizer = mock(MemoryOptimizer.class);
+  Project project = new Project("foo");
+  JavaPackage aPackage = new JavaPackage("org.foo");
+  JavaFile aFile = new JavaFile("org.foo.Bar");
+  Snapshot projectSnapshot = snapshot(PROJECT_SNAPSHOT_ID);
+  Snapshot packageSnapshot = snapshot(PACKAGE_SNAPSHOT_ID);
 
   @Before
   public void mockResourcePersister() {
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AdditionalFilePredicatesTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/AdditionalFilePredicatesTest.java
new file mode 100644 (file)
index 0000000..2068004
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * 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.batch.scan.filesystem;
+
+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.internal.DefaultInputFile;
+
+import java.io.File;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class AdditionalFilePredicatesTest {
+
+  @Rule
+  public TemporaryFolder temp = new TemporaryFolder();
+
+  @Test
+  public void key() throws Exception {
+    FilePredicate predicate = new AdditionalFilePredicates.KeyPredicate("struts:Action.java");
+
+    DefaultInputFile inputFile = new DefaultInputFile("Action.java").setKey("struts:Action.java");
+    assertThat(predicate.apply(inputFile)).isTrue();
+
+    inputFile = new DefaultInputFile("Filter.java").setKey("struts:Filter.java");
+    assertThat(predicate.apply(inputFile)).isFalse();
+  }
+
+  @Test
+  public void deprecated_key() throws Exception {
+    FilePredicate predicate = new AdditionalFilePredicates.DeprecatedKeyPredicate("struts:Action.java");
+
+    DefaultInputFile inputFile = new DefaultInputFile("Action.java").setDeprecatedKey("struts:Action.java");
+    assertThat(predicate.apply(inputFile)).isTrue();
+
+    inputFile = new DefaultInputFile("Filter.java").setDeprecatedKey("struts:Filter.java");
+    assertThat(predicate.apply(inputFile)).isFalse();
+  }
+
+  @Test
+  public void absolute_path_of_source_dir() throws Exception {
+    File dir = temp.newFolder();
+    FilePredicate predicate = new AdditionalFilePredicates.SourceDirPredicate(dir.getAbsolutePath());
+
+    DefaultInputFile inputFile = new DefaultInputFile("Action.java").setSourceDirAbsolutePath(dir.getAbsolutePath());
+    assertThat(predicate.apply(inputFile)).isTrue();
+
+    inputFile = new DefaultInputFile("Filter.java").setSourceDirAbsolutePath(temp.newFolder().getAbsolutePath());
+    assertThat(predicate.apply(inputFile)).isFalse();
+  }
+
+  @Test
+  public void path_relative_to_source_dir() throws Exception {
+    FilePredicate predicate = new AdditionalFilePredicates.SourceRelativePathPredicate("foo/Bar.php");
+
+    DefaultInputFile inputFile = new DefaultInputFile("src/php/foo/Bar.php").setPathRelativeToSourceDir("foo/Bar.php");
+    assertThat(predicate.apply(inputFile)).isTrue();
+
+    inputFile = new DefaultInputFile("foo/Bar.php").setPathRelativeToSourceDir("Bar.php");
+    assertThat(predicate.apply(inputFile)).isFalse();
+  }
+}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ExclusionFilterTest.java
deleted file mode 100644 (file)
index c08dbe3..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.batch.scan.filesystem;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-
-import java.io.File;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class ExclusionFilterTest {
-
-  @Rule
-  public TemporaryFolder temp = new TemporaryFolder();
-
-  @Test
-  public void accept() throws Exception {
-    ExclusionFilter sourceRelativeFilter = new ExclusionFilter("**/*Foo.java");
-    ExclusionFilter absoluteFilter = new ExclusionFilter("file:**/src/main/**Foo.java");
-
-    File file = new File(temp.newFolder(), "src/main/java/org/MyFoo.java");
-    InputFile inputFile = new DefaultInputFile("src/main/java/org/MyFoo.java")
-      .setFile(file)
-      .setPathRelativeToSourceDir("org/MyFoo.java");
-
-    assertThat(sourceRelativeFilter.accept(inputFile)).isFalse();
-    assertThat(absoluteFilter.accept(inputFile)).isFalse();
-
-    file = new File(temp.newFolder(), "src/main/java/org/Other.java");
-    inputFile = new DefaultInputFile("src/main/java/org/Other.java")
-      .setFile(file)
-      .setPathRelativeToSourceDir("org/Other.java");
-    assertThat(sourceRelativeFilter.accept(inputFile)).isTrue();
-    assertThat(absoluteFilter.accept(inputFile)).isTrue();
-  }
-
-  @Test
-  public void test_toString() {
-    ExclusionFilter filter = new ExclusionFilter("**/*Foo.java");
-    assertThat(filter.toString()).isEqualTo("Excludes: **/*Foo.java");
-  }
-}
index 6083f224a5cc7c8b60a5df644e0da82298391f0a..4c0cd44c4cce65fd0573dbc476e66a5f5ac03095 100644 (file)
@@ -25,6 +25,7 @@ import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.sonar.api.CoreProperties;
 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.scan.filesystem.FileExclusions;
 import org.sonar.api.scan.filesystem.ModuleFileSystem;
@@ -59,13 +60,17 @@ public class ExclusionFiltersTest {
     filter.prepare(fs);
 
     java.io.File file = temp.newFile();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/FooDao.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isFalse();
+    // test are excluded by default if no sonar.tests nor sonar.test.inclusions
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/FooDao.java", InputFile.Type.MAIN)).isTrue();
+    inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
 
     // test are excluded by default if no sonar.tests nor sonar.test.inclusions
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.TEST)).isFalse();
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
   }
 
   @Test
@@ -78,12 +83,15 @@ public class ExclusionFiltersTest {
 
     java.io.File file = temp.newFile();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isTrue();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
 
-    assertThat(filter.accept(file, "src/main/java2/com/mycompany/FooDao.java", InputFile.Type.MAIN)).isFalse();
+    inputFile = new DefaultInputFile("src/main/java2/com/mycompany/FooDao.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
 
     // source inclusions do not apply to tests
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.TEST)).isFalse();
+    inputFile = new DefaultInputFile("src/main/java/com/mycompany/FooDao.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
   }
 
   @Test
@@ -97,11 +105,12 @@ public class ExclusionFiltersTest {
 
     java.io.File file = temp.newFile();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isTrue();
-
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.TEST)).isFalse();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
 
-    assertThat(filter.accept(file, "src/test/java/com/mycompany/Foo.java", InputFile.Type.TEST)).isTrue();
+    inputFile = new DefaultInputFile("src/test/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isTrue();
   }
 
   @Test
@@ -115,12 +124,15 @@ public class ExclusionFiltersTest {
 
     java.io.File file = temp.newFile();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isFalse();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
 
-    assertThat(filter.accept(file, "src/main/java2/com/mycompany/FooDao.java", InputFile.Type.MAIN)).isTrue();
+    inputFile = new DefaultInputFile("src/main/java2/com/mycompany/FooDao.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
 
     // source inclusions do not apply to tests
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.TEST)).isFalse();
+    inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
   }
 
   @Test
@@ -134,11 +146,14 @@ public class ExclusionFiltersTest {
     java.io.File file = temp.newFile();
 
     // test inclusions do not apply to main code
-    assertThat(filter.accept(file, "src/test/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isFalse();
+    DefaultInputFile inputFile = new DefaultInputFile("src/test/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
 
-    assertThat(filter.accept(file, "src/test2/java/com/mycompany/FooTest.java", InputFile.Type.TEST)).isFalse();
+    inputFile = new DefaultInputFile("src/test2/java/com/mycompany/FooTest.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isFalse();
 
-    assertThat(filter.accept(file, "src/test/java/com/mycompany/Foo.java", InputFile.Type.TEST)).isTrue();
+    inputFile = new DefaultInputFile("src/test/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isTrue();
   }
 
   @Test
@@ -151,9 +166,11 @@ public class ExclusionFiltersTest {
 
     java.io.File file = temp.newFile();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isFalse();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/FooDto.java", InputFile.Type.MAIN)).isTrue();
+    inputFile = new DefaultInputFile("src/main/java/com/mycompany/FooDto.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
   }
 
   @Test
@@ -167,12 +184,15 @@ public class ExclusionFiltersTest {
     filter.prepare(fs);
 
     java.io.File file = temp.newFile();
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/FooDao.java", InputFile.Type.MAIN)).isFalse();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/com/mycompany/FooDao.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
 
-    assertThat(filter.accept(file, "src/main/java/com/mycompany/Foo.java", InputFile.Type.MAIN)).isTrue();
+    inputFile = new DefaultInputFile("src/main/java/com/mycompany/Foo.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
 
     // source exclusions do not apply to tests
-    assertThat(filter.accept(file, "src/test/java/com/mycompany/FooDao.java", InputFile.Type.TEST)).isTrue();
+    inputFile = new DefaultInputFile("src/test/java/com/mycompany/FooDao.java").setFile(file);
+    assertThat(filter.accept(inputFile, InputFile.Type.TEST)).isTrue();
   }
 
   @Test
@@ -187,9 +207,11 @@ public class ExclusionFiltersTest {
 
     filter.prepare(fs);
 
-    assertThat(filter.accept(includedFile, "src/main/java/org/bar/Foo.java", InputFile.Type.MAIN)).isTrue();
+    DefaultInputFile inputFile = new DefaultInputFile("src/main/java/org/bar/Foo.java").setFile(includedFile);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isTrue();
 
-    assertThat(filter.accept(excludedFile, "src/main/java/org/bar/Bar.java", InputFile.Type.MAIN)).isFalse();
+    inputFile = new DefaultInputFile("src/main/java/org/bar/Bar.java").setFile(excludedFile);
+    assertThat(filter.accept(inputFile, InputFile.Type.MAIN)).isFalse();
   }
 
   @Test
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileSystemLoggerTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileSystemLoggerTest.java
deleted file mode 100644 (file)
index e1f852e..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.batch.scan.filesystem;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.slf4j.Logger;
-import org.sonar.api.config.Settings;
-
-import java.io.File;
-
-import static org.mockito.AdditionalMatchers.and;
-import static org.mockito.Matchers.contains;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class FileSystemLoggerTest {
-  @Rule
-  public TemporaryFolder temp = new TemporaryFolder();
-
-  @Test
-  public void log() {
-//    DefaultModuleFileSystem fs = new DefaultModuleFileSystem("foo", mock(Settings.class), mock(InputFileCache.class), mock(FileIndex.class));
-//    File src = temp.newFolder("src");
-//    File test = temp.newFolder("test");
-//    File base = temp.newFolder("base");
-//    fs.setBaseDir(base);
-//    fs.addSourceDir(src);
-//    fs.addTestDir(test);
-//
-//    Logger slf4j = mock(Logger.class);
-//    new FileSystemLogger(fs).doLog(slf4j);
-//
-//    verify(slf4j).info(and(contains("Base dir:"), contains(base.getAbsolutePath())));
-//    verify(slf4j).info(and(contains("Source dirs:"), contains(src.getAbsolutePath())));
-//    verify(slf4j).info(and(contains("Test dirs:"), contains(test.getAbsolutePath())));
-  }
-}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/InclusionFilterTest.java
deleted file mode 100644 (file)
index 21afc18..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.batch.scan.filesystem;
-
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-
-import java.io.File;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class InclusionFilterTest {
-  @Rule
-  public TemporaryFolder temp = new TemporaryFolder();
-
-  @Test
-  public void accept() throws Exception {
-    InclusionFilter sourceRelativeFilter = new InclusionFilter("**/*Foo.java");
-    InclusionFilter absoluteFilter = new InclusionFilter("file:**/src/main/**Foo.java");
-
-    File file = new File(temp.newFolder(), "src/main/java/org/MyFoo.java");
-    InputFile inputFile = new DefaultInputFile("src/main/java/org/MyFoo.java")
-      .setFile(file)
-      .setPathRelativeToSourceDir("org/MyFoo.java");
-
-    assertThat(sourceRelativeFilter.accept(inputFile)).isTrue();
-    assertThat(absoluteFilter.accept(inputFile)).isTrue();
-
-    file = new File(temp.newFolder(), "src/main/java/org/Other.java");
-    inputFile = new DefaultInputFile("src/main/java/org/Other.java")
-      .setFile(file)
-      .setPathRelativeToSourceDir("org/Other.java");
-    assertThat(sourceRelativeFilter.accept(inputFile)).isFalse();
-    assertThat(absoluteFilter.accept(inputFile)).isFalse();
-  }
-
-  @Test
-  public void test_toString() {
-    InclusionFilter filter = new InclusionFilter("**/*Foo.java");
-    assertThat(filter.toString()).isEqualTo("Includes: **/*Foo.java");
-  }
-}
index fadd7426a0cece93091fdbd1be354ba9aa005ab9..b4b0100ec02f25254c057ae9cf0f59ab18853cc7 100644 (file)
@@ -49,7 +49,7 @@ public class InputFileBuilderTest {
   AnalysisMode analysisMode = mock(AnalysisMode.class);
 
   @Test
-  public void create_input_file() throws Exception {
+  public void complete_input_file() throws Exception {
     // file system
     File basedir = temp.newFolder();
     File srcFile = new File(basedir, "src/main/java/foo/Bar.java");
@@ -67,8 +67,10 @@ public class InputFileBuilderTest {
 
     InputFileBuilder builder = new InputFileBuilder("struts", new PathResolver(),
       langDetection, statusDetection, fs, analysisMode);
-    DefaultInputFile inputFile = builder.create(srcFile, InputFile.Type.MAIN);
+    DefaultInputFile inputFile = builder.create(srcFile);
+    inputFile = builder.complete(inputFile, InputFile.Type.MAIN);
 
+    assertThat(inputFile.type()).isEqualTo(InputFile.Type.MAIN);
     assertThat(inputFile.file()).isEqualTo(srcFile.getAbsoluteFile());
     assertThat(inputFile.absolutePath()).isEqualTo(PathUtils.sanitize(srcFile.getAbsolutePath()));
     assertThat(inputFile.language()).isEqualTo("java");
@@ -91,7 +93,7 @@ public class InputFileBuilderTest {
 
     InputFileBuilder builder = new InputFileBuilder("struts", new PathResolver(),
       langDetection, statusDetection, fs, analysisMode);
-    DefaultInputFile inputFile = builder.create(srcFile, InputFile.Type.MAIN);
+    DefaultInputFile inputFile = builder.create(srcFile);
 
     assertThat(inputFile).isNull();
   }
@@ -111,7 +113,8 @@ public class InputFileBuilderTest {
 
     InputFileBuilder builder = new InputFileBuilder("struts", new PathResolver(),
       langDetection, statusDetection, fs, analysisMode);
-    DefaultInputFile inputFile = builder.create(srcFile, InputFile.Type.MAIN);
+    DefaultInputFile inputFile = builder.create(srcFile);
+    inputFile = builder.complete(inputFile, InputFile.Type.MAIN);
 
     assertThat(inputFile).isNull();
   }
@@ -137,7 +140,8 @@ public class InputFileBuilderTest {
 
     InputFileBuilder builder = new InputFileBuilder("struts", new PathResolver(),
       langDetection, statusDetection, fs, analysisMode);
-    DefaultInputFile inputFile = builder.create(srcFile, InputFile.Type.MAIN);
+    DefaultInputFile inputFile = builder.create(srcFile);
+    inputFile = builder.complete(inputFile, InputFile.Type.MAIN);
 
     assertThat(inputFile.pathRelativeToSourceDir()).isEqualTo("foo/Bar.java");
     assertThat(inputFile.sourceDirAbsolutePath()).isEqualTo(PathUtils.sanitize(sourceDir.getAbsolutePath()));
@@ -165,7 +169,8 @@ public class InputFileBuilderTest {
 
     InputFileBuilder builder = new InputFileBuilder("struts", new PathResolver(),
       langDetection, statusDetection, fs, analysisMode);
-    DefaultInputFile inputFile = builder.create(srcFile, InputFile.Type.MAIN);
+    DefaultInputFile inputFile = builder.create(srcFile);
+    inputFile = builder.complete(inputFile, InputFile.Type.MAIN);
 
     assertThat(inputFile.pathRelativeToSourceDir()).isEqualTo("foo/Bar.php");
     assertThat(inputFile.sourceDirAbsolutePath()).isEqualTo(PathUtils.sanitize(sourceDir.getAbsolutePath()));
index 3cfbb4bd64d090ab1ea6294fd4561091de975242..ae0b094f25d8676ad4fa732db48b7362adba85dd 100644 (file)
@@ -26,10 +26,12 @@ import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
+import org.sonar.api.batch.fs.internal.RelativePathIndex;
 import org.sonar.batch.index.Caches;
 import org.sonar.batch.index.CachesTest;
 
 import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
 
 public class InputFileCacheTest {
 
@@ -52,18 +54,47 @@ public class InputFileCacheTest {
   @Test
   public void should_add_input_file() throws Exception {
     InputFileCache cache = new InputFileCache(caches);
-    cache.put("struts", new DefaultInputFile("src/main/java/Foo.java").setFile(temp.newFile("Foo.java")));
+    DefaultInputFile fooFile = new DefaultInputFile("src/main/java/Foo.java").setFile(temp.newFile("Foo.java"));
+    cache.put("struts", fooFile);
     cache.put("struts-core", new DefaultInputFile("src/main/java/Bar.java").setFile(temp.newFile("Bar.java")));
 
+    // index by relative path is automatically fed
+    assertThat(cache.get("struts", RelativePathIndex.ID, "src/main/java/Foo.java").relativePath())
+      .isEqualTo("src/main/java/Foo.java");
+
     assertThat(cache.byModule("struts")).hasSize(1);
     assertThat(cache.byModule("struts-core")).hasSize(1);
     assertThat(cache.all()).hasSize(2);
     for (InputFile inputFile : cache.all()) {
       assertThat(inputFile.relativePath()).startsWith("src/main/java/");
     }
+
+    cache.remove("struts", fooFile);
+    assertThat(cache.all()).hasSize(1);
+
     cache.removeModule("struts");
     assertThat(cache.byModule("struts")).hasSize(0);
     assertThat(cache.byModule("struts-core")).hasSize(1);
     assertThat(cache.all()).hasSize(1);
   }
+
+  @Test
+  public void only_relative_path_index_is_supported() throws Exception {
+    InputFileCache cache = new InputFileCache(caches);
+    DefaultInputFile input = new DefaultInputFile("src/main/java/Foo.java").setFile(temp.newFile("Foo.java"));
+
+    try {
+      cache.index("struts", "unsupported-index", "index-value", input);
+      fail();
+    } catch (UnsupportedOperationException e) {
+      assertThat(e).hasMessage("Only relative path index is supported yet");
+    }
+
+    try {
+      cache.get("struts", "unsupported-index", "index-value");
+      fail();
+    } catch (UnsupportedOperationException e) {
+      assertThat(e).hasMessage("Only relative path index is supported yet");
+    }
+  }
 }
index 6b34b4b1d3b40de440df5ab1120a0810ef69d6e8..c56f951126ece916dfd2d198f4f0c6ddcc5b6ef0 100644 (file)
@@ -22,11 +22,8 @@ package org.sonar.api.batch.fs.internal;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.utils.PathUtils;
 import org.sonar.api.utils.WildcardPattern;
 
-import java.io.File;
-
 public abstract class PathPattern {
 
   final WildcardPattern pattern;
@@ -37,8 +34,6 @@ public abstract class PathPattern {
 
   public abstract boolean match(InputFile inputFile);
 
-  public abstract boolean match(File ioFile, String relativePathFromBasedir);
-
   public abstract boolean match(InputFile inputFile, boolean caseSensitiveFileExtension);
 
   public static PathPattern create(String s) {
@@ -62,12 +57,6 @@ public abstract class PathPattern {
       super(pattern);
     }
 
-    @Override
-    public boolean match(File ioFile, String relativePathFromBasedir) {
-      String path = PathUtils.sanitize(ioFile.getAbsolutePath());
-      return pattern.match(path);
-    }
-
     @Override
     public boolean match(InputFile inputFile) {
       return match(inputFile, true);
@@ -100,11 +89,6 @@ public abstract class PathPattern {
       super(pattern);
     }
 
-    @Override
-    public boolean match(File ioFile, String relativePathFromBasedir) {
-      return relativePathFromBasedir != null && pattern.match(relativePathFromBasedir);
-    }
-
     @Override
     public boolean match(InputFile inputFile) {
       return match(inputFile, true);