.at(file.selectLine(line))
.message("This issue is generated on each line"))
.severity(Severity.valueOf(SEVERITY))
- .remediationEffort(EFFORT)
+ .remediationEffortMinutes(EFFORT)
.type(type)
.save();
}
public class NewExternalRule implements Rule {
private final RuleKey key;
private final String name;
- private final RuleType type;
private final String pluginKey;
private NewExternalRule(Builder builder) {
this.key = checkNotNull(builder.key, "key");
- this.type = checkNotNull(builder.type, "type");
this.pluginKey = builder.pluginKey;
this.name = builder.name;
}
@Override
public RuleType getType() {
- return type;
+ return null;
}
@Override
public static class Builder {
private RuleKey key;
- private String severity;
- private RuleType type;
private String pluginKey;
private String name;
return this;
}
- public Builder setType(RuleType type) {
- this.type = type;
- return this;
- }
-
- public String severity() {
- return severity;
- }
-
- public RuleType type() {
- return type;
- }
-
public String name() {
return name;
}
private NewExternalRule toExternalRule(ScannerReport.ExternalIssue reportIssue) {
NewExternalRule.Builder builder = new NewExternalRule.Builder()
- .setType(toRuleType(reportIssue.getType()))
.setName(RuleKey.of(reportIssue.getRuleRepository(), reportIssue.getRuleKey()).toString())
.setKey(RuleKey.of(RuleKey.EXTERNAL_RULE_REPO_PREFIX + reportIssue.getRuleRepository(), reportIssue.getRuleKey()));
- if (reportIssue.getSeverity() != Severity.UNSET_SEVERITY) {
- builder.setSeverity(reportIssue.getSeverity().name());
- }
return builder.build();
}
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rules.RuleType;
import static org.assertj.core.api.Assertions.assertThat;
NewExternalRule.Builder builder = new NewExternalRule.Builder()
.setKey(RuleKey.of("repo", "rule"))
.setPluginKey("repo")
- .setName("name")
- .setSeverity("MAJOR")
- .setType(RuleType.BUG);
+ .setName("name");
- assertThat(builder.severity()).isEqualTo("MAJOR");
- assertThat(builder.type()).isEqualTo(RuleType.BUG);
assertThat(builder.name()).isEqualTo("name");
NewExternalRule rule = builder.build();
assertThat(rule.getName()).isEqualTo("name");
assertThat(rule.getPluginKey()).isEqualTo("repo");
- assertThat(rule.getSeverity()).isEqualTo("MAJOR");
- assertThat(rule.getType()).isEqualTo(RuleType.BUG);
- }
-
- @Test
- public void fail_if_type_is_not_set() {
- exception.expect(IllegalStateException.class);
- exception.expectMessage("'type' not expected to be null for an external rule");
-
- new NewExternalRule.Builder()
- .setKey(RuleKey.of("repo", "rule"))
- .setSeverity("MAJOR")
- .build();
}
@Test
exception.expectMessage("'key' not expected to be null for an external rule");
new NewExternalRule.Builder()
- .setSeverity("MAJOR")
- .setType(RuleType.BUG)
.build();
}
}
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import static org.mockito.internal.verification.VerificationModeFactory.times;
-import static org.sonar.api.rule.Severity.BLOCKER;
-import static org.sonar.api.rules.RuleType.BUG;
public class RuleRepositoryImplTest {
underTest.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder()
.setKey(ruleKey)
.setPluginKey("eslint")
- .setSeverity(BLOCKER)
- .setType(BUG)
.build());
assertThat(underTest.getByKey(ruleKey)).isNotNull();
assertThat(underTest.getByKey(ruleKey).getPluginKey()).isEqualTo("eslint");
- assertThat(underTest.getByKey(ruleKey).getType()).isEqualTo(BUG);
+ assertThat(underTest.getByKey(ruleKey).getType()).isNull();
RuleDao ruleDao = dbClient.ruleDao();
Optional<RuleDefinitionDto> ruleDefinitionDto = ruleDao.selectDefinitionByKey(dbClient.openSession(false), ruleKey);
underTest.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder()
.setKey(ruleKey)
.setPluginKey("eslint")
- .setSeverity(BLOCKER)
- .setType(BUG)
.build());
underTest.persistNewExternalRules(db.getSession());
import org.sonar.server.rule.index.RuleIndexer;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.sonar.api.rule.Severity.BLOCKER;
-import static org.sonar.api.rules.RuleType.BUG;
public class PersistExternalRulesStepTest extends BaseStepTest {
private RuleRepositoryImpl ruleRepository;
@org.junit.Rule
- public EsTester es = EsTester.create();
+ public EsTester es = EsTester.create();
private RuleIndexer indexer = new RuleIndexer(es.client(), dbClient);
private ExternalRuleCreator externalRuleCreator = new ExternalRuleCreator(dbClient, System2.INSTANCE, indexer);
ruleRepository.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder()
.setKey(ruleKey)
.setPluginKey("eslint")
- .setSeverity(BLOCKER)
.setName("eslint:no-cond-assign")
- .setType(BUG)
.build());
underTest.execute();
assertThat(reloaded.getRuleKey()).isEqualTo("no-cond-assign");
assertThat(reloaded.getRepositoryKey()).isEqualTo("eslint");
assertThat(reloaded.isExternal()).isTrue();
- assertThat(reloaded.getType()).isEqualTo(2);
- assertThat(reloaded.getSeverity()).isEqualTo(4);
+ assertThat(reloaded.getType()).isEqualTo(0);
+ assertThat(reloaded.getSeverity()).isNull();
assertThat(reloaded.getName()).isEqualTo("eslint:no-cond-assign");
assertThat(reloaded.getPluginKey()).isEqualTo("eslint");
ruleRepository.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder()
.setKey(ruleKey)
.setPluginKey("eslint")
- .setSeverity(BLOCKER)
- .setType(BUG)
.build());
underTest.execute();
import org.sonar.server.rule.index.RuleIndexer;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.sonar.api.rules.RuleType.BUG;
public class ExternalRuleCreatorTest {
NewExternalRule externalRule = new NewExternalRule.Builder()
.setKey(ruleKey)
.setPluginKey("eslint")
- .setType(BUG)
.setName("name")
.build();
/**
* Effort to fix the issue, in minutes.
*/
- NewExternalIssue remediationEffort(@Nullable Long effort);
+ NewExternalIssue remediationEffortMinutes(@Nullable Long effortInMinutes);
/**
* Set the severity of the issue.
}
@Override
- public DefaultExternalIssue remediationEffort(@Nullable Long effort) {
+ public DefaultExternalIssue remediationEffortMinutes(@Nullable Long effort) {
Preconditions.checkArgument(effort == null || effort >= 0, format("effort must be greater than or equal 0 (got %s)", effort));
this.effort = effort;
return this;
.at(inputFile.selectLine(1))
.message("Wrong way!"))
.forRule(RuleKey.of("repo", "rule"))
- .remediationEffort(10l)
+ .remediationEffortMinutes(10l)
.type(RuleType.BUG)
.severity(Severity.BLOCKER);
.at(inputFile.selectLine(1))
.message("Wrong way!"))
.forRule(RuleKey.of("repo", "rule"))
- .remediationEffort(10l)
+ .remediationEffortMinutes(10l)
.severity(Severity.BLOCKER);
exception.expect(IllegalStateException.class);
.on(mock(InputComponent.class))
.message("Wrong way!"))
.forRule(RuleKey.of("repo", "rule"))
- .remediationEffort(10l)
+ .remediationEffortMinutes(10l)
.severity(Severity.BLOCKER);
exception.expect(IllegalStateException.class);
.at(inputFile.selectLine(1))
.message("Wrong way!"))
.forRule(RuleKey.of("repo", "rule"))
- .remediationEffort(10l)
+ .remediationEffortMinutes(10l)
.type(RuleType.BUG);
exception.expect(IllegalStateException.class);
NewExternalIssue externalIssue = context.newExternalIssue()
.forRule(RuleKey.of(issue.engineId, issue.ruleId))
.severity(Severity.valueOf(issue.severity))
+ .remediationEffortMinutes(20L)
.type(RuleType.valueOf(issue.type));
NewIssueLocation primary = fillLocation(context, externalIssue.newLocation(), issue.primaryLocation);
String ruleId;
String severity;
String type;
+ @Nullable
+ Integer effortMinutes;
Location primaryLocation;
@Nullable
Location[] secondaryLocations;
import org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
+import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.MessageException;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.report.ReportPublisher;
DefaultExternalIssue issue = new DefaultExternalIssue()
.at(new DefaultIssueLocation().on(file).at(file.selectLine(3)).message("Foo"))
+ .type(RuleType.BUG)
.forRule(SQUID_RULE_KEY)
.severity(org.sonar.api.batch.rule.Severity.CRITICAL);