@Override
public void define(Context context) {
- NewRepository repository = context.newRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo");
+ NewRepository repository = context.createRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo");
// define a single rule programmatically. Note that rules
// can be loaded from JSON or XML files too.
- NewRule x1Rule = repository.newRule("x1")
+ NewRule x1Rule = repository.createRule("x1")
.setName("No empty line")
.setHtmlDescription("Generate an issue on empty lines of Xoo source files")
// default severity when the rule is activated on a Quality profile. Default value is MAJOR.
.setSeverity(Severity.MINOR);
- x1Rule.newParam("acceptWhitespace")
+ x1Rule.createParam("acceptWhitespace")
.setDefaultValue("false")
.setType(RuleParamType.BOOLEAN)
.setDescription("Accept whitespaces on the line");
* <p/>
* This interface replaces the deprecated class org.sonar.api.rules.RuleRepository.
*
- * @since 4.2
+ * @since 4.3
*/
public interface RuleDefinitions extends ServerExtension {
private final ListMultimap<String, ExtendedRepository> extendedRepositoriesByKey = ArrayListMultimap.create();
- public NewRepository newRepository(String key, String language) {
+ public NewRepository createRepository(String key, String language) {
return new NewRepositoryImpl(this, key, language, false);
}
}
interface NewExtendedRepository {
- NewRule newRule(String ruleKey);
+ NewRule createRule(String ruleKey);
/**
* Reads definition of rule from the annotations provided by the library sonar-check-api.
}
@Override
- public NewRule newRule(String ruleKey) {
+ public NewRule createRule(String ruleKey) {
if (newRules.containsKey(ruleKey)) {
// Should fail in a perfect world, but at the time being the Findbugs plugin
// defines several times the rule EC_INCOMPATIBLE_ARRAY_COMPARE
return this;
}
- public NewParam newParam(String paramKey) {
+ public NewParam createParam(String paramKey) {
if (paramsByKey.containsKey(paramKey)) {
throw new IllegalArgumentException(String.format("The parameter '%s' is declared several times on the rule %s", paramKey, this));
}
String ruleName = StringUtils.defaultIfEmpty(ruleAnnotation.name(), null);
String description = StringUtils.defaultIfEmpty(ruleAnnotation.description(), null);
- RuleDefinitions.NewRule rule = repo.newRule(ruleKey);
+ RuleDefinitions.NewRule rule = repo.createRule(ruleKey);
rule.setName(ruleName).setHtmlDescription(description);
rule.setSeverity(ruleAnnotation.priority().name());
rule.setTemplate(ruleAnnotation.cardinality() == Cardinality.MULTIPLE);
org.sonar.check.RuleProperty propertyAnnotation = field.getAnnotation(org.sonar.check.RuleProperty.class);
if (propertyAnnotation != null) {
String fieldKey = StringUtils.defaultIfEmpty(propertyAnnotation.key(), field.getName());
- RuleDefinitions.NewParam param = rule.newParam(fieldKey)
+ RuleDefinitions.NewParam param = rule.createParam(fieldKey)
.setDescription(propertyAnnotation.description())
.setDefaultValue(propertyAnnotation.defaultValue());
tags.add(StringUtils.trim(cursor.collectDescendantText(false)));
}
}
- RuleDefinitions.NewRule rule = repo.newRule(key)
+ RuleDefinitions.NewRule rule = repo.createRule(key)
.setHtmlDescription(description)
.setSeverity(severity)
.setName(name)
rule.setStatus(RuleStatus.valueOf(status));
}
for (ParamStruct param : params) {
- rule.newParam(param.key)
+ rule.createParam(param.key)
.setDefaultValue(param.defaultValue)
.setType(param.type)
.setDescription(param.description);
*/
package org.sonar.api.server.rule;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.rule.RuleStatus;
@Test
public void override_annotation_programmatically() {
RuleDefinitions.Context context = new RuleDefinitions.Context();
- RuleDefinitions.NewRepository newRepository = context.newRepository("squid", "java");
+ RuleDefinitions.NewRepository newRepository = context.createRepository("squid", "java");
NewRule newRule = newRepository.loadAnnotatedClass(RuleWithProperty.class);
newRule.setName("Overriden name");
newRule.param("property").setDefaultValue("true");
private RuleDefinitions.Repository load(Class annotatedClass) {
RuleDefinitions.Context context = new RuleDefinitions.Context();
- RuleDefinitions.NewExtendedRepository newRepository = context.newRepository("squid", "java")
+ RuleDefinitions.NewExtendedRepository newRepository = context.createRepository("squid", "java")
.loadAnnotatedClasses(annotatedClass);
newRepository.done();
return context.repository("squid");
private RuleDefinitions.Repository load(Reader reader) {
RuleDefinitions.Context context = new RuleDefinitions.Context();
- RuleDefinitions.NewRepository newRepository = context.newRepository("squid", "java");
+ RuleDefinitions.NewRepository newRepository = context.createRepository("squid", "java");
new RuleDefinitionsFromXml().loadRules(newRepository, reader);
newRepository.done();
return context.repository("squid");
public void define_repositories() throws Exception {
assertThat(context.repositories()).isEmpty();
- context.newRepository("findbugs", "java").setName("Findbugs").done();
- context.newRepository("checkstyle", "java").done();
+ context.createRepository("findbugs", "java").setName("Findbugs").done();
+ context.createRepository("checkstyle", "java").done();
assertThat(context.repositories()).hasSize(2);
RuleDefinitions.Repository findbugs = context.repository("findbugs");
@Test
public void define_rules() {
- RuleDefinitions.NewRepository newFindbugs = context.newRepository("findbugs", "java");
- newFindbugs.newRule("NPE")
+ RuleDefinitions.NewRepository newFindbugs = context.createRepository("findbugs", "java");
+ newFindbugs.createRule("NPE")
.setName("Detect NPE")
- .setHtmlDescription("Detect <code>NPE</code>")
.setHtmlDescription("Detect <code>java.lang.NullPointerException</code>")
.setSeverity(Severity.BLOCKER)
.setInternalKey("/something")
.setEffortToFixL10nKey("squid.S115.effortToFix")
.setTags("one", "two")
.addTags("two", "three", "four");
- newFindbugs.newRule("ABC").setName("ABC").setHtmlDescription("ABC");
+ newFindbugs.createRule("ABC").setName("ABC").setHtmlDescription("ABC");
newFindbugs.done();
RuleDefinitions.Repository findbugs = context.repository("findbugs");
@Test
public void define_rule_with_default_fields() {
- RuleDefinitions.NewRepository newFindbugs = context.newRepository("findbugs", "java");
- newFindbugs.newRule("NPE").setName("NPE").setHtmlDescription("NPE");
+ RuleDefinitions.NewRepository newFindbugs = context.createRepository("findbugs", "java");
+ newFindbugs.createRule("NPE").setName("NPE").setHtmlDescription("NPE");
newFindbugs.done();
RuleDefinitions.Rule rule = context.repository("findbugs").rule("NPE");
@Test
public void define_rule_parameters() {
- RuleDefinitions.NewRepository newFindbugs = context.newRepository("findbugs", "java");
- RuleDefinitions.NewRule newNpe = newFindbugs.newRule("NPE").setName("NPE").setHtmlDescription("NPE");
- newNpe.newParam("level").setDefaultValue("LOW").setName("Level").setDescription("The level").setType(RuleParamType.INTEGER);
- newNpe.newParam("effort");
+ RuleDefinitions.NewRepository newFindbugs = context.createRepository("findbugs", "java");
+ RuleDefinitions.NewRule newNpe = newFindbugs.createRule("NPE").setName("NPE").setHtmlDescription("NPE");
+ newNpe.createParam("level").setDefaultValue("LOW").setName("Level").setDescription("The level").setType(RuleParamType.INTEGER);
+ newNpe.createParam("effort");
newFindbugs.done();
RuleDefinitions.Rule rule = context.repository("findbugs").rule("NPE");
@Test
public void sanitize_rule_name() {
- RuleDefinitions.NewRepository newFindbugs = context.newRepository("findbugs", "java");
- newFindbugs.newRule("NPE").setName(" \n NullPointer \n ").setHtmlDescription("NPE");
+ RuleDefinitions.NewRepository newFindbugs = context.createRepository("findbugs", "java");
+ newFindbugs.createRule("NPE").setName(" \n NullPointer \n ").setHtmlDescription("NPE");
newFindbugs.done();
RuleDefinitions.Rule rule = context.repository("findbugs").rule("NPE");
@Test
public void sanitize_remediation_factor_and_offset() {
- RuleDefinitions.NewRepository newFindbugs = context.newRepository("findbugs", "java");
- newFindbugs.newRule("NPE")
+ RuleDefinitions.NewRepository newFindbugs = context.createRepository("findbugs", "java");
+ newFindbugs.createRule("NPE")
.setName("Detect NPE")
.setHtmlDescription("NPE")
.setRemediationFactor(" 1 h ")
// for example fb-contrib
RuleDefinitions.NewExtendedRepository newFindbugs = context.extendRepository("findbugs", "java");
- newFindbugs.newRule("NPE").setName("NPE").setHtmlDescription("NPE");
+ newFindbugs.createRule("NPE").setName("NPE").setHtmlDescription("NPE");
newFindbugs.done();
assertThat(context.repositories()).isEmpty();
@Test
public void cant_set_blank_repository_name() throws Exception {
- context.newRepository("findbugs", "java").setName(null).done();
+ context.createRepository("findbugs", "java").setName(null).done();
assertThat(context.repository("findbugs").name()).isEqualTo("findbugs");
}
@Test
public void fail_if_duplicated_repo_keys() {
- context.newRepository("findbugs", "java").done();
+ context.createRepository("findbugs", "java").done();
try {
- context.newRepository("findbugs", "whatever_the_language").done();
+ context.createRepository("findbugs", "whatever_the_language").done();
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(IllegalStateException.class).hasMessage("The rule repository 'findbugs' is defined several times");
@Test
public void warning_if_duplicated_rule_keys() {
- RuleDefinitions.NewRepository findbugs = context.newRepository("findbugs", "java");
- findbugs.newRule("NPE");
- findbugs.newRule("NPE");
+ RuleDefinitions.NewRepository findbugs = context.createRepository("findbugs", "java");
+ findbugs.createRule("NPE");
+ findbugs.createRule("NPE");
// do not fail as long as http://jira.codehaus.org/browse/SONARJAVA-428 is not fixed
}
@Test
public void fail_if_duplicated_rule_param_keys() {
- RuleDefinitions.NewRule rule = context.newRepository("findbugs", "java").newRule("NPE");
- rule.newParam("level");
+ RuleDefinitions.NewRule rule = context.createRepository("findbugs", "java").createRule("NPE");
+ rule.createParam("level");
try {
- rule.newParam("level");
+ rule.createParam("level");
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The parameter 'level' is declared several times on the rule [repository=findbugs, key=NPE]");
@Test
public void fail_if_blank_rule_name() {
- RuleDefinitions.NewRepository newRepository = context.newRepository("findbugs", "java");
- newRepository.newRule("NPE").setName(null).setHtmlDescription("NPE");
+ RuleDefinitions.NewRepository newRepository = context.createRepository("findbugs", "java");
+ newRepository.createRule("NPE").setName(null).setHtmlDescription("NPE");
try {
newRepository.done();
fail();
public void fail_if_bad_rule_tag() {
try {
// whitespaces are not allowed in tags
- context.newRepository("findbugs", "java").newRule("NPE").setTags("coding style");
+ context.createRepository("findbugs", "java").createRule("NPE").setTags("coding style");
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(IllegalArgumentException.class)
@Test
public void load_rule_description_from_file() {
- RuleDefinitions.NewRepository newRepository = context.newRepository("findbugs", "java");
- newRepository.newRule("NPE").setName("NPE").setHtmlDescription(getClass().getResource("/org/sonar/api/server/rule/RuleDefinitionsTest/sample.html"));
+ RuleDefinitions.NewRepository newRepository = context.createRepository("findbugs", "java");
+ newRepository.createRule("NPE").setName("NPE").setHtmlDescription(getClass().getResource("/org/sonar/api/server/rule/RuleDefinitionsTest/sample.html"));
newRepository.done();
RuleDefinitions.Rule rule = context.repository("findbugs").rule("NPE");
@Test
public void fail_to_load_rule_description_from_file() {
- RuleDefinitions.NewRepository newRepository = context.newRepository("findbugs", "java");
- newRepository.newRule("NPE").setName("NPE").setHtmlDescription((URL)null);
+ RuleDefinitions.NewRepository newRepository = context.createRepository("findbugs", "java");
+ newRepository.createRule("NPE").setName("NPE").setHtmlDescription((URL)null);
try {
newRepository.done();
fail();
@Test
public void fail_if_blank_rule_html_description() {
- RuleDefinitions.NewRepository newRepository = context.newRepository("findbugs", "java");
- newRepository.newRule("NPE").setName("NPE").setHtmlDescription((String)null);
+ RuleDefinitions.NewRepository newRepository = context.createRepository("findbugs", "java");
+ newRepository.createRule("NPE").setName("NPE").setHtmlDescription((String)null);
try {
newRepository.done();
fail();
@Test
public void fail_if_bad_rule_severity() {
try {
- context.newRepository("findbugs", "java").newRule("NPE").setSeverity("VERY HIGH");
+ context.createRepository("findbugs", "java").createRule("NPE").setSeverity("VERY HIGH");
fail();
} catch (IllegalArgumentException e) {
assertThat(e).hasMessage("Severity of rule [repository=findbugs, key=NPE] is not correct: VERY HIGH");
@Test
public void fail_if_removed_status() {
try {
- context.newRepository("findbugs", "java").newRule("NPE").setStatus(RuleStatus.REMOVED);
+ context.createRepository("findbugs", "java").createRule("NPE").setStatus(RuleStatus.REMOVED);
fail();
} catch (IllegalArgumentException e) {
assertThat(e).hasMessage("Status 'REMOVED' is not accepted on rule '[repository=findbugs, key=NPE]'");
@Ignore("TODO")
public void fail_if_bad_remediation_factor_or_offset() {
try {
- context.newRepository("findbugs", "java").newRule("NPE").setRemediationFactor("ten hours");
+ context.createRepository("findbugs", "java").createRule("NPE").setRemediationFactor("ten hours");
fail();
} catch (IllegalArgumentException e) {
assertThat(e).hasMessage("Duration 'ten hours' is invalid, it should use the following sample format : 2d 10h 15min");
}
try {
- context.newRepository("findbugs", "java").newRule("NPE").setRemediationOffset("ten hours");
+ context.createRepository("findbugs", "java").createRule("NPE").setRemediationOffset("ten hours");
fail();
} catch (IllegalArgumentException e) {
assertThat(e).hasMessage("Duration 'ten hours' is invalid, it should use the following sample format : 2d 10h 15min");
// RuleRepository API does not handle difference between new and extended repositories,
NewRepository newRepository;
if (context.repository(repository.getKey()) == null) {
- newRepository = context.newRepository(repository.getKey(), repository.getLanguage());
+ newRepository = context.createRepository(repository.getKey(), repository.getLanguage());
newRepository.setName(repository.getName());
} else {
newRepository = (NewRepository) context.extendRepository(repository.getKey(), repository.getLanguage());
}
for (org.sonar.api.rules.Rule rule : repository.createRules()) {
- NewRule newRule = newRepository.newRule(rule.getKey());
+ NewRule newRule = newRepository.createRule(rule.getKey());
newRule.setName(ruleName(repository.getKey(), rule));
newRule.setHtmlDescription(ruleDescription(repository.getKey(), rule));
newRule.setInternalKey(rule.getConfigKey());
newRule.setStatus(rule.getStatus() == null ? RuleStatus.defaultStatus() : RuleStatus.valueOf(rule.getStatus()));
newRule.setTags(rule.getTags());
for (RuleParam param : rule.getParams()) {
- NewParam newParam = newRule.newParam(param.getKey());
+ NewParam newParam = newRule.createParam(param.getKey());
newParam.setDefaultValue(param.getDefaultValue());
newParam.setDescription(paramDescription(repository.getKey(), rule.getKey(), param));
newParam.setType(RuleParamType.parse(param.getType()));
static class FindbugsDefinitions implements RuleDefinitions {
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("findbugs", "java");
+ NewRepository repo = context.createRepository("findbugs", "java");
repo.setName("Findbugs");
- repo.newRule("ABC")
+ repo.createRule("ABC")
.setName("ABC")
.setHtmlDescription("Description of ABC");
repo.done();
static class SquidDefinitions implements RuleDefinitions {
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("squid", "java");
+ NewRepository repo = context.createRepository("squid", "java");
repo.setName("Squid");
- repo.newRule("DEF")
+ repo.createRule("DEF")
.setName("DEF")
.setHtmlDescription("Description of DEF");
repo.done();
static class FakeRepository implements RuleDefinitions {
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("fake", "java");
+ NewRepository repo = context.createRepository("fake", "java");
- NewRule rule1 = repo.newRule("rule1")
+ NewRule rule1 = repo.createRule("rule1")
.setName("One")
.setHtmlDescription("Description of One")
.setSeverity(Severity.BLOCKER)
.setEffortToFixL10nKey("squid.S115.effortToFix")
.setInternalKey("config1")
.setTags("tag1", "tag3", "tag5");
- rule1.newParam("param1").setDescription("parameter one").setDefaultValue("default value one");
- rule1.newParam("param2").setDescription("parameter two").setDefaultValue("default value two");
+ rule1.createParam("param1").setDescription("parameter one").setDefaultValue("default value one");
+ rule1.createParam("param2").setDescription("parameter two").setDefaultValue("default value two");
- repo.newRule("rule2")
+ repo.createRule("rule2")
.setName("Two")
.setHtmlDescription("Description of Two")
.setSeverity(Severity.INFO)
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("big", "java");
+ NewRepository repo = context.createRepository("big", "java");
for (int i = 0; i < SIZE; i++) {
- NewRule rule = repo.newRule("rule" + i)
+ NewRule rule = repo.createRule("rule" + i)
.setName("name of " + i)
.setHtmlDescription("description of " + i)
.setSeverity(Severity.BLOCKER)
.setInternalKey("config1")
.setTags("tag1", "tag3", "tag5");
for (int j = 0; j < 20; j++) {
- rule.newParam("param" + j);
+ rule.createParam("param" + j);
}
}
static class FindbugsRepository implements RuleDefinitions {
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("findbugs", "java");
- repo.newRule("rule1")
+ NewRepository repo = context.createRepository("findbugs", "java");
+ repo.createRule("rule1")
.setName("Rule One")
.setHtmlDescription("Description of Rule One");
repo.done();
@Override
public void define(Context context) {
NewExtendedRepository repo = context.extendRepository("findbugs", "java");
- repo.newRule("rule2")
+ repo.createRule("rule2")
.setName("Rule Two")
.setHtmlDescription("Description of Rule Two");
repo.done();
static class FindbugsDefinitions implements RuleDefinitions {
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("findbugs", "java");
+ NewRepository repo = context.createRepository("findbugs", "java");
repo.setName("Findbugs");
- repo.newRule("ABC")
+ repo.createRule("ABC")
.setName("ABC")
.setHtmlDescription("Description of ABC");
repo.done();
static class SquidDefinitions implements RuleDefinitions {
@Override
public void define(Context context) {
- NewRepository repo = context.newRepository("squid", "java");
+ NewRepository repo = context.createRepository("squid", "java");
repo.setName("Squid");
- repo.newRule("DEF")
+ repo.createRule("DEF")
.setName("DEF")
.setHtmlDescription("Description of DEF");
repo.done();