// default severity when the rule is activated on a Quality profile. Default value is MAJOR.
.setSeverity(Severity.MINOR);
+ x1Rule
+ .setDebtCharacteristic("INTEGRATION_TESTABILITY")
+ .setDebtRemediationFunction(x1Rule.debtRemediationFunctions().linearWithOffset("1h", "30min"));
+
x1Rule.createParam("acceptWhitespace")
.setDefaultValue("false")
.setType(RuleParamType.BOOLEAN)
package org.sonar.xoo.rule;
import org.junit.Test;
+import org.sonar.api.server.rule.DebtRemediationFunction;
import org.sonar.api.server.rule.RulesDefinition;
import static org.fest.assertions.Assertions.assertThat;
assertThat(x1.key()).isEqualTo("x1");
assertThat(x1.tags()).containsOnly("style", "security");
assertThat(x1.htmlDescription()).isNotEmpty();
+
+ assertThat(x1.debtCharacteristic()).isEqualTo("INTEGRATION_TESTABILITY");
+ assertThat(x1.debtRemediationFunction().type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
+ assertThat(x1.debtRemediationFunction().factor()).isEqualTo("1h");
+ assertThat(x1.debtRemediationFunction().offset()).isEqualTo("30min");
}
}
package org.sonar.api.server.rule;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
/**
* @since 4.3
*/
-public class DebtRemediationFunction {
-
- public static enum Type {
- LINEAR, LINEAR_OFFSET, CONSTANT_ISSUE
- }
+public interface DebtRemediationFunction {
- public static class ValidationException extends RuntimeException {
+ static class ValidationException extends RuntimeException {
public ValidationException(String message) {
super(message);
}
}
- private Type type;
- private String factor;
- private String offset;
-
- private DebtRemediationFunction(Type type, @Nullable String factor, @Nullable String offset) {
- this.type = type;
- // TODO validate factor and offset format
- this.factor = StringUtils.deleteWhitespace(factor);
- this.offset = StringUtils.deleteWhitespace(offset);
- validate();
- }
-
- public static DebtRemediationFunction create(Type type, @Nullable String factor, @Nullable String offset) {
- return new DebtRemediationFunction(type, factor, offset);
- }
-
- public static DebtRemediationFunction createLinear(String factor) {
- return new DebtRemediationFunction(Type.LINEAR, factor, null);
- }
-
- public static DebtRemediationFunction createLinearWithOffset(String factor, String offset) {
- return new DebtRemediationFunction(Type.LINEAR_OFFSET, factor, offset);
- }
-
- public static DebtRemediationFunction createConstantPerIssue(String offset) {
- return new DebtRemediationFunction(Type.CONSTANT_ISSUE, null, offset);
+ static enum Type {
+ LINEAR, LINEAR_OFFSET, CONSTANT_ISSUE
}
- public Type type() {
- return type;
- }
+ Type type();
@CheckForNull
- public String factor() {
- return factor;
- }
+ String factor();
@CheckForNull
- public String offset() {
- return offset;
- }
-
- private void validate(){
- switch (type) {
- case LINEAR:
- if (this.factor == null || this.offset != null) {
- throw new ValidationException(String.format("%s is invalid, Linear remediation function should only define a factor", this));
- }
- break;
- case LINEAR_OFFSET:
- if (this.factor == null || this.offset == null) {
- throw new ValidationException(String.format("%s is invalid, Linear with offset remediation function should define both factor and offset", this));
- }
- break;
- case CONSTANT_ISSUE:
- if (this.factor != null || this.offset == null) {
- throw new ValidationException(String.format("%s is invalid, Constant/issue remediation function should only define an offset", this));
- }
- break;
- default:
- throw new IllegalStateException(String.format("Remediation function of %s is unknown", this));
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- DebtRemediationFunction that = (DebtRemediationFunction) o;
- return new EqualsBuilder()
- .append(type, that.type())
- .append(factor, that.factor())
- .append(offset, that.offset())
- .isEquals();
- }
+ String offset();
- @Override
- public int hashCode() {
- return new HashCodeBuilder(15, 33)
- .append(type)
- .append(factor)
- .append(offset)
- .toHashCode();
- }
-
- @Override
- public String toString() {
- return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString();
- }
}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.api.server.rule;
+
+/**
+ * Factory of {@link org.sonar.api.server.rule.DebtRemediationFunction}
+ *
+ * @since 4.3
+ */
+public interface DebtRemediationFunctions {
+
+ DebtRemediationFunction linear(String factor);
+
+ DebtRemediationFunction linearWithOffset(String factor, String offset);
+
+ DebtRemediationFunction constantPerIssue(String offset);
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.api.server.rule;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang.builder.ReflectionToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+class DefaultDebtRemediationFunction implements DebtRemediationFunction {
+
+ private Type type;
+ private String factor;
+ private String offset;
+
+ private DefaultDebtRemediationFunction(Type type, @Nullable String factor, @Nullable String offset) {
+ this.type = type;
+ // TODO validate factor and offset format
+ this.factor = StringUtils.deleteWhitespace(factor);
+ this.offset = StringUtils.deleteWhitespace(offset);
+ validate();
+ }
+
+ static DebtRemediationFunction create(Type type, @Nullable String factor, @Nullable String offset) {
+ return new DefaultDebtRemediationFunction(type, factor, offset);
+ }
+
+ static DebtRemediationFunction createLinear(String factor) {
+ return new DefaultDebtRemediationFunction(Type.LINEAR, factor, null);
+ }
+
+ static DebtRemediationFunction createLinearWithOffset(String factor, String offset) {
+ return new DefaultDebtRemediationFunction(Type.LINEAR_OFFSET, factor, offset);
+ }
+
+ static DebtRemediationFunction createConstantPerIssue(String offset) {
+ return new DefaultDebtRemediationFunction(Type.CONSTANT_ISSUE, null, offset);
+ }
+
+ public Type type() {
+ return type;
+ }
+
+ @CheckForNull
+ public String factor() {
+ return factor;
+ }
+
+ @CheckForNull
+ public String offset() {
+ return offset;
+ }
+
+ private void validate() {
+ switch (type) {
+ case LINEAR:
+ if (this.factor == null || this.offset != null) {
+ throw new ValidationException(String.format("%s is invalid, Linear remediation function should only define a factor", this));
+ }
+ break;
+ case LINEAR_OFFSET:
+ if (this.factor == null || this.offset == null) {
+ throw new ValidationException(String.format("%s is invalid, Linear with offset remediation function should define both factor and offset", this));
+ }
+ break;
+ case CONSTANT_ISSUE:
+ if (this.factor != null || this.offset == null) {
+ throw new ValidationException(String.format("%s is invalid, Constant/issue remediation function should only define an offset", this));
+ }
+ break;
+ default:
+ throw new IllegalStateException(String.format("Remediation function of %s is unknown", this));
+ }
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ DebtRemediationFunction that = (DebtRemediationFunction) o;
+ return new EqualsBuilder()
+ .append(type, that.type())
+ .append(factor, that.factor())
+ .append(offset, that.offset())
+ .isEquals();
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder(15, 33)
+ .append(type)
+ .append(factor)
+ .append(offset)
+ .toHashCode();
+ }
+
+ @Override
+ public String toString() {
+ return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString();
+ }
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.api.server.rule;
+
+import org.sonar.api.utils.MessageException;
+
+import javax.annotation.Nullable;
+
+class DefaultDebtRemediationFunctions implements DebtRemediationFunctions {
+
+ private final String repoKey, key;
+
+ DefaultDebtRemediationFunctions(String repoKey, String key) {
+ this.repoKey = repoKey;
+ this.key = key;
+ }
+
+ @Override
+ public DebtRemediationFunction linear(String factor) {
+ return create(DefaultDebtRemediationFunction.Type.LINEAR, factor, null);
+ }
+
+ @Override
+ public DebtRemediationFunction linearWithOffset(String factor, String offset) {
+ return create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, factor, offset);
+ }
+
+ @Override
+ public DebtRemediationFunction constantPerIssue(String offset) {
+ return create(DefaultDebtRemediationFunction.Type.CONSTANT_ISSUE, null, offset);
+ }
+
+ private DebtRemediationFunction create(DefaultDebtRemediationFunction.Type type, @Nullable String factor, @Nullable String offset) {
+ try {
+ return DefaultDebtRemediationFunction.create(type, factor, offset);
+ } catch (DefaultDebtRemediationFunction.ValidationException e) {
+ throw MessageException.of(String.format("The rule '%s:%s' is invalid : %s ", this.repoKey, this.key, e.getMessage()));
+ }
+ }
+
+}
private String effortToFixDescription;
private final Set<String> tags = Sets.newTreeSet();
private final Map<String, NewParam> paramsByKey = Maps.newHashMap();
+ private final DefaultDebtRemediationFunctions functions;
private NewRule(String repoKey, String key) {
this.repoKey = repoKey;
this.key = key;
+ this.functions = new DefaultDebtRemediationFunctions(repoKey, key);
}
public String key() {
return this;
}
+ public DebtRemediationFunctions debtRemediationFunctions() {
+ return functions;
+ }
+
public NewRule setDebtRemediationFunction(@Nullable DebtRemediationFunction debtRemediationFunction) {
this.debtRemediationFunction = debtRemediationFunction;
return this;
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-package org.sonar.api.batch.rule;
-
-import org.junit.Test;
-import org.sonar.api.utils.Duration;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-public class DebtRemediationFunctionTest {
-
- @Test
- public void create_linear() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createLinear(Duration.create(10));
- assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
- assertThat(function.factor()).isEqualTo(Duration.create(10));
- assertThat(function.offset()).isNull();
- }
-
- @Test
- public void create_linear_with_offset() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5));
- assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
- assertThat(function.factor()).isEqualTo(Duration.create(10));
- assertThat(function.offset()).isEqualTo(Duration.create(5));
- }
-
- @Test
- public void create_constant_per_issue() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createConstantPerIssue(Duration.create(10));
- assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE);
- assertThat(function.factor()).isNull();
- assertThat(function.offset()).isEqualTo(Duration.create(10));
- }
-
- @Test
- public void test_equals_and_hashcode() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5));
- DebtRemediationFunction functionWithSameValue = DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5));
- DebtRemediationFunction functionWithDifferentType = DebtRemediationFunction.createConstantPerIssue(Duration.create(5));
-
- assertThat(function).isEqualTo(function);
- assertThat(function).isEqualTo(functionWithSameValue);
- assertThat(function).isNotEqualTo(functionWithDifferentType);
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinearWithOffset(Duration.create(11), Duration.create(5)));
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(6)));
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinear(Duration.create(10)));
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createConstantPerIssue(Duration.create(6)));
-
- assertThat(function.hashCode()).isEqualTo(function.hashCode());
- assertThat(function.hashCode()).isEqualTo(functionWithSameValue.hashCode());
- assertThat(function.hashCode()).isNotEqualTo(functionWithDifferentType.hashCode());
- }
-
- @Test
- public void test_to_string() throws Exception {
- assertThat(DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5)).toString()).isNotNull();
- }
-}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.api.batch.rule;
+
+import org.junit.Test;
+import org.sonar.api.utils.Duration;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class DefaultDebtRemediationFunctionTest {
+
+ @Test
+ public void create_linear() throws Exception {
+ DebtRemediationFunction function = DebtRemediationFunction.createLinear(Duration.create(10));
+ assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
+ assertThat(function.factor()).isEqualTo(Duration.create(10));
+ assertThat(function.offset()).isNull();
+ }
+
+ @Test
+ public void create_linear_with_offset() throws Exception {
+ DebtRemediationFunction function = DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5));
+ assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
+ assertThat(function.factor()).isEqualTo(Duration.create(10));
+ assertThat(function.offset()).isEqualTo(Duration.create(5));
+ }
+
+ @Test
+ public void create_constant_per_issue() throws Exception {
+ DebtRemediationFunction function = DebtRemediationFunction.createConstantPerIssue(Duration.create(10));
+ assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE);
+ assertThat(function.factor()).isNull();
+ assertThat(function.offset()).isEqualTo(Duration.create(10));
+ }
+
+ @Test
+ public void test_equals_and_hashcode() throws Exception {
+ DebtRemediationFunction function = DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5));
+ DebtRemediationFunction functionWithSameValue = DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5));
+ DebtRemediationFunction functionWithDifferentType = DebtRemediationFunction.createConstantPerIssue(Duration.create(5));
+
+ assertThat(function).isEqualTo(function);
+ assertThat(function).isEqualTo(functionWithSameValue);
+ assertThat(function).isNotEqualTo(functionWithDifferentType);
+ assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinearWithOffset(Duration.create(11), Duration.create(5)));
+ assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(6)));
+ assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinear(Duration.create(10)));
+ assertThat(function).isNotEqualTo(DebtRemediationFunction.createConstantPerIssue(Duration.create(6)));
+
+ assertThat(function.hashCode()).isEqualTo(function.hashCode());
+ assertThat(function.hashCode()).isEqualTo(functionWithSameValue.hashCode());
+ assertThat(function.hashCode()).isNotEqualTo(functionWithDifferentType.hashCode());
+ }
+
+ @Test
+ public void test_to_string() throws Exception {
+ assertThat(DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5)).toString()).isNotNull();
+ }
+}
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-package org.sonar.api.server.rule;
-
-import org.junit.Test;
-
-import static org.fest.assertions.Assertions.assertThat;
-import static org.fest.assertions.Fail.fail;
-
-public class DebtRemediationFunctionTest {
-
- @Test
- public void create_linear() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createLinear("10h");
- assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
- assertThat(function.factor()).isEqualTo("10h");
- assertThat(function.offset()).isNull();
- }
-
- @Test
- public void create_linear_with_offset() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createLinearWithOffset("10h", "5min");
- assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
- assertThat(function.factor()).isEqualTo("10h");
- assertThat(function.offset()).isEqualTo("5min");
- }
-
- @Test
- public void create_constant_per_issue() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createConstantPerIssue("10h");
- assertThat(function.type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE);
- assertThat(function.factor()).isNull();
- assertThat(function.offset()).isEqualTo("10h");
- }
-
- @Test
- public void sanitize_remediation_factor_and_offset() {
- DebtRemediationFunction function = DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR_OFFSET, " 1 h ", " 10 mi n");
-
- assertThat(function.factor()).isEqualTo("1h");
- assertThat(function.offset()).isEqualTo("10min");
- }
-
- @Test
- public void fail_to_create_linear_when_no_factor() throws Exception {
- try {
- DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR, null, "10h");
- fail();
- } catch(Exception e) {
- assertThat(e).isInstanceOf(DebtRemediationFunction.ValidationException.class);
- }
- }
-
- @Test
- public void fail_to_create_linear_when_offset() throws Exception {
- try {
- DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR, "5min", "10h");
- fail();
- } catch(Exception e) {
- assertThat(e).isInstanceOf(DebtRemediationFunction.ValidationException.class);
- }
- }
-
- @Test
- public void fail_to_create_constant_per_issue_when_no_offset() throws Exception {
- try {
- DebtRemediationFunction.create(DebtRemediationFunction.Type.CONSTANT_ISSUE, "10h", null);
- fail();
- } catch(Exception e) {
- assertThat(e).isInstanceOf(DebtRemediationFunction.ValidationException.class);
- }
- }
-
- @Test
- public void fail_to_create_constant_per_issue_when_factor() throws Exception {
- try {
- DebtRemediationFunction.create(DebtRemediationFunction.Type.CONSTANT_ISSUE, "5min", "10h");
- fail();
- } catch(Exception e) {
- assertThat(e).isInstanceOf(DebtRemediationFunction.ValidationException.class);
- }
- }
-
- @Test
- public void fail_to_create_linear_with_offset_when_no_factor() throws Exception {
- try {
- DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR_OFFSET, null, "10h");
- fail();
- } catch(Exception e) {
- assertThat(e).isInstanceOf(DebtRemediationFunction.ValidationException.class);
- }
- }
-
- @Test
- public void fail_to_create_linear_with_offset_when_no_offset() throws Exception {
- try {
- DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR_OFFSET, "5min", null);
- fail();
- } catch(Exception e) {
- assertThat(e).isInstanceOf(DebtRemediationFunction.ValidationException.class);
- }
- }
-
- @Test
- public void test_equals_and_hashcode() throws Exception {
- DebtRemediationFunction function = DebtRemediationFunction.createLinearWithOffset("10h", "5min");
- DebtRemediationFunction functionWithSameValue = DebtRemediationFunction.createLinearWithOffset("10h", "5min");
- DebtRemediationFunction functionWithDifferentType = DebtRemediationFunction.createConstantPerIssue("5min");
-
- assertThat(function).isEqualTo(function);
- assertThat(function).isEqualTo(functionWithSameValue);
- assertThat(function).isNotEqualTo(functionWithDifferentType);
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinearWithOffset("11h", "5min"));
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinearWithOffset("10h", "6min"));
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createLinear("10h"));
- assertThat(function).isNotEqualTo(DebtRemediationFunction.createConstantPerIssue("6min"));
-
- assertThat(function.hashCode()).isEqualTo(function.hashCode());
- assertThat(function.hashCode()).isEqualTo(functionWithSameValue.hashCode());
- assertThat(function.hashCode()).isNotEqualTo(functionWithDifferentType.hashCode());
- }
-
- @Test
- public void test_to_string() throws Exception {
- assertThat(DebtRemediationFunction.createLinearWithOffset("10h", "5min").toString()).isNotNull();
- }
-
-}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.api.server.rule;
+
+import org.junit.Test;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
+
+public class DefaultDebtRemediationFunctionTest {
+
+ @Test
+ public void create_linear() throws Exception {
+ DebtRemediationFunction function = DefaultDebtRemediationFunction.createLinear("10h");
+ assertThat(function.type()).isEqualTo(DefaultDebtRemediationFunction.Type.LINEAR);
+ assertThat(function.factor()).isEqualTo("10h");
+ assertThat(function.offset()).isNull();
+ }
+
+ @Test
+ public void create_linear_with_offset() throws Exception {
+ DebtRemediationFunction function = DefaultDebtRemediationFunction.createLinearWithOffset("10h", "5min");
+ assertThat(function.type()).isEqualTo(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET);
+ assertThat(function.factor()).isEqualTo("10h");
+ assertThat(function.offset()).isEqualTo("5min");
+ }
+
+ @Test
+ public void create_constant_per_issue() throws Exception {
+ DebtRemediationFunction function = DefaultDebtRemediationFunction.createConstantPerIssue("10h");
+ assertThat(function.type()).isEqualTo(DefaultDebtRemediationFunction.Type.CONSTANT_ISSUE);
+ assertThat(function.factor()).isNull();
+ assertThat(function.offset()).isEqualTo("10h");
+ }
+
+ @Test
+ public void sanitize_remediation_factor_and_offset() {
+ DebtRemediationFunction function = DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, " 1 h ", " 10 mi n");
+
+ assertThat(function.factor()).isEqualTo("1h");
+ assertThat(function.offset()).isEqualTo("10min");
+ }
+
+ @Test
+ public void fail_to_create_linear_when_no_factor() throws Exception {
+ try {
+ DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR, null, "10h");
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(DefaultDebtRemediationFunction.ValidationException.class);
+ }
+ }
+
+ @Test
+ public void fail_to_create_linear_when_offset() throws Exception {
+ try {
+ DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR, "5min", "10h");
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(DefaultDebtRemediationFunction.ValidationException.class);
+ }
+ }
+
+ @Test
+ public void fail_to_create_constant_per_issue_when_no_offset() throws Exception {
+ try {
+ DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.CONSTANT_ISSUE, "10h", null);
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(DefaultDebtRemediationFunction.ValidationException.class);
+ }
+ }
+
+ @Test
+ public void fail_to_create_constant_per_issue_when_factor() throws Exception {
+ try {
+ DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.CONSTANT_ISSUE, "5min", "10h");
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(DefaultDebtRemediationFunction.ValidationException.class);
+ }
+ }
+
+ @Test
+ public void fail_to_create_linear_with_offset_when_no_factor() throws Exception {
+ try {
+ DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, null, "10h");
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(DefaultDebtRemediationFunction.ValidationException.class);
+ }
+ }
+
+ @Test
+ public void fail_to_create_linear_with_offset_when_no_offset() throws Exception {
+ try {
+ DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, "5min", null);
+ fail();
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(DefaultDebtRemediationFunction.ValidationException.class);
+ }
+ }
+
+ @Test
+ public void test_equals_and_hashcode() throws Exception {
+ DebtRemediationFunction function = DefaultDebtRemediationFunction.createLinearWithOffset("10h", "5min");
+ DebtRemediationFunction functionWithSameValue = DefaultDebtRemediationFunction.createLinearWithOffset("10h", "5min");
+ DebtRemediationFunction functionWithDifferentType = DefaultDebtRemediationFunction.createConstantPerIssue("5min");
+
+ assertThat(function).isEqualTo(function);
+ assertThat(function).isEqualTo(functionWithSameValue);
+ assertThat(function).isNotEqualTo(functionWithDifferentType);
+ assertThat(function).isNotEqualTo(DefaultDebtRemediationFunction.createLinearWithOffset("11h", "5min"));
+ assertThat(function).isNotEqualTo(DefaultDebtRemediationFunction.createLinearWithOffset("10h", "6min"));
+ assertThat(function).isNotEqualTo(DefaultDebtRemediationFunction.createLinear("10h"));
+ assertThat(function).isNotEqualTo(DefaultDebtRemediationFunction.createConstantPerIssue("6min"));
+
+ assertThat(function.hashCode()).isEqualTo(function.hashCode());
+ assertThat(function.hashCode()).isEqualTo(functionWithSameValue.hashCode());
+ assertThat(function.hashCode()).isNotEqualTo(functionWithDifferentType.hashCode());
+ }
+
+ @Test
+ public void test_to_string() throws Exception {
+ assertThat(DefaultDebtRemediationFunction.createLinearWithOffset("10h", "5min").toString()).isNotNull();
+ }
+
+}
.setInternalKey("/something")
.setStatus(RuleStatus.BETA)
.setDebtCharacteristic("COMPILER")
- .setDebtRemediationFunction(DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "10min"))
+ .setDebtRemediationFunction(DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "10min"))
.setEffortToFixDescription("squid.S115.effortToFix")
.setTags("one", "two")
.addTags("two", "three", "four");
assertThat(npeRule.template()).isFalse();
assertThat(npeRule.status()).isEqualTo(RuleStatus.BETA);
assertThat(npeRule.debtCharacteristic()).isEqualTo("COMPILER");
- assertThat(npeRule.debtRemediationFunction()).isEqualTo(DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "10min"));
+ assertThat(npeRule.debtRemediationFunction()).isEqualTo(DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "10min"));
assertThat(npeRule.effortToFixDescription()).isEqualTo("squid.S115.effortToFix");
assertThat(npeRule.toString()).isEqualTo("[repository=findbugs, key=NPE]");
assertThat(npeRule.repository()).isSameAs(findbugs);
RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java");
newRepository.createRule("NPE").setName("NPE").setHtmlDescription("Detect <code>java.lang.NullPointerException</code>")
.setDebtCharacteristic("")
- .setDebtRemediationFunction(DebtRemediationFunction.create(DebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "10min"));
+ .setDebtRemediationFunction(DefaultDebtRemediationFunction.create(DefaultDebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "10min"));
try {
newRepository.done();
fail();
import org.sonar.api.rule.RuleKey;
import org.sonar.api.server.rule.DebtRemediationFunction;
import org.sonar.api.utils.Duration;
-import org.sonar.api.utils.MessageException;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
}
}
if (StringUtils.isNotBlank(ruleRepositoryKey) && StringUtils.isNotBlank(ruleKey)) {
- return processRule(RuleKey.of(ruleRepositoryKey, ruleKey), properties);
+ return createRule(RuleKey.of(ruleRepositoryKey, ruleKey), properties);
}
return null;
}
return new Property(key, value, textValue);
}
- @CheckForNull
- private RuleDebt processRule(RuleKey ruleKey, Properties properties) {
- try {
- return createRule(ruleKey, properties);
- } catch (DebtRemediationFunction.ValidationException e) {
- throw MessageException.of(String.format("Rule '%s' is invalid : %s", ruleKey, e.getMessage()));
- }
- }
-
@CheckForNull
private RuleDebt createRule(RuleKey ruleKey, Properties properties) {
Property function = properties.function();
private RuleDebt createRuleDebt(RuleKey ruleKey, String function, @Nullable String factor, @Nullable String offset) {
if ("linear_threshold".equals(function) && factor != null) {
LOG.warn(String.format("Linear with threshold function is no longer used, remediation function of '%s' is replaced by linear.", ruleKey));
- return new RuleDebt().setRuleKey(ruleKey).setFunction(DebtRemediationFunction.createLinear(factor));
+ return new RuleDebt().setRuleKey(ruleKey).setType(DebtRemediationFunction.Type.LINEAR).setFactor(factor);
} else if ("constant_resource".equals(function)) {
LOG.warn(String.format("Constant/file function is no longer used, technical debt definitions on '%s' are ignored.", ruleKey));
} else if (DebtRemediationFunction.Type.CONSTANT_ISSUE.name().equalsIgnoreCase(function) && factor != null && offset == null) {
- return new RuleDebt().setRuleKey(ruleKey).setFunction(DebtRemediationFunction.createConstantPerIssue(factor));
+ return new RuleDebt().setRuleKey(ruleKey).setType(DebtRemediationFunction.Type.CONSTANT_ISSUE).setOffset(factor);
} else {
- return new RuleDebt().setRuleKey(ruleKey).setFunction(DebtRemediationFunction.create(DebtRemediationFunction.Type.valueOf(function.toUpperCase()), factor, offset));
+ return new RuleDebt().setRuleKey(ruleKey).setType(DebtRemediationFunction.Type.valueOf(function.toUpperCase())).setFactor(factor).setOffset(offset);
}
return null;
}
public static class RuleDebt {
private RuleKey ruleKey;
private String characteristicKey;
- private DebtRemediationFunction function;
+ private DebtRemediationFunction.Type type;
+ private String factor;
+ private String offset;
public RuleKey ruleKey() {
return ruleKey;
return this;
}
- public DebtRemediationFunction function() {
- return function;
+ public DebtRemediationFunction.Type type() {
+ return type;
+ }
+
+ public RuleDebt setType(DebtRemediationFunction.Type type) {
+ this.type = type;
+ return this;
+ }
+
+ @CheckForNull
+ public String factor() {
+ return factor;
+ }
+
+ public RuleDebt setFactor(@Nullable String factor) {
+ this.factor = factor;
+ return this;
+ }
+
+ @CheckForNull
+ public String offset() {
+ return offset;
}
- public RuleDebt setFunction(DebtRemediationFunction function) {
- this.function = function;
+ public RuleDebt setOffset(@Nullable String offset) {
+ this.offset = offset;
return this;
}
}
DebtRulesXMLImporter.RuleDebt ruleDebt = findRequirement(ruleDebts, repoKey, ruleKey);
if (ruleDebt != null) {
newRule.setDebtCharacteristic(ruleDebt.characteristicKey());
- newRule.setDebtRemediationFunction(ruleDebt.function());
+ switch (ruleDebt.type()) {
+ case LINEAR :
+ newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().linear(ruleDebt.factor()));
+ break;
+ case LINEAR_OFFSET:
+ newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().linearWithOffset(ruleDebt.factor(), ruleDebt.offset()));
+ break;
+ case CONSTANT_ISSUE:
+ newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().constantPerIssue(ruleDebt.offset()));
+ break;
+ default :
+ throw new IllegalArgumentException(String.format("The type '%s' is unknown", ruleDebt.type()));
+ }
}
}
*/
private void removeActiveRulesOnStillExistingRepositories(List<RuleDto> removedRules, RulesDefinition.Context context) {
List<String> repositoryKeys = newArrayList(Iterables.transform(context.repositories(), new Function<RulesDefinition.Repository, String>() {
- @Override
- public String apply(RulesDefinition.Repository input) {
- return input.key();
+ @Override
+ public String apply(RulesDefinition.Repository input) {
+ return input.key();
+ }
}
- }
));
for (RuleDto rule : removedRules) {
import org.junit.Test;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.server.rule.DebtRemediationFunction;
-import org.sonar.api.utils.MessageException;
import java.io.IOException;
import java.util.List;
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
assertThat(ruleDebt.ruleKey()).isEqualTo(RuleKey.of("checkstyle", "Regexp"));
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinear("3h"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
+ assertThat(ruleDebt.factor()).isEqualTo("3h");
+ assertThat(ruleDebt.offset()).isNull();
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
assertThat(ruleDebt.ruleKey()).isEqualTo(RuleKey.of("checkstyle", "Regexp"));
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinear("3h"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
+ assertThat(ruleDebt.factor()).isEqualTo("3h");
+ assertThat(ruleDebt.offset()).isNull();
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinearWithOffset("3h", "1min"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
+ assertThat(ruleDebt.factor()).isEqualTo("3h");
+ assertThat(ruleDebt.offset()).isEqualTo("1min");
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createConstantPerIssue("3d"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE);
+ assertThat(ruleDebt.factor()).isNull();
+ assertThat(ruleDebt.offset()).isEqualTo("3d");
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinearWithOffset("3d", "1d"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
+ assertThat(ruleDebt.factor()).isEqualTo("3d");
+ assertThat(ruleDebt.offset()).isEqualTo("1d");
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinear("3min"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
+ assertThat(ruleDebt.factor()).isEqualTo("3min");
+ assertThat(ruleDebt.offset()).isNull();
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinear("3h"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.LINEAR);
+ assertThat(ruleDebt.factor()).isEqualTo("3h");
+ assertThat(ruleDebt.offset()).isNull();
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createConstantPerIssue("3h"));
+ assertThat(ruleDebt.type()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE);
+ assertThat(ruleDebt.factor()).isNull();
+ assertThat(ruleDebt.offset()).isEqualTo("3h");
}
@Test
DebtRulesXMLImporter.RuleDebt ruleDebt = results.get(0);
assertThat(ruleDebt.characteristicKey()).isEqualTo("MEMORY_EFFICIENCY");
assertThat(ruleDebt.ruleKey()).isEqualTo(RuleKey.of("checkstyle", "Regexp"));
- assertThat(ruleDebt.function()).isEqualTo(DebtRemediationFunction.createLinear("3h"));
+ assertThat(ruleDebt.type()).isEqualTo(org.sonar.api.server.rule.DebtRemediationFunction.Type.LINEAR);
+ assertThat(ruleDebt.factor()).isEqualTo("3h");
+ assertThat(ruleDebt.offset()).isNull();
}
@Test
assertThat(results).isEmpty();
}
- @Test
- public void fail_to_import_linear_having_offset() throws Exception {
- String xml = getFileContent("fail_to_import_linear_having_offset.xml");
- try {
- importer.importXML(xml);
- fail();
- } catch (Exception e) {
- assertThat(e).isInstanceOf(MessageException.class);
- }
- }
-
@Test
public void fail_on_bad_xml() {
String xml = getFileContent("fail_on_bad_xml.xml");
try {
new DebtCharacteristicsXMLImporter().importXML(xml);
fail();
- } catch (Exception e){
+ } catch (Exception e) {
assertThat(e).isInstanceOf(IllegalStateException.class);
}
}
new DebtRulesXMLImporter.RuleDebt()
.setCharacteristicKey("MEMORY_EFFICIENCY")
.setRuleKey(RuleKey.of("checkstyle", "ConstantName"))
- .setFunction(DebtRemediationFunction.createLinearWithOffset("1d", "10min")
- ));
+ .setType(DebtRemediationFunction.Type.LINEAR_OFFSET)
+ .setFactor("1d")
+ .setOffset("10min")
+ );
Reader javaModelReader = mock(Reader.class);
when(debtModelRepository.createReaderForXMLFile("java")).thenReturn(javaModelReader);
assertThat(rule).isNotNull();
assertThat(rule.key()).isEqualTo("ConstantName");
assertThat(rule.debtCharacteristic()).isEqualTo("MEMORY_EFFICIENCY");
- assertThat(rule.debtRemediationFunction()).isEqualTo(DebtRemediationFunction.createLinearWithOffset("1d", "10min"));
+ assertThat(rule.debtRemediationFunction().type()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET);
+ assertThat(rule.debtRemediationFunction().factor()).isEqualTo("1d");
+ assertThat(rule.debtRemediationFunction().offset()).isEqualTo("10min");
}
}
import org.junit.Test;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
-import org.sonar.api.server.rule.DebtRemediationFunction;
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.MessageException;
public void insert_extended_repositories() {
task = new RuleRegistration(new RuleDefinitionsLoader(mock(RuleRepositories.class), new RulesDefinition[]{
new FindbugsRepository(), new FbContribRepository()}),
- profilesManager, ruleRegistry, esRuleTags, ruleTagOperations, myBatis, ruleDao, ruleTagDao, activeRuleDao, characteristicDao, mock(RegisterDebtModel.class));
+ profilesManager, ruleRegistry, esRuleTags, ruleTagOperations, myBatis, ruleDao, ruleTagDao, activeRuleDao, characteristicDao, mock(RegisterDebtModel.class)
+ );
setupData("empty");
task.start();
.setName("One")
.setHtmlDescription("Description of One")
.setSeverity(Severity.BLOCKER)
- .setDebtCharacteristic("MEMORY_EFFICIENCY")
- .setDebtRemediationFunction(DebtRemediationFunction.createLinearWithOffset("5d", "10h"))
- .setEffortToFixDescription("squid.S115.effortToFix")
.setInternalKey("config1")
.setTags("tag1", "tag3", "tag5");
+
+ rule1.setDebtCharacteristic("MEMORY_EFFICIENCY")
+ .setDebtRemediationFunction(rule1.debtRemediationFunctions().linearWithOffset("5d", "10h"))
+ .setEffortToFixDescription("squid.S115.effortToFix");
+
rule1.createParam("param1").setDescription("parameter one").setDefaultValue("default value one");
rule1.createParam("param2").setDescription("parameter two").setDefaultValue("default value two");
+++ /dev/null
-<!--
- ~ SonarQube, open source software quality management tool.
- ~ Copyright (C) 2008-2014 SonarSource
- ~ mailto:contact AT sonarsource DOT com
- ~
- ~ SonarQube 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.
- ~
- ~ SonarQube 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 this program; if not, write to the Free Software Foundation,
- ~ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- -->
-
-<sqale>
- <chc>
- <key>USABILITY</key>
- <name>Usability</name>
- <desc>Estimate usability</desc>
- </chc>
- <chc>
- <key>EFFICIENCY</key>
- <name>Efficiency</name>
- <chc>
- <key>MEMORY_EFFICIENCY</key>
- <name>Memory use</name>
- <chc>
- <rule-repo>checkstyle</rule-repo>
- <rule-key>Regexp</rule-key>
- <prop>
- <key>offset</key>
- <val>3.0</val>
- <txt>h</txt>
- </prop>
- <prop>
- <key>remediationFunction</key>
- <txt>linear</txt>
- </prop>
- </chc>
- </chc>
- </chc>
-
-</sqale>