summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-02-18 14:22:09 +0100
committerSimon Brandhof <simon.brandhof@gmail.com>2013-02-18 14:22:09 +0100
commit7975f4777901956c93ca2f08606415840a682816 (patch)
treeaf1c621fe3e9ad66d6189c5266fa5f0cf9c3bf23
parent5a1634e38b510c684868cfe96185929622010ece (diff)
downloadsonarqube-7975f4777901956c93ca2f08606415840a682816.tar.gz
sonarqube-7975f4777901956c93ca2f08606415840a682816.zip
Fix inclusions by absolute path and improve documentation
-rw-r--r--plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties15
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java19
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java14
5 files changed, 42 insertions, 14 deletions
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
index 1749b118a8a..a8d5adf82d6 100644
--- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
+++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
@@ -674,10 +674,15 @@ category.exclusions.help=<h2>Wildcards</h2>\
<td>?</td>\
<td>Match a single character</td>\
</tr>\
+ <tr class="even">\
+ <td>file:</td>\
+ <td>Prefix to define a pattern based on absolute path</td>\
+ </tr>\
</table>\
<p>Examples:</p>\
<table class="data">\
<thead><tr><th>Filter</th><th>Description</th><th>Matches</th></tr></thead>\
+ <tbody>\
<tr class="odd">\
<td>org/mycompany/*.java</td>\
<td>matches all <code>.java</code> files in the <code>org/mycompany</code> directory</td>\
@@ -731,6 +736,16 @@ category.exclusions.help=<h2>Wildcards</h2>\
</ul>\
</td>\
</tr>\
+ <tr class="even">\
+ <td>file:**/generated/**</td>\
+ <td>matches all files whose one parent directory is 'generated'.</td>\
+ <td>\
+ <ul>\
+ <li>/path/to/project/tmp/generated/org/castor/Model.java</li>\
+ </ul>\
+ </td>\
+ </tr>\
+ </tbody>\
</table>
property.sonar.skippedModules.name=Exclude project modules from code analysis
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 73ba970889d..4d29ee9f8ab 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
@@ -94,7 +94,7 @@ public class DefaultModuleFileSystem implements ModuleFileSystem {
}
boolean isDefaultSourceCharset() {
- return settings.hasKey(CoreProperties.ENCODING_PROPERTY);
+ return !settings.hasKey(CoreProperties.ENCODING_PROPERTY);
}
public File workingDir() {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java
index 7abfac92823..959b63e28c7 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java
@@ -91,9 +91,9 @@ public class ExclusionFilters implements FileSystemFilter, ResourceFilter, Batch
private boolean isIgnoredFileResource(Resource resource) {
PathPattern[] inclusionPatterns = (ResourceUtils.isUnitTestClass(resource) ? testInclusions : sourceInclusions);
if (inclusionPatterns.length > 0) {
- boolean matchInclusion = false;
+ boolean matchInclusion = true;
for (PathPattern pattern : inclusionPatterns) {
- matchInclusion |= pattern.match(resource);
+ matchInclusion &= (!pattern.supportResource() || pattern.match(resource));
}
if (!matchInclusion) {
return true;
@@ -101,7 +101,7 @@ public class ExclusionFilters implements FileSystemFilter, ResourceFilter, Batch
}
PathPattern[] exclusionPatterns = (ResourceUtils.isUnitTestClass(resource) ? testExclusions : sourceExclusions);
for (PathPattern pattern : exclusionPatterns) {
- if (pattern.match(resource)) {
+ if (pattern.supportResource() && pattern.match(resource)) {
return true;
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java
index 7df5d1c945a..e7614d585b6 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/PathPattern.java
@@ -35,17 +35,20 @@ abstract class PathPattern {
abstract boolean match(Resource resource);
+ abstract boolean supportResource();
+
static PathPattern create(String s) {
- if (StringUtils.startsWithIgnoreCase(s, "file:")) {
- return new AbsolutePathPattern(StringUtils.substring(s, "file:".length()));
+ String trimmed = StringUtils.trim(s);
+ if (StringUtils.startsWithIgnoreCase(trimmed, "file:")) {
+ return new AbsolutePathPattern(StringUtils.substring(trimmed, "file:".length()));
}
- return new RelativePathPattern(s);
+ return new RelativePathPattern(trimmed);
}
static PathPattern[] create(String[] s) {
PathPattern[] result = new PathPattern[s.length];
for (int i = 0; i < s.length; i++) {
- result[i] = PathPattern.create(s[i]);
+ result[i] = create(s[i]);
}
return result;
}
@@ -63,6 +66,10 @@ abstract class PathPattern {
return false;
}
+ boolean supportResource() {
+ return false;
+ }
+
@Override
public String toString() {
return "file:" + pattern.toString();
@@ -82,6 +89,10 @@ abstract class PathPattern {
return resource.matchFilePattern(pattern.toString());
}
+ boolean supportResource() {
+ return true;
+ }
+
@Override
public String toString() {
return pattern.toString();
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 afc4009f67b..74aa5bd264a 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
@@ -78,19 +78,21 @@ public class DefaultModuleFileSystemTest {
.setSettings(new Settings());
assertThat(fileSystem.sourceCharset()).isEqualTo(Charset.defaultCharset());
+ assertThat(fileSystem.isDefaultSourceCharset()).isTrue();
}
@Test
- public void source_encoding_is_set() {
- File basedir = temp.newFolder("base");
+ public void source_encoding_is_set() {
+ File basedir = temp.newFolder("base");
Settings settings = new Settings();
settings.setProperty(CoreProperties.ENCODING_PROPERTY, "UTF-8");
DefaultModuleFileSystem fileSystem = new DefaultModuleFileSystem()
- .setBaseDir(basedir)
- .setSettings(settings);
+ .setBaseDir(basedir)
+ .setSettings(settings);
- assertThat(fileSystem.sourceCharset()).isEqualTo(Charset.forName("UTF-8"));
- }
+ assertThat(fileSystem.sourceCharset()).isEqualTo(Charset.forName("UTF-8"));
+ assertThat(fileSystem.isDefaultSourceCharset()).isFalse();
+ }
@Test
public void should_exclude_dirs_starting_with_dot() throws IOException {