From 6f2f4aa5db7b4cbd9f88e02badf52bf7066b0cbc Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 4 Apr 2013 16:38:39 +0200 Subject: [PATCH] Use new PropertyDefinition API in CpdPlugin --- .../java/org/sonar/plugins/cpd/CpdPlugin.java | 62 +++++++++-------- .../org/sonar/plugins/cpd/CpdPluginTest.java | 2 +- .../sonar/batch/bootstrap/ServerClient.java | 6 +- .../sonar/api/config/PropertyDefinition.java | 66 +++++++------------ .../api/config/PropertyDefinitionTest.java | 8 +-- .../api/config/PropertyDefinitionsTest.java | 10 +-- 6 files changed, 64 insertions(+), 90 deletions(-) diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/CpdPlugin.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/CpdPlugin.java index dcb5903e84f..8d45aae3574 100644 --- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/CpdPlugin.java +++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/CpdPlugin.java @@ -25,48 +25,46 @@ import org.sonar.api.Properties; import org.sonar.api.Property; import org.sonar.api.PropertyType; import org.sonar.api.SonarPlugin; +import org.sonar.api.config.PropertyDefinition; +import org.sonar.api.resources.Qualifiers; import org.sonar.plugins.cpd.decorators.DuplicationDensityDecorator; import org.sonar.plugins.cpd.decorators.SumDuplicationsDecorator; import org.sonar.plugins.cpd.index.IndexFactory; import java.util.List; -@Properties({ - @Property( - key = CoreProperties.CPD_CROSS_RPOJECT, - defaultValue = CoreProperties.CPD_CROSS_RPOJECT_DEFAULT_VALUE + "", - name = "Cross project duplication detection", - description = "Sonar supports the detection of cross project duplications. Activating this property will slightly increase each Sonar analysis time.", - project = true, - module = true, - global = true, - category = CoreProperties.CATEGORY_DUPLICATIONS, - type = PropertyType.BOOLEAN), - @Property( - key = CoreProperties.CPD_SKIP_PROPERTY, - defaultValue = "false", - name = "Skip", - description = "Disable detection of duplications", - // not displayed in UI - project = false, module = false, global = false, - category = CoreProperties.CATEGORY_DUPLICATIONS, - type = PropertyType.BOOLEAN), - @Property( - key = CoreProperties.CPD_EXCLUSIONS, - defaultValue = "", - name = "Duplication exclusions", - description = "Patterns used to exclude some source files from the duplication detection mechanism. " + - "See the \"Exclusions\" category to know how to use wildcards to specify this property.", - project = true, - module = true, - global = true, - category = CoreProperties.CATEGORY_DUPLICATIONS, - multiValues = true) -}) public final class CpdPlugin extends SonarPlugin { public List getExtensions() { return ImmutableList.of( + PropertyDefinition.build(CoreProperties.CPD_CROSS_RPOJECT) + .defaultValue(CoreProperties.CPD_CROSS_RPOJECT_DEFAULT_VALUE + "") + .name("Cross project duplication detection") + .description("Sonar supports the detection of cross project duplications. Activating this property will slightly increase each Sonar analysis time.") + .qualifiers(Qualifiers.PROJECT, Qualifiers.MODULE) + .global(true) + .category(CoreProperties.CATEGORY_DUPLICATIONS) + .type(PropertyType.BOOLEAN) + .build(), + PropertyDefinition.build(CoreProperties.CPD_SKIP_PROPERTY) + .defaultValue("false") + .name("Skip") + .description("Disable detection of duplications") + .global(false) + .category(CoreProperties.CATEGORY_DUPLICATIONS) + .type(PropertyType.BOOLEAN) + .build(), + PropertyDefinition.build(CoreProperties.CPD_EXCLUSIONS) + .defaultValue("") + .name("Duplication exclusions") + .description("Patterns used to exclude some source files from the duplication detection mechanism. " + + "See the \"Exclusions\" category to know how to use wildcards to specify this property.") + .qualifiers(Qualifiers.PROJECT, Qualifiers.MODULE) + .global(true) + .category(CoreProperties.CATEGORY_DUPLICATIONS) + .multiValues(true) + .build(), + CpdSensor.class, SumDuplicationsDecorator.class, DuplicationDensityDecorator.class, diff --git a/plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/CpdPluginTest.java b/plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/CpdPluginTest.java index a3ec3f05048..5e106a9e081 100644 --- a/plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/CpdPluginTest.java +++ b/plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/CpdPluginTest.java @@ -27,6 +27,6 @@ public class CpdPluginTest { @Test public void getExtensions() { - assertThat(new CpdPlugin().getExtensions()).hasSize(6); + assertThat(new CpdPlugin().getExtensions()).hasSize(9); } } diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ServerClient.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ServerClient.java index c8e47e469dd..07582732ed9 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ServerClient.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ServerClient.java @@ -119,10 +119,12 @@ public class ServerClient implements BatchComponent { } private String getLogin() { - return settings.property(CoreProperties.LOGIN) != null ? settings.property(CoreProperties.LOGIN) : DEFAULT_LOGIN; + String login = settings.property(CoreProperties.LOGIN); + return login != null ? login : DEFAULT_LOGIN; } private String getPassword() { - return settings.property(CoreProperties.PASSWORD) != null ? settings.property(CoreProperties.PASSWORD) : DEFAULT_PASSWORD; + String password = settings.property(CoreProperties.PASSWORD); + return password != null ? password : DEFAULT_PASSWORD; } } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinition.java index df3622c1944..b46f03d919d 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinition.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinition.java @@ -37,19 +37,6 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; /** - * Property value can be set in different ways : - * - *

- * Value is accessible in batch extensions via the Configuration object of class org.sonar.api.resources.Project - * (see method getConfiguration()). - *

- *

Must be used in org.sonar.api.Plugin classes only.

* * @since 3.0 */ @@ -69,6 +56,9 @@ public final class PropertyDefinition implements BatchExtension, ServerExtension private String deprecatedKey; private List fields; + /** + * @since 3.6 + */ private PropertyDefinition(Builder builder) { this.key = builder.key; this.name = builder.name; @@ -85,18 +75,30 @@ public final class PropertyDefinition implements BatchExtension, ServerExtension this.qualifiers = builder.qualifiers; } + /** + * @since 3.6 + */ public static Builder build(String key) { return new Builder(key); } + /** + * @since 3.6 + */ static PropertyDefinition create(Property annotation) { + List qualifiers = newArrayList(); + if (annotation.project()) { + qualifiers.add(Qualifiers.PROJECT); + } + if (annotation.module()) { + qualifiers.add(Qualifiers.MODULE); + } return PropertyDefinition.build(annotation.key()) .name(annotation.name()) .defaultValue(annotation.defaultValue()) .description(annotation.description()) .global(annotation.global()) - .project(annotation.project()) - .module(annotation.module()) + .qualifiers(qualifiers) .category(annotation.category()) .type(annotation.type()) .options(annotation.options()) @@ -182,20 +184,6 @@ public final class PropertyDefinition implements BatchExtension, ServerExtension return category; } - /** - * Is the property displayed in project settings page ? - */ - public boolean project() { - return qualifiers.contains(Qualifiers.PROJECT); - } - - /** - * Is the property displayed in module settings page ? A module is a maven sub-project. - */ - public boolean module() { - return qualifiers.contains(Qualifiers.MODULE); - } - /** * Qualifiers that can display this property * @@ -263,6 +251,9 @@ public final class PropertyDefinition implements BatchExtension, ServerExtension } } + /** + * @since 3.6 + */ public static class Builder { private String key; private String name; @@ -318,21 +309,8 @@ public final class PropertyDefinition implements BatchExtension, ServerExtension return this; } - public Builder project(boolean displayOnProject) { - if (displayOnProject) { - this.qualifiers.add(Qualifiers.PROJECT); - } else { - this.qualifiers.remove(Qualifiers.PROJECT); - } - return this; - } - - public Builder module(boolean displayOnModule) { - if (displayOnModule) { - this.qualifiers.add(Qualifiers.MODULE); - } else { - this.qualifiers.remove(Qualifiers.MODULE); - } + public Builder qualifiers(List qualifiers) { + this.qualifiers.addAll(qualifiers); return this; } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionTest.java index b849e2951a5..ea9381e371e 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionTest.java @@ -75,8 +75,7 @@ public class PropertyDefinitionTest { assertThat(def.description()).isEqualTo("desc"); assertThat(def.type()).isEqualTo(PropertyType.FLOAT); assertThat(def.global()).isFalse(); - assertThat(def.project()).isTrue(); - assertThat(def.module()).isTrue(); + assertThat(def.qualifiers()).containsOnly(Qualifiers.PROJECT, Qualifiers.MODULE); assertThat(def.multiValues()).isTrue(); assertThat(def.propertySetKey()).isEqualTo("set"); assertThat(def.fields()).isEmpty(); @@ -97,8 +96,6 @@ public class PropertyDefinitionTest { assertThat(def.type()).isEqualTo(PropertyType.STRING); assertThat(def.global()).isTrue(); assertThat(def.qualifiers()).isEmpty(); - assertThat(def.project()).isFalse(); - assertThat(def.module()).isFalse(); assertThat(def.multiValues()).isFalse(); assertThat(def.propertySetKey()).isEmpty(); assertThat(def.fields()).isEmpty(); @@ -119,8 +116,7 @@ public class PropertyDefinitionTest { assertThat(def.description()).isEmpty(); assertThat(def.type()).isEqualTo(PropertyType.STRING); assertThat(def.global()).isTrue(); - assertThat(def.project()).isFalse(); - assertThat(def.module()).isFalse(); + assertThat(def.qualifiers()).isEmpty(); assertThat(def.multiValues()).isFalse(); assertThat(def.propertySetKey()).isEmpty(); assertThat(def.fields()).isEmpty(); diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionsTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionsTest.java index 0837af1bd1a..8b590184818 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionsTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/config/PropertyDefinitionsTest.java @@ -93,11 +93,11 @@ public class PropertyDefinitionsTest { @Test public void should_group_by_category() { PropertyDefinitions def = new PropertyDefinitions( - PropertyDefinition.build("global1").name("Global1").category("catGlobal1").global(true).project(false).module(false).build(), - PropertyDefinition.build("global2").name("Global2").category("catGlobal1").global(true).project(false).module(false).build(), - PropertyDefinition.build("global3").name("Global3").category("catGlobal2").global(true).project(false).module(false).build(), - PropertyDefinition.build("project").name("Project").category("catProject").global(false).project(true).module(false).build(), - PropertyDefinition.build("module").name("Module").category("catModule").global(false).project(false).module(true).build(), + PropertyDefinition.build("global1").name("Global1").category("catGlobal1").global(true).build(), + PropertyDefinition.build("global2").name("Global2").category("catGlobal1").global(true).build(), + PropertyDefinition.build("global3").name("Global3").category("catGlobal2").global(true).build(), + PropertyDefinition.build("project").name("Project").category("catProject").global(false).qualifiers(Qualifiers.PROJECT).build(), + PropertyDefinition.build("module").name("Module").category("catModule").global(false).qualifiers(Qualifiers.MODULE).build(), PropertyDefinition.build("view").name("View").category("catView").global(false).qualifiers(Qualifiers.VIEW).build() ); -- 2.39.5