diff options
Diffstat (limited to 'sonar-plugin-api-impl/src')
10 files changed, 53 insertions, 81 deletions
diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java index 040ea6dac68..686d37d8b5d 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java @@ -51,6 +51,7 @@ public class DefaultIndexedFile extends DefaultInputComponent implements Indexed private final SensorStrategy sensorStrategy; private final String oldRelativeFilePath; private final boolean hidden; + private final URI uri; /** * Testing purposes only! @@ -75,6 +76,7 @@ public class DefaultIndexedFile extends DefaultInputComponent implements Indexed this.language = language; this.sensorStrategy = sensorStrategy; this.absolutePath = absolutePath; + this.uri = absolutePath.toUri(); this.oldRelativeFilePath = oldRelativeFilePath; this.hidden = hidden; validateKeyLength(); @@ -193,6 +195,6 @@ public class DefaultIndexedFile extends DefaultInputComponent implements Indexed @Override public URI uri() { - return path().toUri(); + return uri; } } diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicate.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicate.java index 7e981e82f77..c3c38969ce4 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicate.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicate.java @@ -24,15 +24,9 @@ import org.sonar.api.batch.fs.InputFile; public class ChangedFilePredicate implements FilePredicate { - private final FilePredicate originalPredicate; - - public ChangedFilePredicate(FilePredicate originalPredicate) { - this.originalPredicate = originalPredicate; - } - @Override public boolean apply(InputFile inputFile) { - return originalPredicate.apply(inputFile) && InputFile.Status.SAME != inputFile.status(); + return InputFile.Status.SAME != inputFile.status(); } } diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicate.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicate.java index 29e387b97b2..91ca9258621 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicate.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicate.java @@ -59,4 +59,9 @@ public class FileExtensionPredicate extends AbstractFilePredicate { private static String lowercase(String extension) { return extension.toLowerCase(Locale.ENGLISH); } + + @Override + public int priority() { + return USE_INDEX; + } } diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicate.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicate.java index 39856a3583e..a32f3c88cb9 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicate.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicate.java @@ -42,4 +42,8 @@ public class FilenamePredicate extends AbstractFilePredicate { return index.getFilesByName(filename); } + @Override + public int priority() { + return USE_INDEX; + } } diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/HiddenFilesPredicate.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/NonHiddenFilesPredicate.java index ab166cd0bbd..4b467e6dba5 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/HiddenFilesPredicate.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/predicates/NonHiddenFilesPredicate.java @@ -22,18 +22,11 @@ package org.sonar.api.batch.fs.internal.predicates; import org.sonar.api.batch.fs.FilePredicate; import org.sonar.api.batch.fs.InputFile; -public class HiddenFilesPredicate implements FilePredicate { - - private final FilePredicate originalPredicate; - - public HiddenFilesPredicate(FilePredicate originalPredicate) { - this.originalPredicate = originalPredicate; - } +public class NonHiddenFilesPredicate implements FilePredicate { @Override public boolean apply(InputFile inputFile) { - // isHidden() will be known during scanning, evaluation should be done before other predicates - return !inputFile.isHidden() && originalPredicate.apply(inputFile); + return !inputFile.isHidden(); } } diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java index 1c52a520e54..ecc98c43d9c 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java @@ -43,4 +43,14 @@ public class DefaultIndexedFileTest { .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining(invalidPath); } + + @Test + public void uri_should_be_cached() { + String projectKey = "12345"; + Path baseDir = Paths.get(""); + String path = "foo/bar"; + + DefaultIndexedFile file = new DefaultIndexedFile(projectKey, baseDir, path, null); + Assertions.assertThat(file.uri()).isSameAs(file.uri()); + } } diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicateTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicateTest.java index 50b9972848b..33f085344d2 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicateTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/ChangedFilePredicateTest.java @@ -21,62 +21,42 @@ package org.sonar.api.batch.fs.internal.predicates; import org.assertj.core.api.Assertions; import org.junit.Test; -import org.sonar.api.batch.fs.FilePredicate; import org.sonar.api.batch.fs.InputFile; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class ChangedFilePredicateTest { - private final FilePredicate predicate = mock(FilePredicate.class); private final InputFile inputFile = mock(InputFile.class); - private final ChangedFilePredicate underTest = new ChangedFilePredicate(predicate); + private final ChangedFilePredicate underTest = new ChangedFilePredicate(); @Test - public void apply_when_file_is_changed_and_predicate_is_true() { + public void apply_when_file_is_changed() { when(inputFile.status()).thenReturn(InputFile.Status.CHANGED); - when(predicate.apply(inputFile)).thenReturn(true); Assertions.assertThat(underTest.apply(inputFile)).isTrue(); - verify(predicate, times(1)).apply(any()); - verify(inputFile, times(1)).status(); + verify(inputFile).status(); } @Test - public void apply_when_file_is_added_and_predicate_is_true() { + public void apply_when_file_is_added() { when(inputFile.status()).thenReturn(InputFile.Status.ADDED); - when(predicate.apply(inputFile)).thenReturn(true); Assertions.assertThat(underTest.apply(inputFile)).isTrue(); - verify(predicate, times(1)).apply(any()); - verify(inputFile, times(1)).status(); + verify(inputFile).status(); } @Test - public void do_not_apply_when_file_is_same_and_predicate_is_true() { + public void do_not_apply_when_file_is_same() { when(inputFile.status()).thenReturn(InputFile.Status.SAME); - when(predicate.apply(inputFile)).thenReturn(true); Assertions.assertThat(underTest.apply(inputFile)).isFalse(); - verify(predicate, times(1)).apply(any()); - verify(inputFile, times(1)).status(); - } - - @Test - public void predicate_is_evaluated_before_file_status() { - when(predicate.apply(inputFile)).thenReturn(false); - - Assertions.assertThat(underTest.apply(inputFile)).isFalse(); - - verify(inputFile, never()).status(); + verify(inputFile).status(); } } diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicateTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicateTest.java index 83ccb9da164..392d823e541 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicateTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FileExtensionPredicateTest.java @@ -19,7 +19,6 @@ */ package org.sonar.api.batch.fs.internal.predicates; -import java.io.IOException; import org.junit.Test; import org.sonar.api.batch.fs.InputFile; @@ -31,14 +30,14 @@ import static org.sonar.api.batch.fs.internal.predicates.FileExtensionPredicate. public class FileExtensionPredicateTest { @Test - public void should_match_correct_extension() throws IOException { + public void should_match_correct_extension() { FileExtensionPredicate predicate = new FileExtensionPredicate("bat"); assertThat(predicate.apply(mockWithName("prog.bat"))).isTrue(); assertThat(predicate.apply(mockWithName("prog.bat.bat"))).isTrue(); } @Test - public void should_not_match_incorrect_extension() throws IOException { + public void should_not_match_incorrect_extension() { FileExtensionPredicate predicate = new FileExtensionPredicate("bat"); assertThat(predicate.apply(mockWithName("prog.batt"))).isFalse(); assertThat(predicate.apply(mockWithName("prog.abat"))).isFalse(); @@ -49,7 +48,7 @@ public class FileExtensionPredicateTest { } @Test - public void should_match_correct_extension_case_insensitively() throws IOException { + public void should_match_correct_extension_case_insensitively() { FileExtensionPredicate predicate = new FileExtensionPredicate("jAVa"); assertThat(predicate.apply(mockWithName("Program.java"))).isTrue(); assertThat(predicate.apply(mockWithName("Program.JAVA"))).isTrue(); @@ -64,7 +63,12 @@ public class FileExtensionPredicateTest { assertThat(getExtension(".")).isEmpty(); } - private InputFile mockWithName(String filename) throws IOException { + @Test + public void should_have_use_index_priority() { + assertThat(new FileExtensionPredicate("bat").priority()).isEqualTo(AbstractFilePredicate.USE_INDEX); + } + + private InputFile mockWithName(String filename) { InputFile inputFile = mock(InputFile.class); when(inputFile.filename()).thenReturn(filename); return inputFile; diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicateTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicateTest.java index 2393d9cfa9e..30bc1e5f61e 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicateTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/FilenamePredicateTest.java @@ -59,4 +59,12 @@ public class FilenamePredicateTest { assertThat(new FilenamePredicate(filename).get(index)).containsOnly(inputFile); } + @Test + public void should_have_use_index_priority() { + String filename = "some name"; + InputFile inputFile = mock(InputFile.class); + when(inputFile.filename()).thenReturn(filename); + + assertThat(new FilenamePredicate(filename).priority()).isEqualTo(AbstractFilePredicate.USE_INDEX); + } } diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/HiddenFilesPredicateTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/NonHiddenFilesPredicateTest.java index b14a995515a..a5a09a97567 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/HiddenFilesPredicateTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/predicates/NonHiddenFilesPredicateTest.java @@ -21,61 +21,33 @@ package org.sonar.api.batch.fs.internal.predicates; import org.assertj.core.api.Assertions; import org.junit.Test; -import org.sonar.api.batch.fs.FilePredicate; import org.sonar.api.batch.fs.InputFile; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class HiddenFilesPredicateTest { +public class NonHiddenFilesPredicateTest { - private final FilePredicate predicate = mock(FilePredicate.class); private final InputFile inputFile = mock(InputFile.class); - private final HiddenFilesPredicate underTest = new HiddenFilesPredicate(predicate); + private final NonHiddenFilesPredicate underTest = new NonHiddenFilesPredicate(); @Test - public void apply_when_file_is_not_hidden_and_predicate_is_true() { + public void apply_when_file_is_not_hidden() { when(inputFile.isHidden()).thenReturn(false); - when(predicate.apply(inputFile)).thenReturn(true); Assertions.assertThat(underTest.apply(inputFile)).isTrue(); - verify(predicate).apply(any()); verify(inputFile).isHidden(); } @Test - public void do_not_apply_when_file_is_not_hidden_and_predicate_is_false() { - when(inputFile.isHidden()).thenReturn(false); - when(predicate.apply(inputFile)).thenReturn(false); - - Assertions.assertThat(underTest.apply(inputFile)).isFalse(); - - verify(predicate).apply(any()); - verify(inputFile).isHidden(); - } - - @Test - public void do_not_apply_when_file_is_hidden_and_predicate_is_true() { + public void do_not_apply_when_file_is_hidden() { when(inputFile.isHidden()).thenReturn(true); - when(predicate.apply(inputFile)).thenReturn(true); Assertions.assertThat(underTest.apply(inputFile)).isFalse(); verify(inputFile).isHidden(); - verify(predicate, never()).apply(any()); - } - - @Test - public void predicate_is_evaluated_after_file_visibility() { - when(inputFile.isHidden()).thenReturn(true); - - Assertions.assertThat(underTest.apply(inputFile)).isFalse(); - - verify(predicate, never()).apply(any()); } } |