diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2014-01-24 16:39:15 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2014-01-24 16:39:58 +0100 |
commit | 0bc66b98e9515d513a494dc622993fc11c5c19bd (patch) | |
tree | b64aaf4e0fc0ace93e054f58efc3b4155152535f | |
parent | d08db62051ec8a9b09e2c3cf8176ff038e7c02f5 (diff) | |
download | sonarqube-0bc66b98e9515d513a494dc622993fc11c5c19bd.tar.gz sonarqube-0bc66b98e9515d513a494dc622993fc11c5c19bd.zip |
SONAR-926 Update SourceScanner to work with multi-language projects
3 files changed, 34 insertions, 88 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScanner.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScanner.java index 4a5d87eb5d6..f8b3b001453 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScanner.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScanner.java @@ -59,27 +59,15 @@ public final class SourceScanner implements Sensor { * {@inheritDoc} */ public void analyse(Project project, SensorContext context) { - parseDirs(project, false); - parseDirs(project, true); - } - - protected void parseDirs(Project project, boolean isTest) { Charset sourcesEncoding = fileSystem.sourceCharset(); - Iterable<InputFile> files; - if (isTest) { - files = fileSystem.inputFiles(FileQuery.onTest().onLanguage(project.getLanguageKey())); - } else { - files = fileSystem.inputFiles(FileQuery.onSource().onLanguage(project.getLanguageKey())); - } - - for (InputFile inputFile : files) { + for (InputFile inputFile : fileSystem.inputFiles(FileQuery.all())) { try { String componentEffectiveKey = inputFile.attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY); if (componentEffectiveKey != null) { - String relativePathFromSource = inputFile.attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH); - inclusionPatternInitializer.initializePatternsForPath(relativePathFromSource, componentEffectiveKey); - exclusionPatternInitializer.initializePatternsForPath(relativePathFromSource, componentEffectiveKey); + String path = inputFile.path(); + inclusionPatternInitializer.initializePatternsForPath(path, componentEffectiveKey); + exclusionPatternInitializer.initializePatternsForPath(path, componentEffectiveKey); if (exclusionPatternInitializer.hasFileContentPattern()) { regexpScanner.scan(componentEffectiveKey, inputFile.file(), sourcesEncoding); } diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScannerTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScannerTest.java index 39d80f75112..98ec8ec805c 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScannerTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScannerTest.java @@ -29,11 +29,9 @@ import org.junit.rules.TemporaryFolder; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.sonar.api.resources.Java; import org.sonar.api.resources.Project; import org.sonar.api.scan.filesystem.FileQuery; import org.sonar.api.scan.filesystem.internal.DefaultInputFile; -import org.sonar.api.scan.filesystem.internal.InputFile; import org.sonar.api.scan.filesystem.internal.InputFileBuilder; import org.sonar.api.utils.SonarException; import org.sonar.batch.scan.filesystem.DefaultModuleFileSystem; @@ -116,106 +114,62 @@ public class SourceScannerTest { } @Test - public void shouldAnalyseJavaProject() throws IOException { + public void shouldAnalyseProject() throws IOException { File javaFile1 = new File(baseDir, "src/main/java/Foo.java"); - when(fs.inputFiles(FileQuery.onSource().onLanguage(Java.KEY))).thenReturn((Iterable) Arrays.asList( + File javaTestFile1 = new File(baseDir, "src/test/java/FooTest.java"); + when(fs.inputFiles(FileQuery.all())).thenReturn((Iterable) Arrays.asList( new InputFileBuilder(javaFile1, Charsets.UTF_8, "src/main/java/Foo.java") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "Foo.java") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/main/java/Foo.java") + .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:src/main/java/Foo.java") + .build(), + new InputFileBuilder(javaTestFile1, Charsets.UTF_8, "src/test/java/FooTest.java") + .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:src/test/java/FooTest.java") .build())); - File javaTestFile1 = new File(baseDir, "src/test/java/FooTest.java"); - when(fs.inputFiles(FileQuery.onTest().onLanguage(Java.KEY))).thenReturn( - (Iterable) Arrays.asList( - new InputFileBuilder(javaTestFile1, Charsets.UTF_8, "src/test/java/FooTest.java") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "FooTest.java") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/test/java/FooTest.java") - .build())); - when(project.getLanguageKey()).thenReturn(Java.KEY); when(exclusionPatternInitializer.hasFileContentPattern()).thenReturn(true); scanner.analyse(project, null); - verify(inclusionPatternInitializer).initializePatternsForPath("Foo.java", "polop:/src/main/java/Foo.java"); - verify(inclusionPatternInitializer).initializePatternsForPath("FooTest.java", "polop:/src/test/java/FooTest.java"); - verify(exclusionPatternInitializer).initializePatternsForPath("Foo.java", "polop:/src/main/java/Foo.java"); - verify(exclusionPatternInitializer).initializePatternsForPath("FooTest.java", "polop:/src/test/java/FooTest.java"); - verify(regexpScanner).scan("polop:/src/main/java/Foo.java", javaFile1, UTF_8); - verify(regexpScanner).scan("polop:/src/test/java/FooTest.java", javaTestFile1, UTF_8); + verify(inclusionPatternInitializer).initializePatternsForPath("src/main/java/Foo.java", "polop:src/main/java/Foo.java"); + verify(inclusionPatternInitializer).initializePatternsForPath("src/test/java/FooTest.java", "polop:src/test/java/FooTest.java"); + verify(exclusionPatternInitializer).initializePatternsForPath("src/main/java/Foo.java", "polop:src/main/java/Foo.java"); + verify(exclusionPatternInitializer).initializePatternsForPath("src/test/java/FooTest.java", "polop:src/test/java/FooTest.java"); + verify(regexpScanner).scan("polop:src/main/java/Foo.java", javaFile1, UTF_8); + verify(regexpScanner).scan("polop:src/test/java/FooTest.java", javaTestFile1, UTF_8); } @Test public void shouldAnalyseFilesOnlyWhenRegexConfigured() throws IOException { File javaFile1 = new File(baseDir, "src/main/java/Foo.java"); - when(fs.inputFiles(FileQuery.onSource().onLanguage(Java.KEY))).thenReturn((Iterable) Arrays.asList( + File javaTestFile1 = new File(baseDir, "src/test/java/FooTest.java"); + when(fs.inputFiles(FileQuery.all())).thenReturn((Iterable) Arrays.asList( new InputFileBuilder(javaFile1, Charsets.UTF_8, "src/main/java/Foo.java") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "Foo.java") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/main/java/Foo.java") + .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:src/main/java/Foo.java") + .build(), + new InputFileBuilder(javaTestFile1, Charsets.UTF_8, "src/test/java/FooTest.java") + .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:src/test/java/FooTest.java") .build())); - File javaTestFile1 = new File(baseDir, "src/test/java/FooTest.java"); - when(fs.inputFiles(FileQuery.onTest().onLanguage(Java.KEY))).thenReturn( - (Iterable) Arrays.asList( - new InputFileBuilder(javaTestFile1, Charsets.UTF_8, "src/test/java/FooTest.java") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "FooTest.java") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/test/java/FooTest.java") - .build())); - when(project.getLanguageKey()).thenReturn(Java.KEY); when(exclusionPatternInitializer.hasFileContentPattern()).thenReturn(false); scanner.analyse(project, null); - verify(inclusionPatternInitializer).initializePatternsForPath("Foo.java", "polop:/src/main/java/Foo.java"); - verify(inclusionPatternInitializer).initializePatternsForPath("FooTest.java", "polop:/src/test/java/FooTest.java"); - verify(exclusionPatternInitializer).initializePatternsForPath("Foo.java", "polop:/src/main/java/Foo.java"); - verify(exclusionPatternInitializer).initializePatternsForPath("FooTest.java", "polop:/src/test/java/FooTest.java"); + verify(inclusionPatternInitializer).initializePatternsForPath("src/main/java/Foo.java", "polop:src/main/java/Foo.java"); + verify(inclusionPatternInitializer).initializePatternsForPath("src/test/java/FooTest.java", "polop:src/test/java/FooTest.java"); + verify(exclusionPatternInitializer).initializePatternsForPath("src/main/java/Foo.java", "polop:src/main/java/Foo.java"); + verify(exclusionPatternInitializer).initializePatternsForPath("src/test/java/FooTest.java", "polop:src/test/java/FooTest.java"); verifyZeroInteractions(regexpScanner); } @Test - public void shouldAnalyseOtherProject() throws Exception { - File phpFile1 = new File(baseDir, "src/Foo.php"); - when(fs.inputFiles(FileQuery.onSource().onLanguage("php"))).thenReturn((Iterable) Arrays.asList( - new InputFileBuilder(phpFile1, Charsets.UTF_8, "src/Foo.php") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "Foo.php") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/Foo.php") - .build())); - File phpTestFile1 = new File(baseDir, "src/test/FooTest.php"); - when(fs.inputFiles(FileQuery.onTest().onLanguage("php"))).thenReturn( - (Iterable) Arrays.asList( - new InputFileBuilder(phpTestFile1, Charsets.UTF_8, "src/test/FooTest.php") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "FooTest.php") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/test/FooTest.php") - .build())); - - when(project.getLanguageKey()).thenReturn("php"); - - when(exclusionPatternInitializer.hasFileContentPattern()).thenReturn(true); - - scanner.analyse(project, null); - - verify(inclusionPatternInitializer).initializePatternsForPath("Foo.php", "polop:/src/Foo.php"); - verify(inclusionPatternInitializer).initializePatternsForPath("FooTest.php", "polop:/src/test/FooTest.php"); - verify(exclusionPatternInitializer).initializePatternsForPath("Foo.php", "polop:/src/Foo.php"); - verify(exclusionPatternInitializer).initializePatternsForPath("FooTest.php", "polop:/src/test/FooTest.php"); - verify(regexpScanner).scan("polop:/src/Foo.php", phpFile1, UTF_8); - verify(regexpScanner).scan("polop:/src/test/FooTest.php", phpTestFile1, UTF_8); - } - - @Test public void shouldReportFailure() throws IOException { File phpFile1 = new File(baseDir, "src/Foo.php"); - when(fs.inputFiles(FileQuery.onSource().onLanguage("php"))).thenReturn((Iterable) Arrays.asList( + when(fs.inputFiles(FileQuery.all())).thenReturn((Iterable) Arrays.asList( new InputFileBuilder(phpFile1, Charsets.UTF_8, "src/Foo.php") - .attribute(InputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH, "Foo.php") - .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:/src/Foo.php") + .attribute(DefaultInputFile.ATTRIBUTE_COMPONENT_KEY, "polop:src/Foo.php") .build())); - when(fs.inputFiles(FileQuery.onTest().onLanguage("php"))).thenReturn( - (Iterable) Arrays.asList()); - when(project.getLanguageKey()).thenReturn("php"); when(exclusionPatternInitializer.hasFileContentPattern()).thenReturn(true); - doThrow(new IOException("BUG")).when(regexpScanner).scan("polop:/src/Foo.php", phpFile1, UTF_8); + doThrow(new IOException("BUG")).when(regexpScanner).scan("polop:src/Foo.php", phpFile1, UTF_8); thrown.expect(SonarException.class); thrown.expectMessage("Unable to read the source file"); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFile.java b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFile.java index d2679f3e89a..0503db1dffd 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFile.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFile.java @@ -31,13 +31,17 @@ public interface InputFile extends Serializable { /** * Canonical path of source directory. * Example: <code>/path/to/module/src/main/java</code> or <code>C:\path\to\module\src\main\java</code> + * @deprecated since 4.2 No more sonar.sources */ + @Deprecated String ATTRIBUTE_SOURCEDIR_PATH = "SRC_DIR_PATH"; /** * Relative path from source directory. File separator is the forward slash ('/'), * even on MSWindows. + * @deprecated since 4.2 No more sonar.sources */ + @Deprecated String ATTRIBUTE_SOURCE_RELATIVE_PATH = "SRC_REL_PATH"; /** |