aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2014-01-24 16:39:15 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2014-01-24 16:39:58 +0100
commit0bc66b98e9515d513a494dc622993fc11c5c19bd (patch)
treeb64aaf4e0fc0ace93e054f58efc3b4155152535f
parentd08db62051ec8a9b09e2c3cf8176ff038e7c02f5 (diff)
downloadsonarqube-0bc66b98e9515d513a494dc622993fc11c5c19bd.tar.gz
sonarqube-0bc66b98e9515d513a494dc622993fc11c5c19bd.zip
SONAR-926 Update SourceScanner to work with multi-language projects
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScanner.java20
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/issue/ignore/scanner/SourceScannerTest.java98
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFile.java4
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";
/**