aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java15
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java13
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java9
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java8
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java33
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java13
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java38
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java13
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java17
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java45
10 files changed, 97 insertions, 107 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java
index f7bc914d5fe..4326b2169df 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java
@@ -19,9 +19,8 @@
*/
package org.sonar.plugins.core.batch;
-import org.apache.commons.configuration.Configuration;
-import org.sonar.api.CoreProperties;
import org.sonar.api.batch.ResourceFilter;
+import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.api.resources.ResourceUtils;
@@ -30,10 +29,10 @@ import org.sonar.api.resources.ResourceUtils;
*/
public class ExcludedResourceFilter implements ResourceFilter {
- private Configuration conf;
+ private Project project;
- public ExcludedResourceFilter(Configuration conf) {
- this.conf = conf;
+ public ExcludedResourceFilter(Project project) {
+ this.project = project;
}
public boolean isIgnored(Resource resource) {
@@ -42,7 +41,7 @@ public class ExcludedResourceFilter implements ResourceFilter {
return false;
}
- String[] patterns = getExclusionPatterns();
+ String[] patterns = project.getExclusionPatterns();
if (patterns != null) {
for (String pattern : patterns) {
if (resource.matchFilePattern(pattern)) {
@@ -52,8 +51,4 @@ public class ExcludedResourceFilter implements ResourceFilter {
}
return false;
}
-
- String[] getExclusionPatterns() {
- return conf.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY);
- }
} \ No newline at end of file
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java
index dbbe8fd9e13..952b32c7641 100644
--- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java
@@ -22,6 +22,7 @@ package org.sonar.plugins.core.batch;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.junit.Test;
import org.sonar.api.CoreProperties;
+import org.sonar.api.resources.Project;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Resource;
@@ -35,7 +36,8 @@ public class ExcludedResourceFilterTest {
@Test
public void doNotFailIfNoPatterns() {
PropertiesConfiguration conf = new PropertiesConfiguration();
- ExcludedResourceFilter filter = new ExcludedResourceFilter(conf);
+ Project project = new Project("foo").setConfiguration(conf);
+ ExcludedResourceFilter filter = new ExcludedResourceFilter(project);
assertThat(filter.isIgnored(mock(Resource.class)), is(false));
}
@@ -43,7 +45,8 @@ public class ExcludedResourceFilterTest {
public void noPatternsMatch() {
PropertiesConfiguration conf = new PropertiesConfiguration();
conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, new String[]{"**/foo/*.java", "**/bar/*"});
- ExcludedResourceFilter filter = new ExcludedResourceFilter(conf);
+ Project project = new Project("foo").setConfiguration(conf);
+ ExcludedResourceFilter filter = new ExcludedResourceFilter(project);
assertThat(filter.isIgnored(mock(Resource.class)), is(false));
}
@@ -54,7 +57,8 @@ public class ExcludedResourceFilterTest {
public void ignoreResourceIfMatchesPattern() {
PropertiesConfiguration conf = new PropertiesConfiguration();
conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, new String[]{"**/foo/*.java", "**/bar/*"});
- ExcludedResourceFilter filter = new ExcludedResourceFilter(conf);
+ Project project = new Project("foo").setConfiguration(conf);
+ ExcludedResourceFilter filter = new ExcludedResourceFilter(project);
Resource resource = mock(Resource.class);
when(resource.matchFilePattern("**/bar/*")).thenReturn(true);
@@ -66,7 +70,8 @@ public class ExcludedResourceFilterTest {
public void doNotExcludeUnitTestFiles() {
PropertiesConfiguration conf = new PropertiesConfiguration();
conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, new String[]{"**/foo/*.java", "**/bar/*"});
- ExcludedResourceFilter filter = new ExcludedResourceFilter(conf);
+ Project project = new Project("foo").setConfiguration(conf);
+ ExcludedResourceFilter filter = new ExcludedResourceFilter(project);
Resource unitTest = mock(Resource.class);
when(unitTest.getQualifier()).thenReturn(Qualifiers.UNIT_TEST_FILE);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java b/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
index 06ce83b81de..43ca03aa5c0 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
@@ -70,7 +70,6 @@ public class ProjectConfigurator implements BatchComponent {
Date analysisDate = loadAnalysisDate();
project
.setConfiguration(new PropertiesConfiguration()) // will be populated by ProjectSettings
- .setExclusionPatterns(loadExclusionPatterns())
.setAnalysisDate(analysisDate)
.setLatestAnalysis(isLatestAnalysis(project.getKey(), analysisDate))
.setAnalysisVersion(loadAnalysisVersion())
@@ -79,14 +78,6 @@ public class ProjectConfigurator implements BatchComponent {
return this;
}
- String[] loadExclusionPatterns() {
- String[] exclusionPatterns = settings.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY);
- for (int i = 0; i < exclusionPatterns.length; i++) {
- exclusionPatterns[i] = StringUtils.trim(exclusionPatterns[i]);
- }
- return exclusionPatterns;
- }
-
boolean isLatestAnalysis(String projectKey, Date analysisDate) {
ResourceModel persistedProject = databaseSession.getSingleResult(ResourceModel.class, "key", projectKey, "enabled", true);
if (persistedProject != null) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java
index 73997640662..134c0b0f6d9 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java
@@ -33,7 +33,6 @@ import org.sonar.api.utils.IocContainer;
import org.sonar.api.utils.SonarException;
import org.sonar.batch.*;
import org.sonar.batch.components.TimeMachineConfiguration;
-import org.sonar.batch.config.DeprecatedConfigurationProvider;
import org.sonar.batch.config.ProjectSettings;
import org.sonar.batch.events.EventBus;
import org.sonar.batch.index.DefaultIndex;
@@ -70,7 +69,6 @@ public class ProjectModule extends Module {
addCoreSingleton(project);
addCoreSingleton(project.getConfiguration());
addCoreSingleton(ProjectSettings.class);
- addAdapter(new DeprecatedConfigurationProvider());
addCoreSingleton(IocContainer.class);
for (Object component : projectDefinition.getContainerExtensions()) {
@@ -134,9 +132,9 @@ public class ProjectModule extends Module {
DefaultIndex index = getComponentByType(DefaultIndex.class);
index.setCurrentProject(project,
- getComponentByType(ResourceFilters.class),
- getComponentByType(ViolationFilters.class),
- getComponentByType(RulesProfile.class));
+ getComponentByType(ResourceFilters.class),
+ getComponentByType(ViolationFilters.class),
+ getComponentByType(RulesProfile.class));
// TODO See http://jira.codehaus.org/browse/SONAR-2126
// previously MavenProjectBuilder was responsible for creation of ProjectFileSystem
diff --git a/sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java b/sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java
deleted file mode 100644
index 636a5adde25..00000000000
--- a/sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar 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.
- *
- * Sonar 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 Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
- */
-package org.sonar.batch.config;
-
-import org.apache.commons.configuration.Configuration;
-import org.picocontainer.injectors.ProviderAdapter;
-import org.sonar.api.resources.Project;
-
-public class DeprecatedConfigurationProvider extends ProviderAdapter {
-
- public Configuration provide(Project project, ProjectSettings settings) {//NOSONAR the parameter ProjectSettings is declared to be sure that it is initialized
- // configuration is valid because it has been updated by ProjectSettings
- return project.getConfiguration();
- }
-}
-
diff --git a/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java b/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java
index 7a7fb5a1886..6a37e61e5a5 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java
@@ -29,6 +29,7 @@ import org.sonar.api.resources.Project;
import org.sonar.core.config.ConfigurationUtils;
import org.sonar.jpa.session.DatabaseSessionFactory;
+import java.util.Iterator;
import java.util.List;
/**
@@ -88,7 +89,19 @@ public class ProjectSettings extends Settings {
}
private void updateDeprecatedCommonsConfiguration() {
+ System.out.println("---------- SETTINGS -------------");
+ for (String s : properties.keySet()) {
+ System.out.println(s + "=" + properties.get(s));
+ }
ConfigurationUtils.copyToCommonsConfiguration(properties, deprecatedCommonsConf);
+
+ System.out.println("---------- DEP CONF -------------");
+ Iterator keys = deprecatedCommonsConf.getKeys();
+ while(keys.hasNext()) {
+ String key = (String)keys.next();
+ System.out.println(key + "=" + deprecatedCommonsConf.getString(key));
+ }
+ System.out.println("----------------------------------");
}
/**
diff --git a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
index 3d556413ee8..ddeb6bd0204 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
@@ -37,44 +37,6 @@ import static org.junit.Assert.assertTrue;
public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
@Test
- public void testNoExclusionPatterns() {
- Project project = new Project("key");
- new ProjectConfigurator(getSession(), new Settings()).configure(project);
- assertThat(project.getExclusionPatterns().length, is(0));
- }
-
- @Test
- public void testManyExclusionPatterns() {
- Settings settings = new Settings();
- settings.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, "**/*,foo,*/bar");
-
- Project project = new Project("key");
- new ProjectConfigurator(getSession(), settings).configure(project);
-
- assertThat(project.getExclusionPatterns().length, is(3));
- assertThat(project.getExclusionPatterns()[0], is("**/*"));
- assertThat(project.getExclusionPatterns()[1], is("foo"));
- assertThat(project.getExclusionPatterns()[2], is("*/bar"));
- }
-
- /**
- * See http://jira.codehaus.org/browse/SONAR-2261
- * Note that several exclusions separated by comma would be correctly trimmed by commons-configuration library.
- * So issue is only with a single pattern, which contains spaces.
- */
- @Test
- public void trimExclusionPatterns() {
- Settings configuration = new Settings();
- configuration.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, " foo ");
-
- Project project = new Project("key");
- new ProjectConfigurator(getSession(), configuration).configure(project);
-
- assertThat(project.getExclusionPatterns().length, is(1));
- assertThat(project.getExclusionPatterns()[0], is("foo"));
- }
-
- @Test
public void getLanguageFromConfiguration() {
Settings configuration = new Settings();
configuration.setProperty(CoreProperties.PROJECT_LANGUAGE_PROPERTY, "foo");
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java
index 99432b0313f..f2ef02f5746 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java
@@ -101,7 +101,6 @@ public class Project extends Resource {
private String languageKey;
private Date analysisDate;
private AnalysisType analysisType;
- private String[] exclusionPatterns;
private String analysisVersion;
private boolean latestAnalysis;
@@ -363,15 +362,21 @@ public class Project extends Resource {
* Patterns of resource exclusion as defined in project settings page.
*/
public String[] getExclusionPatterns() {
- return exclusionPatterns;
+ String[] exclusions = configuration.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY);
+ for (int index=0 ; index<exclusions.length ; index++) {
+ // http://jira.codehaus.org/browse/SONAR-2261 - exclusion must be trimmed
+ exclusions[index]=StringUtils.trim(exclusions[index]);
+ }
+ return exclusions;
}
/**
* Set exclusion patterns. Configuration is not saved, so this method must be used ONLY IN UNIT TESTS.
+ * @deprecated
*/
+ @Deprecated
public Project setExclusionPatterns(String[] s) {
- this.exclusionPatterns = s;
- return this;
+ throw new UnsupportedOperationException("Unsupported since version 2.12");
}
/**
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java
index 22731536df3..867464ce822 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/resources/DefaultProjectFileSystemTest.java
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;
import org.apache.maven.project.MavenProject;
@@ -78,7 +79,9 @@ public class DefaultProjectFileSystemTest {
final DefaultProjectFileSystem fs = newDefaultProjectFileSystem(project);
assertThat(fs.hasJavaSourceFiles(), is(true));
- project.setExclusionPatterns(new String[] { "**/*.java" });
+ PropertiesConfiguration conf = new PropertiesConfiguration();
+ conf.setProperty("sonar.exclusions", "**/*.java");
+ project.setConfiguration(conf);
assertThat(fs.hasJavaSourceFiles(), is(false));
}
@@ -92,7 +95,9 @@ public class DefaultProjectFileSystemTest {
@Test
public void applyExclusionPatternsToSourceFiles() {
- project.setExclusionPatterns(new String[] { "**/B*.java" });
+ PropertiesConfiguration conf = new PropertiesConfiguration();
+ conf.setProperty("sonar.exclusions", "**/B*.java");
+ project.setConfiguration(conf);
final DefaultProjectFileSystem fs = newDefaultProjectFileSystem(project);
@@ -105,7 +110,9 @@ public class DefaultProjectFileSystemTest {
*/
@Test
public void exclusionPatternOnAjFiles() {
- project.setExclusionPatterns(new String[] { "**/*.aj" });
+ PropertiesConfiguration conf = new PropertiesConfiguration();
+ conf.setProperty("sonar.exclusions", "**/*.aj");
+ project.setConfiguration(conf);
final DefaultProjectFileSystem fs = newDefaultProjectFileSystem(project);
@@ -116,7 +123,9 @@ public class DefaultProjectFileSystemTest {
@Test
public void doNotApplyExclusionPatternsToTestFiles() {
- project.setExclusionPatterns(new String[] { "**/B*.java" });
+ PropertiesConfiguration conf = new PropertiesConfiguration();
+ conf.setProperty("sonar.exclusions", "**/B*.java");
+ project.setConfiguration(conf);
final DefaultProjectFileSystem fs = newDefaultProjectFileSystem(project);
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java
index 8df12c56673..5b3e9bfe6f6 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/resources/ProjectTest.java
@@ -19,13 +19,20 @@
*/
package org.sonar.api.resources;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.core.Is;
import org.junit.Test;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.config.Settings;
import org.sonar.api.test.MavenTestUtils;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
+import static org.junit.internal.matchers.IsCollectionContaining.hasItems;
public class ProjectTest {
@Test
@@ -47,4 +54,42 @@ public class ProjectTest {
Project project = Project.createFromMavenIds("my", "artifact");
assertThat(project.getKey(), is("my:artifact"));
}
+
+ /**
+ * See http://jira.codehaus.org/browse/SONAR-2261
+ * Note that several exclusions separated by comma would be correctly trimmed by commons-configuration library.
+ * So issue is only with a single pattern, which contains spaces.
+ */
+ @Test
+ public void shouldTrimExclusionPatterns() {
+ Configuration conf = new PropertiesConfiguration();
+ conf.setProperty("sonar.exclusions", " **/*Foo.java , **/Bar.java ");
+ Project project = new Project("foo").setConfiguration(conf);
+
+ String[] exclusions = project.getExclusionPatterns();
+
+ assertThat(exclusions.length, Is.is(2));
+ assertThat(exclusions[0], Is.is("**/*Foo.java"));
+ assertThat(exclusions[1], Is.is("**/Bar.java"));
+ }
+
+ @Test
+ public void testNoExclusionPatterns() {
+ Project project = new Project("key").setConfiguration(new PropertiesConfiguration());
+
+ MatcherAssert.assertThat(project.getExclusionPatterns().length, Is.is(0));
+ }
+
+ @Test
+ public void testManyExclusionPatterns() {
+ PropertiesConfiguration conf = new PropertiesConfiguration();
+ conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, "**/*,foo,*/bar");
+
+ Project project = new Project("key").setConfiguration(conf);
+
+ MatcherAssert.assertThat(project.getExclusionPatterns().length, Is.is(3));
+ MatcherAssert.assertThat(project.getExclusionPatterns()[0], Is.is("**/*"));
+ MatcherAssert.assertThat(project.getExclusionPatterns()[1], Is.is("foo"));
+ MatcherAssert.assertThat(project.getExclusionPatterns()[2], Is.is("*/bar"));
+ }
}